资源描述
姓名:曹新颖 学号:112083 队别:研二队
小波分析用于图像融合与分解
1.1 小波分析用于图像融合
图像融合是将同一对象的两个或更多的图像合成在一幅图像中,以便它比原来的任何一幅图像更容易得为人们所理解。这一技术可应用于多频谱图像理解以及医学图像处理等领域。在这些场合。同一物体部件的图像往往是采用不同的成像机理得到的。
下面用二维小波分析将上例中woman.mat和wbarb.mat两幅图像融合在一起。程序清单见附录(1)。结果如图1.1:
图1.1 小波分析用于图像融合
1.2 小波分析用于图像分解
回顾从一维离散小波变换到二维的扩展,二维静态小波变换采用相似的方式。对行和列分别采用高通和低通滤波器。这样分解的结果仍然是四组图像、近似图像、水平细节图像、竖直细节图像和对角图像,与离散小波变换不同的只是静态小波分解得到的四幅图像与原图像尺寸一致,道理与一维情况相同。
二维离散小波变换同样只提供了一个函数swt2,因为它不对分解系数进行下采样,所以单层分解和多层分解的结果是一样的。不需要另外提供多层分解的功能。
下面是一个用命令行使用swt命令的例子,大家可以对比它和dwt处理结果的区别,程序见附录(2)。显示的结果如图1.2所示,由于分解过程中没有改变信号的长度,所以在显示近似和细节系数时不需要重建。
同idwt2的类似,Matlab对二维静态小波重建提供了iswt2命令,同idwt的去边也同一维情况类似,对经过重建滤波后的信号不做上采样(因为近似系数和细节系数大小都与原信号一致)。
图1.2 小波分析用于图像分解
同一维的静态小波重建一样,这个例子说明了如何将iswt2单纯用做滤波器来实现各层系数的重建,与一维的情况不同的只是为了重建第j层近似系数,需要4次用到iswt2作为重建滤波器对第j+1层的系数进行滤波,在对某一个近似系数滤波的过程中,同样需要把其他的三个系数指定为0。
接上面的例子,直接利用对noiswom的分解结果,从中重建各级系数。程序见附录(3)。显示的结果如图1.3
图1.3 在db1小波下各级静态小波重建系数
附录(1)
load woman;
X1=X;map1=map;
%画出原始图像
subplot(221);image(X1);colormap(map1);
title('woman');
axis square
load wbarb;
X2=X;map2=map;
for i=1:256
for j=1:256
if (X2(i,j)>100)
X2(i,j)=1.2*X2(i,j);
else
X2(i,j)=0.5*X2(i,j);
end
end
end
subplot(222);image(X2);colormap(map2);
title('wbarb');
axis square
%用小波函数sym4对X1进行2层小波分解
[c1,s1]=wavedec2(X1,2,'sym4');
%对分解系数进行处理以突出轮廓部分,弱化细节部分
sizec1=size(c1);
for i=1:sizec1(2)
c1(i)=1.2*c1(i);
end
%用小波函数sym4对X2进行2层小波分解
[c2,s2]=wavedec2(X2,2,'sym4');
%下面进行小波变换域的图像融合
c=c1+c2;
%减小图像亮度
c=0.5*c;
%对融合的系数进行重构
xx=waverec2(c,s1,'sym4');
%画出融合后的图像
subplot(223);image(xx);
title('融合图像');
axis square
附录(2)
load noiswom
[swa,swh,swv,swd]=swt2(X,3,'db1');
%使用db1小波对noiswom图像进行三层静态小波分解
whos
可以看出,swt2所小波分解同样不改变信号的长度,原来的96×96的图像做了三层分解以后,分解系数是12个96×96的图像。
colormap(map)
kp=0;
for i=1:3
subplot(3,4,kp+1),image(wcodemat(swa(:,:,i),192));
title(['Approx,cfs,level',num2str(i)])
%显示第i层近似系数图像,以192字节为单位编码
subplot(3,4,kp+2),image(wcodemat(swh(:,:,i),192));
title(['Horiz.Det.cfs level',num2str(i)])
subplot(3,4,kp+3),image(wcodemat(swv(:,:,i),192));
title(['Vert.Det.cfs level',num2str(i)])
subplot(3,4,kp+4),image(wcodemat(swd(:,:,i),192));
title(['Diag.Det.cfs level',num2str(i)])
kp=kp+4;
end
附录(3)
load noiswom
[swa,swh,swv,swd]=swt2(X,3,'db1');
%使用db1小波对noiswom图像进行三层小波分解
mzero=zeros(size(swd));
A=mzero;
A(:,:,3)=iswt2(swa,mzero,mzero,mzero,'db1');
%使用iswt2的滤波器功能,重建第3层的近似系数,为了避免iswt的合成运算,注意在重建过程中,应保证其他各项系数为零。
H=mzero;V=mzero;D=mzero;
for i=1;3
swcfs=mzero;swcfs(:,:,i)=swh(:,:,i);
H(:,:,i)=iswt2(mzero,swcfs,mzero,mzero,'db1');
swcfs=mzero;swcfs(:,:,i)=swv(:,:,i);
V(:,:,i)=iswt2(mzero,mzero,swcfs,mzero,'db1');
swcfs=mzero;swcfs(:,:,i)=swh(:,:,i);
H(:,:,i)=iswt2(mzero,mzero,mzero,swcfs,'db1');
end
%分别重建1~3级的各个细节系数,同样在重建某一吸收的时候,要令其他系数为0
A(:,:,2)=A(:,:,3)+H(:,:,3)+V(:,:,3)+D(:,:,3);
A(:,:,1)=A(:,:,2)+H(:,:,2)+V(:,:,2)+D(:,:,2);
%使用递推的方法建立地1层和第2层近似系数
colormap(map)
kp=0;
for i=1:3
subplot(3,4,kp+1),image(wcodemat(A(:,:,i),192));
title(['第',num2str(i),'层近似系数图像'])
subplot(3,4,kp+2),image(wcodemat(H(:,:,i),192));
title(['第',num2str(i),'层水平细节系数图像'])
subplot(3,4,kp+3),image(wcodemat(V(:,:,i),192));
title(['第',num2str(i),'层竖直细节系数图像'])
subplot(3,4,kp+4),image(wcodemat(D(:,:,i),192));
title(['第',num2str(i),'层对角细节系数图像'])
kp=kp+4;
end
%画出通过手工方法重建的各级小波系数图像
err=norm(A(:,:,2)-swa(:,:,2))
%求出用这种算法重建的第2层近似系数和分解系数之间的误差
err=2.9242e+004
展开阅读全文