MATLAB 二维反余弦变换:从频率数据恢复图像
反余弦变换,通常表示为 ICT 或 IDCT,是一种反转余弦变换过程的数学运算。它在信号和图像处理中特别有用,可以根据频域表示重建信号或图像。
在二维信号或图像的背景下,二维反余弦变换(2-D ICT 或 2-D IDCT)将余弦系数矩阵(表示信号或图像的频率内容)转换回空间域,生成原始信号或图像。
MATLAB 中的二维反余弦变换用于将余弦值矩阵转换为空间域图像。它是二维余弦变换的逆运算,常用于图像处理和压缩。 idct2 函数用于在 MATLAB 中执行二维反余弦变换。
二维逆离散余弦变换
在 MATLAB 中,idct2 函数用于执行二维反余弦变换。它以余弦系数矩阵作为输入,并返回信号或图像的空间域表示。结果是可以显示或进一步处理的重建图像。
反余弦变换在各种应用中都至关重要,包括图像压缩(例如 JPEG 压缩)、图像重建和信号处理任务,其中信号或图像需要在频域处理后转换回其原始形式。
语法
<前>03前>语法解释
B =idct2(A) - 计算矩阵 A 的二维逆离散余弦变换 (IDCT),返回矩阵 B 中的结果。此操作有效地根据 A 中的频域表示重建空间域图像。
B =idct2(A, m,n) - 计算矩阵 A 的二维逆离散余弦变换 (IDCT),并将输出矩阵 B 的大小指定为 m×n。此操作有效地从 A 中的频域表示重建空间域图像,并将其大小调整为指定的维度 m×n。
B =idct2(A, [m,n]) - 计算矩阵 A 的二维逆离散余弦变换 (IDCT),并将输出矩阵 B 的大小调整为 m 行和 n 列。此操作根据 A 中的频域表示重建空间域图像,并将其大小调整为指定的维度 [m n]。
让我们看一些二维逆离散余弦变换的例子
示例 1:使用 idct2() 函数去除图像中的高频
我们的代码是 -
<前>12前>在示例中 -
- imread 函数用于从文件(本例中为“autumn.tif”)读取图像并将其存储在变量 img 中。
- 如果图像是彩色图像(即具有红、绿、蓝三个通道),则使用 rgb2gray 函数将其转换为灰度图像。这样做是因为二维 DCT 通常应用于灰度图像。
- dct2 函数计算图像的二维 DCT。结果存储在变量 dct_img 中。 DCT 在频域中表示图像,其中高频分量对应于像素值的快速变化。
- 选择阈值来确定保留哪些 DCT 系数以及丢弃哪些。在此示例中,我们选择仅保留前 50 个系数(在 256x256 图像中,这些系数代表最低频率)。高频系数(超出阈值的系数)设置为零。
- idct2 函数计算修改后的 DCT 系数的逆 2-D DCT (dct_img_thresh)。该操作有效地从频域表示重建空间域图像。结果存储在filtered_img中。
- 最后,使用imshow函数并排显示原始图像和过滤后的图像。左侧显示原始图像,右侧显示滤波后的图像(去除高频)。
执行时我们得到的输出是 -
示例 2:使用 B =idct2(A, m,n) 调整图像大小
我们的代码是 -
<前>29前>在这个例子中,我们有 -
- imread 函数用于从文件(本例中为“autumn.tif”)读取图像并将其存储在变量 img 中。
- 如果图像是彩色图像(即具有红、绿、蓝三个通道),则使用 rgb2gray 函数将其转换为灰度图像。此步骤很重要,因为二维 DCT 通常应用于灰度图像。
- dct2 函数计算图像的二维 DCT。结果存储在变量 dct_img 中。 DCT在频域中表示图像,图像的不同频率用不同的系数表示。
- 为了调整图像大小,我们将 DCT 系数矩阵 (dct_img) 调整为更小的尺寸。这是使用 imresize 函数完成的,将新大小指定为原始大小的一半 (new_size =size(img) / 2)。这有效地降低了图像的频域表示。
- idct2 函数计算调整后的 DCT 系数 (dct_resized) 的逆 2-D DCT。此操作有效地从调整大小的频域表示重建调整大小的空间域图像。
- 最后,使用 imshow 函数并排显示原始图像和调整大小的图像。原始图像显示在左侧,调整大小的图像(使用 2-D IDCT 获得)显示在右侧。
执行的输出是 -
示例 3:使用二维逆离散余弦变换 (IDCT) 调整矩阵大小
我们的代码如下 -
<前>33前>在此示例中,我们创建一个 4x4 样本矩阵 A。然后,我们对 A 应用 2-D IDCT,并将结果大小调整为 3x2 矩阵 [m, n] =[3, 2]。变换后显示调整后的矩阵B。
我们得到的输出如下 -
<前>42前>MATLAB