如何在MATLAB中得到DCT能量分布图,或者我们可以称之为DCT系数分布图?

信息处理 图像处理
2022-02-05 06:56:58

下图是对图像进行 DCT 后的 DCT 系数绘制的:

如果图像的 DCT 系数分布

我想得到一个像上图一样的图像。这里有一些问题:

  1. 我应该对整个图像进行 DCT 而不是使用块 DCT?我应该使用什么 MATLAB 函数?
  2. 如何处理系数?使其在的范围内?或者使系数矩阵成为二进制图像?[0,255]

如果有人可以帮助我,我将不胜感激!

1个回答

该图像的大致形状可以(可能)通过应用于整个图像的Matlab 函数DCT2获得(问题 1)。我怀疑此图像来自实际 DCT 矩阵的绝对值,该矩阵通常具有正值和负值(问题 2)。绝对值可能被非线性映射修改,例如对数或幂。原因是右下角的值几乎都是黑色的,在高频处可能为零。您是否有正值和负值,该区域可能以中灰色显示。

PNG 文件有 251 种颜色,因此具有实数值的绝对 DCT 矩阵以某种方式四舍五入到 8 位,可能是缩放的,而不是二值化的。

关于你的问题:如何处理系数?您应该告诉我们除了显示灰度绝对 2D DCT 图像之外您还想做什么。您可以计算 DCT 域中的能量浓度,或者将两条亮线识别为原始图像上具有高梯度的两个主要方向。

以下代码生成类似的图像,如下所示。

parBoxCox = 0.15;
data = imread('gantrycrane.png');
dataTrans = (1+(abs(dct2(rgb2gray(data))))).^parBoxCox;
dataTrans = floor(dataTrans*255/max(dataTrans(:)));
imagesc(dataTrans);colormap gray

DCT图像