【MATLAB图像融合】[8] 基于拉普拉斯金字塔的融合(LPT)

阅读: 评论:0

【MATLAB图像融合】[8] 基于拉普拉斯金字塔的融合(LPT)

【MATLAB图像融合】[8] 基于拉普拉斯金字塔的融合(LPT)

一、高斯-拉普拉斯金字塔

简介
       第6节的内容是高斯金字塔,拉普拉斯金字塔还称为高斯-拉普拉斯金字塔。是因为它的生成方式如下:
       ①、生成高斯金字塔。
       ②、依次用高斯金字塔的k层减去k+1层。
       ③、生成的差值图像即为拉普拉斯金字塔。
       使用拉普拉斯金字塔融合图像,是因为其能够明确表示图像在每一个尺度、每一个分辨率上的高频细节。这样,通过比较两幅源图像对应的尺度的图像,就能够将源图像各自突出的图像细节提取并保留、融合到融合图像中,尽可能丰富融合图像的信息量,达到较好的融合效果。
思路
       具体究竟如何生成一个拉普拉斯金字塔,如下:
       ①、低通滤波(使用高斯核进行卷积)
       ②、下采样(生成上层滤波图像)
       ③、上采样(为了让上层图像分辨率与下层相等)
       ④、带通滤波(图像相减生成差值图像)
MATLAB实现
拉普拉斯金字塔生成

