多聚焦图像融合源代码(4页).doc
-多聚焦图像融合源代码-第 4 页针对经典的最大系数法不准确和方差法计算量大的问题,本文给出了一种混合多级式多聚焦图像融合方法。对于三层小波分解的多聚焦图像融合,每幅图像被分解为三层十个频带。对这十个频带本文分别采用三种方法进行融合。对于低频系数,本文仍然采用求平均法;对于高频系数本文采用方差法和最大系数法进行融合。它们的计算量比最大系数法大一些,但是融合结果更接近于原始清晰图像,而相比于方差法,它们的计算量小的多,但是融合质量稍差一些,应用者可以根据不同的需要进行选择。本文还给出了一种基于Canny算子边缘检测的小波变换多聚焦图像融合方法。首先对图像进行三层小波分解,然后用Canny算子进行边缘检测,得到各层分辨率下的边缘图像;对相应分辨率的高频小波系数根据其是否为图像的边缘点采用最大系数法或方差法分别进行融合。仿真实验证明该方法效果良好,计算量可以灵活调节。关键词:小波变换;多尺度几何分析;多聚焦图像融合;边缘检测主要程序:clear all;close all;leo1=imread('a1.bmp');%读入图片leo2=imread('a2.bmp')T=0.4;k1=0.5;k2=0.5;w='db4'm='edge' tic;outdoor1=leo1;outdoor2=leo2;%三层小波分解ca11,chd11,cvd11,cdd11=dwt2(outdoor1,w);ca12,chd12,cvd12,cdd12=dwt2(ca11,w);ca13,chd13,cvd13,cdd13=dwt2(ca12,w);ca21,chd21,cvd21,cdd21=dwt2(outdoor2,w);ca22,chd22,cvd22,cdd22=dwt2(ca21,w);ca23,chd23,cvd23,cdd23=dwt2(ca22,w);%求边缘图像e11=edge(ca11,'canny',T);e12=edge(ca12,'canny',T);e13=edge(ca13,'canny',T);e21=edge(ca21,'canny',T);e22=edge(ca22,'canny',T);e23=edge(ca23,'canny',T);%矩阵融合chd3=matfusion(chd13,chd23,e13,e23);cvd3=matfusion(cvd13,cvd23,e13,e23);cdd3=matfusion(cdd13,cdd23,e13,e23);chd2=matfusion(chd12,chd22,e12,e22);cvd2=matfusion(cvd12,cvd22,e12,e22);cdd2=matfusion(cdd12,cdd22,e12,e22);chd1=matfusion(chd11,chd21,e11,e21);cvd1=matfusion(cvd11,cvd21,e11,e21);cdd1=matfusion(cdd11,cdd21,e11,e21);ca3=k1*ca13+k2*ca23;%反小波变换L2=size(chd2);L1=size(chd1);ca2=idwt2(ca3,chd3,cvd3,cdd3,w);ca1=idwt2(ca2(1:L2(1),1:L2(2),chd2,cvd2,cdd2,w);I=idwt2(ca1(1:L1(1),1:L1(2),chd1,cvd1,cdd1,w);toc;%显示图像 subplot(2,2,1);imshow(leo1);colormap(gray);title('input1');axis square subplot(2,2,2);imshow(leo2);colormap(gray);title('input2');axis square subplot(2,2,3);imshow(uint8(I);colormap(gray);title('最大系数法与方差法融合');axis square;%标准差 f_stdvar=sta_variance1(I) %清晰度,又称为平均梯度 f_avggrad=avg_gradient(I) f=PSNR(I)% 信噪比 %其值越大,说明融合图像和标准参考图像%的差异越小,融合效果越好se=RMSE(I)% %RMSE(均方根误差,也称%为标准偏差, 融合图像与标准图像差异%程度,差异越小说明融合图像与标准图%像越接近%I3 = imread('clockB.jpg');sI,cI,bI = size(uint8(I);I3 = double(uint8(I)+1;s(256) = 0;for i = 1:sI for j = 1:cI va = I3(i,j); s(va) = s(va)+1; endendp = s./(sI*cI);en = 0.;for i = 1:256 if p(i)=0 en = en+p(i)*log2(p(i); endendentropy = -en %融合图像的熵function f=PSNR(h2)%PSNR return PSNR(峰值信噪比) 能用 %衡量融合图像相对于标准参考图像灰度%的偏离程度其值越大,说明融合图像和%标准参考图像的差异越小,融合效果越好h1=imread('a.bmp') ;% 标准图像 G1=double(h1);G2=double(h2);m1,n1=size(G1);m2,n2=size(G2);m=min(m1,m2);n=min(n1,n2);b=0;b=max(G1(:);%一般是255c=0;for i=1:m for j=1:n w=G1(i,j)-G2(i,j); c=c+w2; endendf=10*log10(b2*m*n/c);function se=RMSE(h2)%RMSE return RMSE(均方根误差) 能用 %融合图像与标准图像差异程度,差异越小%说明融合图像与标准图像越接近h1=imread('a.bmp') ; % 标准图像 G1=double(h1);G2=double(h2);m1,n1=size(G1);m2,n2=size(G2);m=min(m1,m2);n=min(n1,n2);c=0;for i=1:m for j=1:n w=G1(i,j)-G2(i,j); c=c+w2; endendse=sqrt(c/(m*n);%标准差function img_var = sta_variance1(img);if nargin=1 img = double(img); r,c,b = size(img); for k = 1 : b band = img(:,:,k); s1=sum(sum(band.2)./(r*c); s2=(sum(sum(band)./(r*c).2; g(k) = s1-s2; end img_mean = mean(g); img_var=sqrt(img_mean);else disp('wrong number of input');End%平均梯度,也称清晰度function outval = avg_gradient(img)if nargin = 1 img = double(img); r,c,b = size(img); dx = 1; dy = 1; for k = 1 : b band = img(:,:,k); dzdx=0.0; dzdy=0.0; dzdx,dzdy = gradient(band,dx,dy); s = sqrt(dzdx . 2 + dzdy .2) ./ 2); g(k) = sum(sum(s) / (r - 1) * (c - 1); end outval = mean(g); else error('Wrong number of input!');End左部分被模糊图像右部分被模糊图像原始清晰图像