Main Content

dct

이산 코사인 변환

설명

예제

y = dct(x)는 입력 배열 x에 대한 유니타리(Unitary) 이산 코사인 변환을 반환합니다. 출력값 yx와 크기가 같습니다. x가 둘 이상의 차원을 가지는 경우 dct는 크기가 1보다 큰 첫 번째 배열 차원을 따라 동작합니다.

y = dct(x,n)은 변환을 수행하기 전에 길이가 n이 되도록 x의 관련 차원을 0으로 채우거나 자릅니다.

예제

y = dct(x,n,dim)은 차원 dim을 따라 변환을 계산합니다. 차원을 입력하고 n의 디폴트 값을 사용하려면 두 번째 인수를 빈 값 []로 지정하십시오.

예제

y = dct(___,'Type',dcttype)은 계산할 이산 코사인 변환의 유형을 지정합니다. 자세한 내용은 이산 코사인 변환 항목을 참조하십시오. 이 옵션은 위에 열거된 구문과 함께 사용할 수 있습니다.

예제

모두 축소

시퀀스에서 에너지의 99%를 나타내는 DCT 계수가 몇 개인지 구합니다.

x = (1:100) + 50*cos((1:100)*2*pi/40);
X = dct(x);
[XX,ind] = sort(abs(X),'descend');
i = 1;
while norm(X(ind(1:i)))/norm(X) < 0.99
   i = i + 1;
end
needed = i;

신호를 복원한 후 이를 원래 신호와 비교합니다.

X(ind(needed+1:end)) = 0;
xx = idct(X);

