Main Content

dct2

2 次元離散コサイン変換

説明

B = dct2(A)A の 2 次元離散コサイン変換を返します。行列 B は、離散コサイン変換係数 B(k1,k2) を含みます。

B = dct2(A,m,n) および

B = dct2(A,[m n]) は変換を適用する前に行列 A をゼロ パディングまたはトリミングし、サイズを mn 列にします。

すべて折りたたむ

イメージをワークスペースに読み取った後、グレースケールに変換します。

RGB = imread('autumn.tif');
I = im2gray(RGB);

関数 dct2 を使用して、グレースケール イメージの 2 次元 DCT を実行します。

J = dct2(I);

対数スケールを使用して、変換後のイメージを表示します。大半のエネルギーが左上隅にあることに注目してください。

imshow(log(abs(J)),[])
colormap parula
colorbar

DCT 行列内で大きさが 10 未満の値を 0 に設定します。

J(abs(J) < 10) = 0;

逆 DCT 関数 idct2 を使用してイメージを復元します。データ型 double のイメージに期待できる範囲 [0, 1] に値を再スケーリングします。

K = idct2(J);
K = rescale(K);

元のグレースケール イメージを処理されたイメージと並べて表示します。処理済みのイメージでは、高周波数の細部 (樹木のテクスチャなど) が少なくなります。

montage({I,K})
title('Original Grayscale Image (Left) and Processed Image (Right)');

入力引数

すべて折りたたむ

入力行列。2 次元数値行列として指定します。

イメージの行数。正の整数として指定します。dct2 はイメージ A0 でパディング、またはイメージ Am 行になるように切り捨てます。既定では、msize(A,1) と等価です。

イメージの列数。正の整数として指定します。dct2 はイメージ A0 でパディング、またはイメージ An 列になるように切り捨てます。既定では、nsize(A,2) と等価です。

出力引数

すべて折りたたむ

2 次元離散コサイン変換を使用して変換された行列。mn 列の数値行列として返されます。

データ型: double

詳細

すべて折りたたむ

離散コサイン変換

離散コサイン変換 (DCT) は離散フーリエ変換と密接に関連しています。DCT は分離可能な線形変換の 1 つです。つまり、2 次元変換は、ある次元に沿って 1 次元 DCT を実行した後で、もう 1 つの次元で 1 次元 DCT を実行することに相当します。入力イメージ A と出力イメージ B に関する 2 次元 DCT の定義は次のようになります。

Bpq=αpαqm=0M1n=0N1Amncosπ(2m+1)p2Mcosπ(2n+1)q2N, 0pM10qN1

ここで、

αp={1M, p=0           2M, 1pM-1

αq={1N, q=0          2N, 1qN-1

MN はそれぞれ A の行サイズと列サイズです。

ヒント

  • DCT を実数データに適用すると、その結果も実数になります。DCT は情報を凝縮する傾向があるので、イメージ圧縮アプリに適しています。

  • DCT の逆変換を行うには、idct2 を使用します。

参照

[1] Jain, Anil K., Fundamentals of Digital Image Processing, Englewood Cliffs, NJ, Prentice Hall, 1989, pp. 150–153.

[2] Pennebaker, William B., and Joan L. Mitchell, JPEG: Still Image Data Compression Standard, Van Nostrand Reinhold, 1993.

拡張機能

バージョン履歴

R2006a より前に導入

すべて展開する

参考

| |