Main Content

dct2

二维离散余弦变换

说明

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

示例

B = dct2(A,m,n)

B = dct2(A,[m n]) 在应用变换之前,对矩阵 A 进行零填充或裁剪,使其大小为 m×n

示例

全部折叠

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

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

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

J = dct2(I);

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

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

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

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

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

Figure contains an axes object. The hidden axes object with title Original Grayscale Image (Left) and Processed Image (Right) contains an object of type image.

输入参数

全部折叠

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

图像行数,指定为正整数。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 之前推出

全部展开

另请参阅

| |