一、简介

1 拉普拉斯金字塔
在高斯金字塔的运算过程中,图像经过卷积和下采样操作会丢失部分高频细节信息。为描述这些高频信息,人们定义了拉普拉斯金字塔(Laplacian Pyramid, LP)。用高斯金字塔的每一层图像减去其上一层图像上采样并高斯卷积之后的预测图像,得到一系列的差值图像即为 LP 分解图像。
将Gl内插方法得到放大图像Gl,使Gl的尺寸与Gl-1的尺寸相同,即放大算子Expand。
该式子实现两个步骤:在偶数行和列插入0,然后使用下采样中的高斯核进行滤波处理,得到和l-1层一样大小的图像。
N为拉普拉斯金字塔顶层的层号LPl是拉普拉斯金字塔分解的第L层图像。由LP0,LP1、LP2…LPN构成的金字塔即为拉普拉斯金字塔。它的每一层L0图像是高斯金字塔本层G0图像与其高一层图像G1经内插放大后图像
G1的差,此过程相当于带通滤波,因此拉普拉斯金字塔又称为带通金字塔分解。
内插方法:opencv中有实现的函数pyrup。可以得到*G1。然后在两个函数作差,相减就可以得到拉普拉斯金字塔。
求得每个图像的拉普拉斯金字塔后需要对相应层次的图像进行融合,具体的融合规则有,取大、取小,等等。

首先对原始图像Gi进行向下取样,然后向上采用,最后与原始图像相减,得到拉普拉斯金字塔图像。
下面这张图也是比较常见的:

使用原始图像 套入公式得到拉普拉斯金字塔第0层。
使用原始图像向下采样Od 代入公式 得到 拉普拉色金字塔第1层。
这张图在看一些资料的时候也经常看到:

2 融合应用
  图像拉普拉斯金字塔分解的目的是将源图像分别分解到不同的空间频带上,融合过程是在各空间频率层上分别进行的,这样就可以针对不同分解层的不同频带上的特征与细节,采用不同的融合算子以达到突出特定频带上特征与细节的目的。即有可能将来自不同图像的特征与细节融合在一起。
(1)顶层处理
设LAl和LBl分别为源图像A,B经过拉普拉斯金字塔分解后得到的第l层图像,融合后的结果为LFl。当l=N时,LAN和LBN分别为源图像A,B经过拉普拉斯金字塔分解后得到的顶层图像。对于顶层图像的融合,首先计算以其各个像素为中心的区域大小为M*N(M、N取奇数且M >= 3、N >= 3)的区域平均梯度:
其中,Ix与Iy分别为像素f(x,y)在x与y方向上的一阶差分,定义如下:
因此对于顶层图像中的每一个像素LAN(i, j)和LBN(i, j)都可以得到与之相对应的区域平均梯度GA(i, j)和GB(i, j)。由于平均梯度反映了图像中的微小细节反差和纹理变化特征,同时也反映出图像的清晰度。一般来说平均梯度越大,图像层次也丰富,则图像越清晰。因此顶层图像的融合结果为:
(2)各层次处理
当0<l<N时,则对于经过拉普拉斯金字塔分解的第l层图像,首先计算其区域能量:
则其他层次图像的融合结果为:
在得到金字塔各个层次的融合图像LF1、LF2、LFN后。通过前面的重构,便可得到最终的融合图像。
第二种融合规则:
采用最高层系数取平均,其余各层系数绝对值取大的融合策略进行融合。融合后图像的系数(灰度值)越接近较清晰图像的灰度值就说明融合效果好。

二、源代码

