Main Content

dctmtx

이산 코사인 변환 행렬

설명

예제

D = dctmtx(n)n×n 이산 코사인 변환(DCT) 행렬을 반환합니다. 이 행렬은 영상에서 2차원 DCT를 수행하는 데 사용할 수 있습니다.

예제

모두 축소

영상을 작업 공간으로 읽어 들인 후 double형 클래스로 형변환합니다.

A = im2double(imread('rice.png'));
imshow(A)

Figure contains an axes object. The axes object contains an object of type image.

이산 코사인 변환 행렬을 계산합니다.

D = dctmtx(size(A,1));

A의 열에 대한 DCT를 얻으려면 입력 영상 AD를 곱하고, A의 열에 대한 역 DCT를 얻으려면 D'을 곱합니다.

dct = D*A*D';
imshow(dct)

Figure contains an axes object. The axes object contains an object of type image.

입력 인수

모두 축소

DCT 행렬의 크기로, 양의 정수로 지정됩니다.

데이터형: double

출력 인수

모두 축소

DCT 행렬로, n×n 크기의 숫자형 행렬로 반환됩니다.

데이터형: double

  • n×n 영상 A의 경우 D*AA의 열에 대한 DCT이고 D'*AA의 열에 대한 역 DCT입니다.

  • A의 2차원 DCT는 D*A*D'로 계산할 수 있습니다. 이 계산 방식은 D를 한 번만 결정하면 되기 때문에, 특히 작은 DCT를 여러 번 계산할 때 dct2를 사용하는 것보다 종종 속도가 더 빠릅니다.

    예를 들어 JPEG 압축 시 각 8×8 블록에 대한 DCT를 계산한다고 가정하겠습니다. 이 계산을 수행하려면 dctmtx를 사용하여 D를 결정한 다음 D*A*D'를 사용하여 각 DCT를 계산합니다(여기서 A는 각 8×8 블록임). 이렇게 계산하는 것이 개별 블록 각각에 대해 dct2를 호출하는 것보다 속도가 더 빠릅니다.

버전 내역

R2006a 이전에 개발됨

참고 항목