为什么小波系数在分解后为零

时间:2015-02-07 02:41:19

标签: matlab image-processing wavelet frequency-analysis

我正在学习用于图像处理的小波理论。为了理解这个理论,我写了一个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,结果将在子带中显示水平和垂直线。

1 个答案:

答案 0 :(得分:2)

如果您还记得,db1Haar Wavelet。 Haar小波采用局部窗口内的平均像素作为近似系数(或LL波段),或局部窗口内的像素的差异,用于细节系数(或LH,HL和HH)带)。

请注意,您指定的输入图像仅包含两种强度:0和255.此外,您在此图像中将方形网格设置为255,均匀形状

对于自我控制,这是您的测试图像的样子:

enter image description here

方形图像中的这个均匀形状的对象重要,作为您没有获得细节图像(HL,LH和HH)的任何输出的原因的一部分。

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

此幻灯片来自University of Toronto's CS 320: Introduction to Visual Computing course,具体来说是Discrete Wavelet Transform lecture

enter image description here

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

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

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

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


希望这有帮助!