【发布时间】:2014-07-30 08:12:28
【问题描述】:
我有一个 512x512 大小的灰度图像。我想将矩阵转换为 dct 所以这就是我所做的。
场景 1:对整个图像应用 DCT
img = imread('cameraman.tif');
img_dct = dct2(img);
场景 2:将 DCT 应用于原始图像的第一个 8x8 块
img2 = imread('cameraman.tif);
img_block = img2(1:8, 1:8);
img_block_dct = dct2(img_block);
现在,有趣的一点来了(或者我做错了什么)
当我显示 img_dct(1:8, 1:8) 和 img_block_dct 时,我得到两个非常不同的 8x8 矩阵。这两个不应该完全一样还是我弄错了?
【问题讨论】:
-
不,它们不应该相同。你计算了两个完全不同的东西。
-
@OliCharlesworth,我不明白。我所做的只是将 dct 应用于整个图像,同时仅从原始图像中获取 8x8 块并将 dct 应用于该块。
-
没错。第一个,输出值取决于整个图像,第二个它们仅取决于 8x8 区域。
-
@OliCharlesworth,哦,这意味着如果我需要图像中包含 DCT 系数的任何 8x8 块,我首先需要将整个图像转换为 DCT,然后提取一个 8x8 块?
-
这取决于你的目标是什么。大多数压缩算法的工作原理是将原始图像分成块,然后分别计算每个块的 DCT。