이산 코사인 변환(Discrete cosine transform)
유한한 값들을 진동수(frequency)가 다른 코사인(cosine)들의 합으로 나타내는 변환. 높은 진동수를 거칠게 버려도 눈에 잘 띄지 않아 JPEG·MP3 같은 손실 압축(lossy compression)의 핵심이 된다.
푸리에 급수(Fourier series)가 주기 함수(periodic function)를 사인파(sinusoid)들의 합으로 쓰듯, 이산 코사인 변환은 값 N개
점을 위아래로 끌어 16개 값을 바꿔 보세요. 보기:
계수 16개 가운데
매끈한 데이터에서는 이웃한 값이 비슷하니 빠르게 출렁이는 성분이 작고, 에너지가 낮은 진동수 몇 개에 몰립니다. 그래서 몇 개만 남겨도 거의 그대로 되살아납니다. 이웃한 값의 상관이 1에 가까운 단순한 모형(한 칸 떨어진 값끼리만 직접 닮는 1차 마르코프 모형)에서는, 데이터에 맞춰 구한 주성분 분석(principal component analysis)의 축이 DCT의 기저에 다가간다는 것이 알려져 있습니다. 차이는 DCT가 데이터를 보지 않고 미리 정해 둔 축이라 계산이 빠르고 축을 따로 보낼 필요가 없다는 점입니다. '잡음'을 고르면 에너지가 모든 진동수에 흩어져 있어 거의 줄일 수 없습니다.
왜 사인과 코사인(sine and cosine)을 다 쓰는 이산 푸리에 변환(DFT)이 아니라 코사인일까요? DFT는 16개 값이 끝없이 되풀이된다고 봅니다. 그래서 '경사'처럼 끝과 처음의 값이 다르면 경계에 큰 계단이 생기고, 그 계단을 흉내 내느라 높은 진동수가 많이 필요하며, 몇 개만 남기면 깁스 현상(Gibbs phenomenon)처럼 끝이 출렁입니다. DCT는 데이터를 거울에 비춰 이어 붙인 것을 변환하는 셈이라 경계에서 값이 끊기지 않습니다. '경사'를 고른 채 변환을 DFT로 바꿔 보세요. 같은 개수의 계수로도 노란 곡선의 양 끝이 크게 출렁이고, 그림 아래 문장에 적힌 오차가 커집니다.
JPEG은 그림을 8×8 화소 덩어리로 나눠 가로세로로 DCT를 하고(64개 무늬), 계수를 표에 적힌 수로 나눠 반올림하는 양자화(quantization)를 합니다. 높은 진동수일수록 크게 나눠 거칠게 남기는데, 눈은 좁은 영역의 빠른 밝기 변화에 둔하기 때문입니다. 그러면 0이 된 계수가 많아지고, 이것을 지그재그로 읽어 0의 길이와 나머지 값을 허프만 부호(Huffman coding)로 적습니다. 너무 세게 줄이면 덩어리 경계가 보이는 격자 무늬가 생깁니다. MP3와 AAC는 소리를 조금씩 겹치는 짧은 토막(창)으로 잘라 토막마다 변형된 DCT(MDCT)를 하고, 동영상 부호화도 비슷한 정수(integer) 변환을 씁니다. 이런 변환들은 1965년 제임스 쿨리와 존 튜키가 널리 알린 고속 푸리에 변환(FFT)처럼, 문제를 절반 크기 둘로 쪼개 푸는 분할 정복(divide and conquer)으로
이어지는 곳. 양 끝이 막힌(열이 새지 않는) 막대의 열방정식(heat equation)을 풀면 온도가 바로 이 코사인 무늬들의 합으로 나타나고, 높은 진동수일수록 빨리 사라집니다. 열이 퍼지면 온도 분포가 매끄러워지는 것은 높은 진동수 성분부터 사라지기 때문이고, 높은 진동수를 버리면 매끄러워지는 것도 같은 원리입니다. 각 기저는 진폭(amplitude)과 진동수를 가진 사인파를 표본(sample)으로 뽑은 것이고, 변환 전체는 하나의 선형변환(linear transformation)입니다. 소리나 그림을 애초에 표본으로 뽑아도 되는 까닭은 표본화 정리(sampling theorem)가 말해 주고, 계수마다 몇 비트를 줄지, 곧 얼마나 거칠게 양자화할지의 이론적 한계는 율–왜곡 이론(rate–distortion theory)이 정합니다.
이 개념이 나오는 긴 글
이 개념을 언급하는 페이지
- 푸리에 급수
… 정도로 줄어듭니다. 1965년 제임스 쿨리와 존 튜키가 발표해 널리 퍼졌습니다. 코사인만 쓰는 사촌인이산 코사인 변환은 JPEG처럼 눈에 덜 띄는 정보를 조금 버리는 대신 크기를 크게 줄이는 손실 압축의 핵심입니다. 가장 …
- 주성분 분석
… 나옵니다. 그래서 JPEG은 사진마다 주성분을 새로 구하는 대신, 미리 정해 둔 코사인 물결을 축으로 쓰는이산 코사인 변환으로 거의 같은 효과를 얻습니다. 입력을 좁은 병목으로 압축했다가 되살리도록 학습하는 신경망인 …
- 깁스 현상
… 성분마다 e^{-k^2t} 를 곱해 절벽을 순식간에 뭉개는 것도 같은 원리입니다. JPEG처럼이산 코사인 변환의 높은 진동수 성분을 거칠게 버리는 압축에서 날카로운 경계 옆에 생기는 물결무늬(링잉)도 비슷한 원인으로 …
- 분할 정복
… 변환 덕분에 다항식의 곱셈, 푸리에 급수의 계수를 수치로 어림하는 일, JPEG 압축에 쓰이는이산 코사인 변환을 빠르게 계산할 수 있습니다. 이진 탐색: 반쪽 하나만 남기고 나머지를 버리는, a = 1, d = …
- 허프만 부호
… 쓰는 DEFLATE는 렘펠–지브로 반복을 줄인 뒤 그 결과를 다시 허프만 부호로 적습니다. JPEG도이산 코사인 변환으로 얻어 양자화한 계수를 마지막에 허프만 부호로 줄입니다. 이어지는 곳. 고정 길이 부호는 k가지 글자에 …
- 표본화 정리
… 2BT차원 공간의 점 하나라는 뜻이고, 여기에 잡음을 더하면 섀넌–하틀리 정리가 됩니다. 뽑은 표본들은이산 코사인 변환이나 고속 푸리에 변환(1965년 제임스 쿨리와 존 튜키가 널리 알린 빠른 계산법)으로 다시 …
- 율–왜곡 이론
… , R = \sum_i \tfrac12 \log_2 (\sigma_i^2 / D_i) .이산 코사인 변환은 이웃 화소의 닮음을 풀어, 분산이 큰 몇 개의 낮은 진동수 계수와 분산이 작은 많은 높은 진동수 계수로 …
- 특잇값 분해
… 절반쯤 줄 뿐입니다. JPEG은 그림을 8×8 화소 조각으로 나누고, 모든 그림에 같은 코사인 무늬를 쓰는이산 코사인 변환을 씁니다. 무늬가 정해져 있으니 계수만 적으면 됩니다. 특잇값 분해가 빛나는 곳은 데이터의 주된 방향을 …
- 합성곱 신경망
… 정리이고, 푸리에 급수가 신호 처리에서 하는 일이 바로 이것입니다. 복소 사인파 대신 코사인만 쓰는이산 코사인 변환도 가장자리를 거울처럼 이어 붙인 신호에서 같은 역할을 합니다. '흐리게' 필터는 높은 진동수를 대체로 …
- 라플라시안과 그래프 라플라시안
… 함수를 분해하는 것이 푸리에 급수입니다. 한 줄로 이은 꼭짓점 n 개의 그래프에서는 고유벡터가 정확히이산 코사인 변환의 코사인들입니다. 이어지는 곳. 온도가 '이웃 평균 − 나'에 비례해 변한다는 식이 열방정식 u_t …
- 이산 푸리에 변환과 고속 푸리에 변환
… 소리의 스펙트럼, 곧 진동수별 세기를 그리는 일이 그렇고, JPEG와 MP3가 쓰는 코사인판 변환(이산 코사인 변환)도 같은 쪼개기로 빠르게 계산합니다. 두 수열의 한쪽을 뒤집어 밀어 가며 겹치는 칸끼리 곱해 더하는 …