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

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

输入参数

全部折叠

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

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

全部展开

另请参阅

| |