plot([x;xx]')
legend('Original',['Reconstructed, N = ' int2str(needed)], ...
       'Location','SouthEast')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original, Reconstructed, N = 3.

미화 1센트 동전을 주조하는 데 사용된 주형의 깊이 측정값을 포함하는 파일을 불러옵니다. 미국 국립표준기술원(National Institute of Standards and Technology)에서 가져온 데이터가 128×128 그리드에 샘플링되어 있습니다. 데이터를 표시합니다.

load penny

surf(P)
view(2)
colormap copper
shading interp
axis ij square off

영상 데이터의 이산 코사인 변환을 계산합니다. 먼저 행을 따라 연산을 수행한 후에 열을 따라 연산을 수행합니다.

Q = dct(P,[],1);
R = dct(Q,[],2);

영상에서 에너지의 99.98%를 포함하는 DCT 계수가 차지하는 부분을 구합니다.

X = R(:);

[~,ind] = sort(abs(X),'descend');
coeffs = 1;
while norm(X(ind(1:coeffs)))/norm(X) < 0.9998
   coeffs = coeffs + 1;
end
fprintf('%d of %d coefficients are sufficient\n',coeffs,numel(R))
3572 of 16384 coefficients are sufficient

필요한 계수만 사용하여 영상을 복원합니다.

R(abs(R) < abs(X(ind(coeffs)))) = 0;

S = idct(R,[],2);
T = idct(S,[],1);

복원한 영상을 표시합니다.

surf(T)
view(2)
shading interp
axis ij square off

미화 1센트 동전을 주조하는 데 사용된 주형의 깊이 측정값을 포함하는 파일을 불러옵니다. 미국 국립표준기술원(National Institute of Standards and Technology)에서 가져온 데이터가 128×128 그리드에 샘플링되어 있습니다. 데이터를 표시합니다.

load penny

surf(P)
view(2)
colormap copper
shading interp
axis ij square off

DCT-1 변형을 사용하여 영상 데이터의 이산 코사인 변환을 계산합니다. 먼저 행을 따라 연산을 수행한 후에 열을 따라 연산을 수행합니다.

Q = dct(P,[],1,'Type',1);
R = dct(Q,[],2,'Type',1);

변환의 역변환을 구합니다. 복원한 영상의 각 차원이 원래 영상 길이의 절반이 되도록 역변환을 자릅니다.

S = idct(R,size(P,2)/2,2,'Type',1);
T = idct(S,size(P,1)/2,1,'Type',1);

이 변환의 역변환을 다시 구합니다. 복원한 영상의 각 차원이 원래 영상 길이의 두 배가 되도록 역변환을 0으로 채웁니다.

U = idct(R,size(P,2)*2,2,'Type',1);
V = idct(U,size(P,1)*2,1,'Type',1);

원래 영상과 복원한 영상을 표시합니다.

surf(V)
view(2)
shading interp
hold on

surf(P)
view(2)
shading interp

surf(T)
view(2)
shading interp
hold off
axis ij equal off

입력 인수

모두 축소

입력 배열로, 실수 값 벡터 또는 복소수 값 벡터, 행렬 또는 N차원 배열로 지정됩니다.

예: sin(2*pi*(0:255)/4)는 정현파를 행 벡터로 지정합니다.

예: sin(2*pi*[0.1;0.3]*(0:39))'는 2채널 정현파를 지정합니다.

데이터형: single | double
복소수 지원 여부:

변환 길이로, 양의 정수 스칼라로 지정됩니다.

데이터형: single | double

연산을 수행할 차원으로, 양의 정수 스칼라로 지정됩니다.

데이터형: single | double

이산 코사인 변환 유형으로, 1에서 4까지의 양의 정수 스칼라로 지정됩니다. 다양한 DCT 유형에 대한 정의는 이산 코사인 변환 항목을 참조하십시오.

데이터형: single | double

출력 인수

모두 축소

이산 코사인 변환으로, 실수 값 벡터 또는 복소수 값 벡터, 행렬 또는 N차원 배열로 반환됩니다.

세부 정보

모두 축소

이산 코사인 변환

이산 코사인 변환(DCT)은 이산 푸리에 변환과 밀접한 관련이 있습니다. 몇 개의 DCT 계수만 사용하여 매우 정확하게 시퀀스를 복원할 수 있는 경우가 많습니다. 이러한 속성은 데이터를 줄여야 하는 응용 사례에 유용합니다.

DCT에는 네 가지 표준 변형이 존재합니다. 길이가 N인 신호 x에 대해 크로네커 델타 δkℓ을 사용하는 경우, 변환은 다음과 같이 정의됩니다.

  • DCT-1:

    y(k)=2N1n=1Nx(n)11+δn1+δnN11+δk1+δkNcos(πN1(n1)(k1))

  • DCT-2:

    y(k)=2Nn=1Nx(n)11+δk1cos(π2N(2n1)(k1))

  • DCT-3:

    y(k)=2Nn=1Nx(n)11+δn1cos(π2N(n1)(2k1))

  • DCT-4:

    y(k)=2Nn=1Nx(n)cos(π4N(2n1)(2k1))

이 수열은 일반적인 n = 0k = 0이 아니라 n = 1k = 1부터 인덱싱됩니다. 그 이유는 MATLAB® 벡터의 범위는 0부터 N – 1까지가 아니라 1부터 N까지이기 때문입니다.

DCT의 모든 변형은 유니타리(Unitary)(또는 직교(orthogonal))입니다. 이에 대한 역을 구하려면 각 정의에서 k와 n을 서로 바꾸십시오. DCT-1과 DCT-4가 서로 역입니다. DCT-2와 DCT-3이 서로 역입니다.

참고 문헌

[1] Jain, A. K. Fundamentals of Digital Image Processing. Englewood Cliffs, NJ: Prentice-Hall, 1989.

[2] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

[3] Pennebaker, W. B., and J. L. Mitchell. JPEG Still Image Data Compression Standard. New York: Van Nostrand Reinhold, 1993.

확장 기능

버전 내역

R2006a 이전에 개발됨

참고 항목

| | (Image Processing Toolbox) | (Image Processing Toolbox)