基于小波金字塔的简单图像融合算法matlab实现

算法目标

将拍摄同一物体得到的两种不同对焦角度的图像进行融合,得到清晰的画面。

pepsi1.jpg pepsi2.jpg

代码实现

主程序

clear all;
close all;

leo1=imread('pepsi1.jpg');%读入图片
leo2=imread('pepsi2.jpg');
%%  k=融合系数 w=小波系  
k1=0.5;k2=0.5;w='db4'; tic;
outdoor1=rgb2gray(leo1);
outdoor2=rgb2gray(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);

%% 求边缘图像,矩阵融合
chd3=maxabs(chd13,chd23);
cvd3=maxabs(cvd13,cvd23);
cdd3=maxabs(cdd13,cdd23);
% ------------- %
chd2=maxabs(chd12,chd22);
cvd2=maxabs(cvd12,cvd22);
cdd2=maxabs(cdd12,cdd22);
% ------------- %
chd1=maxabs(chd11,chd21);
cvd1=maxabs(cvd11,cvd21);
cdd1=maxabs(cdd11,cdd21);
% ------------- %
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;

%% 展示
figure(1);
subplot(1,3,1)
imshow(leo1);
title('pepsi1');
subplot(1,3,2)
imshow(leo2);
title('pepsi2');
subplot(1,3,3)
imshow(uint8(I));
title('系数绝对值取最大融合');

子程序 maxabs

function X=maxabs(A,B) 
%附录3;
%对矩阵A,B,最大值法
 newA=zeros(size(A));
[m,n]=size(A);
%零延拓
for i=1:m
  for j=1:n
if abs(A(i,j))>=abs(B(i,j));
            newA(i,j)=A(i,j);        
        else
            newA(i,j)=B(i,j);
        end
     end
end
X=newA;
end

结果

posted @ 2021-03-04 15:58  GShang  阅读(1023)  评论(0编辑  收藏  举报