【问题标题】:why are wavelet coefficients zeros after decomposition为什么分解后小波系数为零
【发布时间】:2015-02-07 02:41:19
【问题描述】:

我正在学习用于图像处理的小波理论。为了理解这个理论,我编写了一个 Matlab 程序来分解一张黑白图像。程序如下

 Image = zeros(256, 256, 'uint8');
 Image(101:200, 101:200) = 255;
 figure; imshow(Image);
 [cA1, cH1, cV1, cD1] = dwt2(Image, 'db1');
 Image1 = [cA1, cH1; cV1, cD1];
 figure; imshow(Image1, []);
 [cA1, cH1, cV1, cD1] = dwt2(Image, 'db2');
 Image1 = [cA1, cH1; cV1, cD1];
 figure; imshow(Image1, []);

使用参数 db1 的第一次分解为所有小波系数生成零。黑白图像在水平和垂直方向上都有从0到255的过渡,应该有高频分量。为什么会产生零小波系数?如果我将参数从 db1 更改为 db2,结果将在子带中显示水平和垂直线。

【问题讨论】:

    标签: matlab image-processing wavelet frequency-analysis


    【解决方案1】:

    如果你还记得,db1 就是Haar Wavelet。 Haar 小波采用局部窗口内像素的平均值作为近似系数(或 LL 带),或局部窗口内像素的差异作为细节系数(或 LH、HL 和 HH乐队)。

    请注意,您指定的输入图像仅包含两个强度:0 和 255。此外,您在该图像中设置了一个正方形网格,该网格为 255,并且形状一致

    为了自包含,您的测试图像如下所示:

    方形图像中这个形状一致的对象很重要,这是您没有得到任何细节图像(HL、LH 和 HH)输出的部分原因。

    描述为什么您看到的是db2 而不是db1 的输出的最佳方式可以直观地显示。

    这张幻灯片来自University of Toronto's CS 320: Introduction to Visual Computing course,特别是Discrete Wavelet Transform lecture

    您很清楚,当您使用 2D DWT 时,会生成 4 个子图像,其分辨率是原始图像的一半。 dwt2 的第一个输出是近似系数,其中每个输出像素是 2 x 2 窗口的平均值。其他输出(第二个、第三个和第四个)是细节窗口,它在窗口中取两个像素,然后用窗口中的其他两个像素减去这些像素。

    因此,您没有获得db1 的输出的原因是您对细节图像的所有计算都将取消。具体来说,您将获得完全为 0 或完全为 255 的 2 x 2 窗口,并且当您计算细节图像时,无论输出如何,您都将获得 0。您将添加两个 0 值或两个 255 值,然后分别减去这两个 0 值或 255 值,从而导致输出为 0 不管

    db2 小波是一种更复杂的变换,它是非均匀系数的加权和,因此您肯定会得到细节图像的输出,而不仅仅是 2 x 2 窗口的简单差分。

    我想强调的是,如果你有一个更复杂的不均匀形状,db1 肯定会不会给你一个零输出。在 MATLAB 附带的任何测试图像上试用它,例如 cameraman.tif


    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2013-04-02
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      相关资源
      最近更新 更多