多聚焦图像融合源代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档