function varargout = gui(varargin)
% GUI M-file for gui.fig
%      GUI, by itself, creates a new GUI or raises the existing
%      singleton*.
%
%      H = GUI returns the handle to a new GUI or the handle to
%      the existing singleton*.
%
%      GUI('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in GUI.M with the given input arguments.
%
%      GUI('Property','Value',...) creates a new GUI or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before gui_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to gui_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help gui% Last Modified by GUIDE v2.5 27-May-2011 17:39:18% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @gui_OpeningFcn, ...'gui_OutputFcn',  @gui_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before gui is made visible.
function gui_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to gui (see VARARGIN)% Choose default command line output for gui
handles.output = hObject;% Update handles structure
guidata(hObject, handles);% UIWAIT makes gui wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = gui_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;% --------------------------------------------------------------------
function Open_Callback(hObject, eventdata, handles)
[name,path]=uigetfile( ...{'*.jpg;*.tif;*.png;*.gif;*.bmp','All Image Files';...'*.*','All Files' },...'请选择要融合的低分辨率图片');
fullpath=strcat(path,name);
[name2,path2]=uigetfile( ...{'*.jpg;*.tif;*.png;*.gif;*.bmp','All Image Files';...'*.*','All Files' },...'请选择要融合的高分辨率图片(');
fullpath2=strcat(path2,name2);
save path.mat fullpath fullpath2
% hObject    handle to Open (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% --- Executes during object creation, after setting all properties.
function axes1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to axes1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: place code in OpeningFcn to populate axes1% --- Executes on button press in add_fu_button.
function add_fu_button_Callback(hObject, eventdata, handles)
axes(handles.axes1);
cla;
axes(handles.axes2);
cla;
axes(handles.axes3);
cla;
a=get(handles.radiobutton5,'value');
b=get(handles.radiobutton6,'value');
c=get(handles.radiobutton7,'value');
if a==1load path.mataxes(handles.axes1);low=imread(fullpath);imshow(low);axes(handles.axes2);high=imread(fullpath2);imshow(high);addfusion;load image.mataxes(handles.axes3);imshow(fusionresult);%
end
if b==1load path.mataxes(handles.axes1);low=imread(fullpath);imshow(low);axes(handles.axes2);high=imread(fullpath2);imshow(high);sel_h_fusion;load image.mataxes(handles.axes3);imshow(fusionresult);%
end
if c==1load path.mataxes(handles.axes1);low=imread(fullpath);imshow(low);axes(handles.axes2);high=imread(fullpath2);imshow(high);sel_l_fusion;load image.mataxes(handles.axes3);imshow(fusionresult);%
end%axes(handles.axes4);
%cla;
%load path.mat
%axes(handles.axes1);
%low=imread(fullpath);
%imshow(low);
%axes(handles.axes2);
%high=imread(fullpath2);
%imshow(high);
%addfusion;
%load image.mat
%axes(handles.axes3);%imshow(fusionresult);
% hObject    handle to add_fu_button (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% --- Executes on button press in pretreat_button.
function pretreat_button_Callback(hObject, eventdata, handles)
load path.mat
axes(handles.axes4);
low=imread(fullpath);
imshow(low);
axes(handles.axes5);
high=imread(fullpath2);
imshow(high);
pretreat;
load image.mat
NbColors=255;
map=gray(NbColors);
axes(handles.axes6);
image(pretreat_result_low);
colormap(map);
axes(handles.axes7);
image(pretreat_result_high);
colormap(map);% hObject    handle to pretreat_button (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

三、运行结果


四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

【图像融合】基于matlab GUI简单+拉普拉斯金字塔算法图像融合【含Matlab源码 780期】相关推荐

  1. 基于matlab GUI Powell+蚁群算法图像配准

    基于matlab GUI Powell+蚁群算法图像配准 一.简介 1 蚁群算法(ant colony algorithm,ACA)起源和发展历程 Marco Dorigo等人在研究新型算法的过程中, ...

  2. 【电力预测】基于matlab GUI灰色模型电力负荷预测【含Matlab源码 769期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源: [电力负荷预测]基于matlab GUI灰色模型电力负荷预测[含Matlab源码 769期] 获取代码方式2: 通过订阅紫极神光博客付费专 ...

  3. 【芯片识别】基于matlab GUI形态学PCB板芯片识别【含Matlab源码 1820期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[芯片识别]基于matlab GUI形态学 PCB板芯片识别[含Matlab源码 1820期] 点击上面蓝色字体,直接付费下载,即可. 获 ...

  4. 【大米粒计数】基于matlab GUI形态学大米粒颗粒识别【含Matlab源码 915期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[大米粒计数]基于matlab GUI形态学大米粒颗粒识别[含Matlab源码 915期] (https://download.csdn. ...

  5. 【光学】基于matlab GUI菲涅尔系数计算【含Matlab源码 1165期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI菲涅尔系数计算[含Matlab源码 1165期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  6. 【缺陷检测】基于matlab GUI印刷电路板自动缺陷检测【含Matlab源码 1912期】

    ⛄一.印刷电路板自动缺陷检测简介 我国是PCB生产大国,据世界电子电路理事会WECC各协会统计[1],2007年中国大陆PCB产值占全球总产值的27.9%,仅一年时间就比2006年增长了17.0%.但 ...

  7. 【身份证识别】基于matlab GUI形态学二代身份证识别系统【含Matlab源码 947期】

    ⛄一.身份证号码识别简介 1 引言 作为居民身份的象征,身份证是居民身份的唯一标识,它已成为生活中必不可少的证件.在火车站.酒吧等公共场所,流动人口大人员复杂,警察需要对公民的身份证进行核对,排除可疑 ...

  8. 【语音去噪】基于matlab GUI切比雪夫+椭圆形低通滤波器语音去噪【含Matlab源码 2198期】

    一.语音处理简介 1 语音信号的特点 通过对大量语音信号的观察和分析发现,语音信号主要有下面两个特点: ①在频域内,语音信号的频谱分量主要集中在300-3400Hz的范围内.利用这个特点,可以用一个防 ...

  9. 【语音隐写】基于matlab GUI DCT音频数字水印嵌入提取【含Matlab源码 837期】

    一.离散小波变换的音频信号数字水印技术简介 0 引言 近年来, 数字水印技术的作用越来越重要.数字水印技术是将一些标识信息直接嵌入数字载体当中, 或间接表示在信号载体中, 且不影响原载体的使用价值.通 ...

  10. 基于matlab的串口通信,基于Matlab GUI的单片机串口与PC的通信 附源码

    我也是最近学习单片机和MATLAB的小白平时在看学习的时候 下载了一些有价值的参考文献 概述采用51单片机,atmel的STC89C52RC芯片,主要用到的是七段数码管用来做一个时钟,程序编写软件为k ...

最新文章

  1. 基于交换技术的网络中,全双工主要运行在?( 内有答案与详解)
  2. oracle10g重新配置crs,Oracle 10G RAC一节点系统重做后修复
  3. JavaScript是如何工作的:JavaScript的共享传递和按值传递
  4. 011_html标题
  5. 今日arXiv精选 | 15篇ICCV 2021最新论文
  6. Android提权漏洞CVE-2014-7920CVE-2014-7921分析
  7. [转载]acm进阶之路
  8. 隐藏apache版本号的方法
  9. linux桌面_使用 KDE Plasma 定制 Linux 桌面 | Linux 中国
  10. Flink流处理练习
  11. H248协议附加业务--遇忙前转流程
  12. python 学堂在线_学习Python编程学堂在线试题及答案
  13. mysql mm keeplive_mysql +keeplive
  14. 切身体验的优秀时间管理法——番茄时间工作法!
  15. AOD实践,modis数据下载,modis数据处理,
  16. java jshell_[Java JShell 指南] - 介绍
  17. PCB----LayOut的一些准则
  18. 电脑连上手机热点却不能上网
  19. linux grep命令要查找的内容有双引号
  20. pycharm远程连接服务器中的docker容器的配置

热门文章

  1. GIMP的Path的import和export
  2. 网站域名安全:泛解析处理及防护
  3. Hibernate关系映射(三) 多对一和一对多
  4. hadoop集群的搭建与配置(2)
  5. 20200721每日一句
  6. 20200624每日一句
  7. 20200518每日一句
  8. 每日一句20191019
  9. 传智播客扫地僧C/C++学习 数据类型的本质
  10. 你缺的不是时间而是专注力