多聚焦图像融合源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
针对经典的最大系数法不准确和方差法计算量大的问题,本文给出了一种混合多级式多聚焦图像融合方法。对于三层小波分解的多聚焦图像融合,每幅图像被分解为三层十个频带。对这十个频带本文分别采用三种方法进行融合。对于低频系数,本文仍然采用求平均法;对于高频系数本文采用方差法和最大系数法进行融合。它们的计算量比最大系数法大一些,但是融合结果更接近于原始清晰图像,而相比于方差法,它们的计算量小的多,但是融合质量稍差一些,应用者可以根据不同的需要进行选择。
本文还给出了一种基于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,cd d2,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;
end
end
p = s./(sI*cI);
en = 0.;
for i = 1:256
if p(i)~=0
en = en+p(i)*log2(p(i));
end
end
entropy = -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(:));%一般是255
c=0;
for i=1:m
for j=1:n
w=G1(i,j)-G2(i,j);
c=c+w^2;
end
end
f=10*log10(b^2*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