本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

dct2

二维离散余弦变换

说明

示例

B = dct2(A) 返回 A 的二维离散余弦变换。矩阵 B 包含离散余弦变换系数 B(k1,k2)。

B = dct2(A,m,n)

在应用变换之前,B = dct2(A,[m n])0 对矩阵 A 进行填充,使其大小为 m×n。如果 mn 小于 A 的对应维度,则 dct2 在变换前对 A 进行裁切。

示例

全部折叠

此示例说明如何使用二维离散余弦变换 (DCT) 去除图像中的高频分量。

将图像读入工作区,然后将图像转换为灰度图像。

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

使用 dct2 函数对灰度图像执行二维 DCT。

J = dct2(I);

使用对数刻度显示变换后的图像。请注意,大部分能量在左上角。

figure
imshow(log(abs(J)),[])
colormap(gca,jet(64))
colorbar

将 DCT 矩阵中模小于 10 的值设置为零。

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

使用逆 DCT 函数 idct2 重新构造图像。

K = idct2(J);

并排显示原始灰度图像和处理后的图像。

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

输入参数

全部折叠

输入矩阵,指定为二维数值矩阵。

图像行数,指定为正整数。dct20 填充图像 A,或截断图像 A 使其具有 m 行。默认情况下,m 等于 size(A,1)

图像列数,指定为正整数。dct20 填充图像 A,或截断图像 A 使其具有 n 列。默认情况下,n 等于 size(A,2)

输出参数

全部折叠

使用二维离散余弦变换进行变换后的矩阵,以 m×n 数值矩阵形式返回。

数据类型: double

详细信息

全部折叠

离散余弦变换

离散余弦变换 (DCT) 与离散傅里叶变换密切相关。它是可分离的线性变换;也就是说,该二维变换等效于先沿一个维度执行一维 DCT,然后在另一维度中执行一维 DCT。输入图像 A 和输出图像 B 的二维 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 之前推出