function lp=ftower(x,N)
w=fgaosi(x,N);                           %调用gaosi函数首先建立原图像x的高斯金字塔。
N=length(w);                             %求出高斯金字塔的层数。
lp={};                                   %lp是lap金字塔。for i=1:N-1                              %除高斯金字塔的最高层外,其他每层图像都执行下面的操作。temp1=w{1,i}-expand(w{1,i+1});       %对上一层图像调用expand函数,再用本层图像减去其结果,生成差值图像。lp=[lp,temp1];%a=temp1;subplot(3,4,i);imshow(uint8(a));title(['LP金字塔第' num2str(i),'层']);
end
lp=[lp,w{1,N}];                          %最高一层为高斯顶层。
endfunction y=expand(x)
w=[1,4,6,4,1];
w=1/256*(w'*w);
temp=imresize(x,2);
y=conv2(temp,w,'same');                  %将插值结果与w进行卷积。
end

二、基于拉普拉斯金字塔的图像融合

MATLAB实现
思路
       现在得到了一个N层的拉普拉斯金字塔,第N层为高斯N层,其余N-1层为差值图像。那么对这些层要设计融合规则:
       1、假设分解至最高层N层(图像分辨率有限,不可能无限制分解下去,log2图像大小即为最高层数),那么建议使用像素值极大选择方案;假设分解到K层,K>N/2时,采用加权平均融合;K<N/2时,采用梯度比较融合。
       2、对于非顶层的其余层融合,采用区域能量算法。

主功能函数

function y=flap(x1,x2,N)x1=double(x1);x2=double(x2);L1=ftower(x1,N);       %分别建立两幅原图像的Laplace金字塔。L2=ftower(x2,N);L={};                  %L用来存储两幅图像融合后的Laplace金字塔。for i=1:N-1            %分别对Laplace金字塔的1~N-1每一层进行融合。temp1=L1{1,i};     %采用区域能量算法。temp2=L2{1,i};temp=fenergy(temp1,temp2);L=[L,temp];        %L保存融合后的每一层图像。enda=L1{1,N};             %对第N层进行融合。    b=L2{1,N};c=[];c=ftidu(a,b);          %调用梯度融合算法。L=[L,c]; y=frestr(L);           %调用restr函数由融合后的Laplace金字塔恢复原图像
end

梯度融合函数

function out=ftidu(x,y) 
[xdx,xdy]=gradient(x);
s1=(xdx.^2+xdy.^2);[ydx,ydy]=gradient(y);
s2=(ydx.^2+ydy.^2);[rows,cols]=size(s1); 
news=[];for i=1:rowsfor j=1:colsif s1(i,j)>=s2(i,j)news(i,j)=x(i,j);elsenews(i,j)=y(i,j);endendout=news;
end
end

       梯度算法如有需要我可以单独再讲一下,这里我提前编写好,没有注释,但是很好懂。
高斯金字塔

function y=fgaosi(x,N)x=double(x);y(1)={x};for i=1:N-1x=freduce(x);a=x;y(i+1)={a};end
endfunction t=freduce(x)[row,col]=size(x);w=[1,4,6,4,1];w=1/256*(w'*w);temp=conv2(x,w,'same');M=floor(row/2);N=floor(col/2);for i=1:M               for j=1:Nt(i,j)=temp(2*i,2*j);endend
end

三、融合图像重构

思路
       按照差值图像金字塔的生成方式,逆推回去,就可以得到融合图像。最底层的融合图像和原图像大小一致;其后每一层的大小都为下一层大小的1/2,需要插值到与原图像尺寸一致的大小才可以进行相加;将这些图像矩阵直接相加就可以得到重构图像了。
MATLAB实现

function R=frestr(r)
N=length(r);          %求出Laplace金字塔的层数。
re={r{1,1}};
R=r{1,1};             %将Laplace金字塔的最底层赋给G。
for i=N:-1:2          %除Laplace金字塔的最底层,对应其他第i层调用i-1次expand函数。%(例如第2层调用1次,第3层调用2次...),每一层最后得到的尺寸都和最底层相同。temp1=r{1,i};for j=1:i-1temp1=expand(temp1);endre=[re,temp1];    %将每层得到的结果存入re中。
end
for i=2:NR=R+re{1,i};      %输出R就是将Laplace每一层执行上面的操作得到的结果相加。
end
endfunction y=expand(x)
w=[1,4,6,4,1];
w=1/256*(w'*w);
temp=imresize(x,2);
y=conv2(temp,w,'same');                  %将插值结果与w进行卷积
end

函数调用

clear;clc;x1=imread('1.tif');
x2=imread('2.tif');
x1=imresize(x1,[512 512]);x2=imresize(x2,[512 512]);   %本代码只适配了2整数次幂的分辨率。
y1=flap(x1,x2,4);y2=flap(x1,x2,5);                     %分别测试4、5层融合情况。
y1=uint8(y1);y2=uint8(y2);subplot(2,2,1);imshow(x1);title('头发模糊');
subplot(2,2,2);imshow(x2);title('脸部模糊');
subplot(2,2,3);imshow(y1);title('4层Laplace金字塔融合图像');
subplot(2,2,4);imshow(y2);title('5层Laplace金字塔融合图像');

运行结果:

       由论文:申晓华,杨国胜,张焕龙.改进的基于区域能量的图像融合方法【J】导弹与制导学报2006,26(4):279-281 所提出的方法,用拉普拉斯金字塔分解代替,得到实验结果:

注:
①、还有一个函数是能量算法的函数,在我上一节的代码中附有。本文所有代码加上能量算法代码即可完整运行。
②、将代码拆分是为了讲解和分别调用,如果已经看到这里了,想必分散的文件也可以完成运行吧(笑)。
③、如果是其他非个人学习用途,我也提供了一个整合文件,lapfusion.m,放在资源下载区了。另外过一段时间会上传几种不同融合策略融合的文件夹。
④、为了展示方法,代码只做了2的次幂的分辨率,所以主程序第一步就是缩放至512*512分辨率,只要对几个代码稍微修改,就可以实现任意分辨率的融合以及RGB图像的处理。

总结
       传统金字塔变换的图像融合时代虽然已经结束,但是经典的方法还是有其价值,在拉普拉斯金字塔基础上,后来的金字塔变换还有CPT(对比度金字塔融合)、GPT(梯度金字塔融合)等方法,有机会的话,也将它们实现一下放在一起讨论。
       多尺度图像融合的理论与技术已经发展了40年了,我想我们可以在这里继续做的,就是读懂前人的工作并且结合新的技术,比如万物皆可学习的机器学习,神经网络等,让多尺度图像融合技术继续发展。
       所以,下周继续推进,进入小波变换的图像融合学习。欢迎大家一起交流学习。

本文发布于:2024-02-04 21:14:08,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170716550759662.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:拉普拉斯   金字塔   图像   MATLAB   LPT
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23