メインコンテンツ

dct

説明

y = dct(x) は、入力配列 x の単項離散コサイン変換を返します。出力 y は、x と同じサイズになります。x が複数次元配列である場合、dct は、サイズが 1 より大きい最初の配列次元に沿って動作します。

y = dct(x,n) は、x にゼロを付加するか関連する次元を切り捨て、長さ n にしてから変換します。

y = dct(x,n,dim) は、次元 dim に沿って変換を計算します。次元を入力し、n の既定値を使用するには、2 番目の引数を空 [] として指定します。

y = dct(___,Type=dcttype) は、計算する離散コサイン変換のタイプを指定します。詳細については、離散コサイン変換を参照してください。このオプションは、上述の任意の構文と組み合わせることができます。

すべて折りたたむ

何個の DCT 係数でエネルギー の 99% が表されるかを順番に求めます。

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

信号を再構成し、元の信号と比較します。

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

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

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

米国の 1 セント銅貨を鋳造するために使用される型の深さの測定値を含むファイルを読み込みます。米国国立標準技術研究所で取得されたこのデータは、128 行 128 列のグリッド上でサンプリングされています。データを表示します。

load penny

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

Figure contains an axes object. The hidden axes object contains an object of type surface.

イメージ データの離散コサイン変換を計算します。最初に行、次に列に沿って動作します。

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

DCT 係数のどれくらいの部分にイメージの 99.98% のエネルギーが含まれるかを求めます。

X = R(:);

[~,ind] = sort(abs(X),"descend");
coeffs = 1;
while (norm(X(ind(1:coeffs)))/norm(X))^2 < 0.9998
   coeffs = coeffs + 1;
end
disp(coeffs + " of " + numel(R) + " coefficients are sufficient")
5215 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

Figure contains an axes object. The hidden axes object contains an object of type surface.

米国の 1 セント銅貨を鋳造するために使用される型の深さの測定値を含むファイルを読み込みます。米国国立標準技術研究所で取得されたこのデータは、128 行 128 列のグリッド上でサンプリングされています。データを表示します。

load penny

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

Figure contains an axes object. The hidden axes object contains an object of type surface.

DCT-1 バリアントを使用して、イメージ データの離散コサイン変換を計算します。最初に行、次に列に沿って動作します。

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

逆変換を行います。逆変換を切り捨てて、再構成後のイメージの各次元が元の 1/2 の長さになるようにします。

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

再度、逆変換を行います。逆変換にゼロを付加し、再構成後のイメージの各次元が元の 2 倍の長さになるようにします。

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

元のイメージと再構成後のイメージを表示します。

surf(V)
hold on
surf(P)
surf(T)
hold off

shading interp
view(2)
axis ij equal off

Figure contains an axes object. The hidden axes object contains 3 objects of type surface.

入力引数

すべて折りたたむ

入力配列。実数値または複素数値のベクトル、行列、または 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 次元配列として返されます。

詳細

すべて折りたたむ

参照

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