이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

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')

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

load penny

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

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

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

영상에서 에너지의 99.9%를 포함하는 계수가 전체 중 몇 퍼센트인지 구합니다.

X = R(:);

[~,ind] = sort(abs(R(:)),'descend');
coeffs = 1;
while norm(X(ind(1:coeffs)))/norm(X) < 0.999
   coeffs = coeffs + 1;
end
fprintf('%3.1f%% of the coefficients are sufficient\n',coeffs/numel(R)*100)
6.9% of the coefficients are sufficient

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

R(abs(R) < X(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)에서 가져온 데이터가 128x128 그리드에 샘플링되어 있습니다. 데이터를 표시합니다.

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차원 배열 또는 gpuArray 객체로 지정됩니다.

gpuArray 객체에 대한 자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목과 릴리스별 GPU 지원 (Parallel Computing Toolbox) 항목을 참조하십시오.

예: 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 차원 배열 또는 gpuArray 객체로 반환됩니다.

세부 정보

모두 축소

이산 코사인 변환

이산 코사인 변환(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] Pennebaker, W. B., and J. L. Mitchell. JPEG Still Image Data Compression Standard. New York: Van Nostrand Reinhold, 1993.

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

확장 기능

참고 항목

| | |

R2006a 이전에 개발됨