最近学习了一段小波,对小波函数在信号处理中得应用有了大概的了解,对信号进行小波分解,主要过程就是求平均和细节,设{x1,x2}表示一个两元素的信号,a=(x1+x2)/2;d=(x1-x2)/2,二元素组{a,d}可表示原信号,并且
x1=a+d;x2=a-d;即由{a,d}可恢复原信号。这就是小波分解的思想。对于长度为N的信号,我们可以构造小波的滤波器组,滤波器的系数可能小于信号的长度,通过在滤波器后面补0的方法,使得信号的长度和滤波器的长度相等,然后和低通滤波器和高通滤波器做卷积运算,将信号分成两部分:低通部分和高通部分。二维图像的小波运算,先对行进行低通、高通卷积运算,再对列进行低通、高通运算,再进行信号的下采样,得到四个部分[LL,HL,LH,HH],其中LL保留了源图像的大部分能量。将低、高通滤波器求逆,既得恢复算法的滤波器,分别对行和列求卷积,再进行上采样,就可得恢复图像。
程序中调用的函数,均来自zyh的博客,在此应用一下,如有冒犯,敬请谅解。
clc;
clear;clear all;
x=imread('cameraman.tif');
x=double(x);
subplot(131);
image(x);
colormap(gray);
title('源图像')
axis square;
[LL,HL,LH,HH]=mydwt2(x);
subplot(132);
image(LL);
title('一次小波后逼近图像')
axis square;
%subplot(223);
%image(LL,HL,LH,HH);
title('一次小波后')
y=myidwt2(LL,HL,LH,HH);
subplot(133);
image(y);
title('重构后得图像')
axis square;
figure(2);
subplot(221)
image(LL);
subplot(222);
image(HL);
subplot(223);
image(LH);
subplot(224);
image(HH);
colormap(gray);
>> whos
Name Size Bytes Class
HH 128x128 131072 double array
HL 128x128 131072 double array
LH 128x128 131072 double array
LL 128x128 131072 double array
x 256x256 524288 double array
y 256x256 524288 double array