用Matlab将一副256*256灰度图进行小波变换和逆变换,得到的图颜色加深了

i=imread('A.tif');

[A,B,C,D]=dwt2(i,'haar');
[a,b,c,d]=dwt2(A,'haar');

A=idwt2(a,b,c,d,'haar');
i=idwt2(A,B,C,D,'haar');
imshow(i,[]);

逆变换后的灰度图显得颜色更深,这是正常的吗?
有没有办法逆变换后的图和原图一样,或看不出差别呢?

头一次见人用这样的方式做多层的DWT,很有创新性,但从小波理论和物理意义上是完全错误的,您压根就没明白DWT的做法。dwt2(A,'haar');中的A是[A,B,C,D]=dwt2(i,'haar');得出的小波系数A,它不是你要分解的信号,从物理意义上讲你的A是没有量纲的小波系数,用于dwt2(A,'haar');这种格式就是错误的,因为使用dwt2函数时,这里的A就应该是你要分析的信号,应该是有量纲的。
另外,从DWT的小波理论讲,单层(单一尺度)的函数dwt2分解时,其尺度和平移参数的运作和多层DWT时是不同的,用多个单层的分解妄图模仿多层分解从小波理论的原理上讲就已经是错误的了,更别说还用物理含义的量纲问题。
所以这中做法本身就是错误的,从意义上分析它是混乱的(有量纲的和无量纲的量混合计算,天知道得到的结果应怎么去解释),从数值上分析它可能会有溢出的问题,逆变换重构后其值域可能难于预测。因此别玩得这么有新意了,老老实实用wavedec2和waverec2吧!追问

那能不能直接告诉我,怎么对这幅图做二阶小波变换,得到这个呢

谢谢

追答

我已经说的很清楚了,您受累查查帮助文档,那两个函数怎么用就行了。

追问

这样啊,那我自己继续琢磨。我看书上一会又是小波分量,一会又是小波系数,一会旁边又给幅分解的示意图,而究竟怎么来的实在理解不了,而我用[A,B,C,D]=dwt2(i,'haar');这样做,看到了A,B,C,D四幅图,所以就以为是这样分解了

追答

小波分量指的是DWT中使用mallat算法后得到的小波细节和小波逼近,它们都是小波系数,不是重构得到的信号。按照你那副图的结构,是要得到两阶DWT的所有小波系数,而不是逆变换后的信号。使用wavedec2函数进行两层分解,对其结果使用appcoef2和detcoef2函数提取逼近和细节分量的小波系数,为了使小波系数成图清楚使用wcodemat函数对小波系数进行量化编码,最终使用image成图,这里就得到了你结构图中的结果,其数值是小波系数。另外,如果你要的是你原问题中的结果,只想得到重构图像那就只需要wavedec2、waverec2和image了,由于重构你得到的是有量纲的重构信号而不是小波系数。

温馨提示:答案为网友推荐,仅供参考