Main Content

idct2

二维逆离散余弦变换

说明

示例

B = idct2(A) 返回 A 的二维逆离散余弦变换 (DCT)。

B = idct2(A,m,n)

B = idct2(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)');

输入参数

全部折叠

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

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

输出参量

全部折叠

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

数据类型: double

提示

  • 对于任何矩阵 A,在舍入误差界限内 idct2(dct2(A)) 等于 A

算法

idct2 使用下式计算二维逆 DCT:

Amn=p=0M1q=0N1αpαqBpqcosπ(2m+1)p2Mcosπ(2n+1)q2N, 0mM10nN1,

其中

αp={1M, p=0             2M, 1pM1

αq={1N, q=0            2N, 1qN1.

参考

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

[2] Pennebaker, W. B., and J. L. Mitchell, JPEG: Still Image Data Compression Standard, New York, Van Nostrand Reinhold, 1993.

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开

另请参阅

| | |