오늘은 맑음

DCT 본문

Video Processing

DCT

자전거 타는 구구 2017. 11. 18. 03:01
반응형

학부생 때 공부했던 자료가 비공개로 있었네요

마침 다시 공부해야 해서 비공개 글을 뒤져보다가 오늘 찾았습니다.

역시 배운건 쓸모가 다 있네요

 

 

DCT

  • 이산 푸리에 변환처럼 공간 혹은 시간 차원의 데이터를 주파수 차원으로 변환한다.

 

 

위의 표를 보면 DCT변환과 FFT변환의 이미지 복원률을 상세하게 볼 수 있다.

그래프를 보게 되면 DCT변환이 FFR변환보다 복원을 하였을 시에 원본 이미지와 비슷한 그래프를 그리는 것을 볼 수 있다. 따라서 이미지를 복원 하였을 시에 DCT변환이 원본과 더 유사한 형태를 띄므로 더 효율이 좋다고 할 수 있다.

 

 

위의 DCT 변환 공식에서 DCT는 N = 8일 때 다음 매트릭스 형태로 표현 가능하다.

 

 

사진을 위의 공식에 따라 변환을 하게 되면 아래와 같이 실수 형태로 나타나지게 된다. 하지만 실수를 처리하지 못하는 환경에서는 아래와 같이 정수화 시켜서 연산을 수행하게 된다. 또한 이렇게 함으로 써 속도가 30배가량 향상 됨을 알 수 있다.

 

 

아래의 식으로 DCT 연산을 수행하게 된다. 

DCT연산은 정변환 연산과 역변환 연산이 있는다..

정변환 연산은 이미지를 주파수 차원으로 변환 시켜 주고 역변환은 주파수 차원을 다시 이미지로 복원 시켜준다.

 

정변환

  •  세로방향의 DCT변환, DCT_V는 cos행렬 T와 행렬로 표시한 영상 I와의 행렬 곱셈 연산으로 구할 수 있다. DCT_V = T * I
  • 또한 DCT_V에 대한 가로 방향의 DCT변환, DCT_VH는 다음과 같다.
  • DCT_VH = T*(DCT_V)'. 여기서 '는 전치행렬이다.
  • 행렬 연산 AB = B'A'이므로 DCT_VH = DCT_V*T'
  • 따라서 영산 I에 대한 DCT 변환 공식은 DCT_VH = T*I*T'이다.
역변환
  • 역변환 공식은 정병환의 반대방향으로 이루어진다.
  • IDCT_H = DCT'*T = T'*DCT
  • IDCT_HV = IDCT_H*T = T'*DCT*T

정변환과 역변환은 다음 코드와 같이 구현할 수 있다.

M = size(image, 1);

D = dctmax(M);

 

정변환

DCT = D * image * D'

 

역변환

IDCT = D' * image * D

 

  위의 DCT연산을 보면 4중 loop연산이 되는 것을 알 수 있는데, 연산량을 줄이기 위해 영상을 8 * 8블록으로 나누어 블록별로 연산한다.

 

 

DCT변환을 하게 되면 좌측 위부터 저주파로 시작해서 우측 아래로 고주파가 몰리게 된다. 위의 사진은 DCT 주파수에 jet64() 색상을 입힌 모습이다. 이 때 붉은색일수록 많다는 것을 의미하는데 저주파가 고주파보다 훨씬 많이 있음을 알 수 있다.

 

 

 

 

 

 

 

반응형

'Video Processing' 카테고리의 다른 글

Baseline JPEG for hardware  (0) 2021.12.30
Dithering, Floyd-Steinberg  (0) 2021.05.19
Video raster scan(raster scan order)  (0) 2021.04.17
YUV/YCbCr file format의 종류  (0) 2021.04.17
Comments