【图像融合】基于matlab GUI高斯金字塔+拉普拉斯金字塔彩色图像融合【含Matlab源码 1506期】

本文主要是介绍【图像融合】基于matlab GUI高斯金字塔+拉普拉斯金字塔彩色图像融合【含Matlab源码 1506期】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、区域分割图像融合简介

图像的分解
对源图像进行融合时,首先对图像进行分解,利用拉普拉斯金字塔分解,先对图像进行高斯金字塔分解,然后再进行拉普拉斯金字塔分解。

1 高斯金字塔分解
记源图像为G0,G0即为高斯金字塔最底层,将其进行高斯低通滤波,之后对其进行隔行隔列的下采样,得到的图像与源图像在较低分辨率上近似,分辨率是源图的一半(高斯金字塔的第一层G1)。重复上述操作,得到下一层高斯金字塔。反复进行上述操作,得到若干层,即构成高斯金字塔。假设高斯金字塔的第l层图像为Gl:
在这里插入图片描述
在这里插入图片描述
2 拉普拉斯金字塔分解
将上述得到的高斯金字塔利用插值法进行插值,膨胀后的图像Gl的尺寸与第l-1层图像Gl-1尺寸相同,如式(13)所示:
在这里插入图片描述

3 彩色图像融合
基于S-PCNN+局部熵(Local Entropy,LE)与拉普拉斯金字塔的融合,在一般RGB格式图像中,对每个分量进行处理时,由于三个分量的相关性很大,不易对特定因素进行处理,所以对图像进行融合时,为了得到较好的效果和有效的处理方式,先将RGB图像转换为HSI图像,得到H、S、I三个分量,再分别对三个分量进行相关的处理与融合。

对于H分量,送入S-PCNN模型,经过迭代得到振荡频图(Oscillation Frequency Graph,OFG),再对其得到的振荡频图(OFG)进行局部熵(LE)的计算,得到OFG局部熵矩阵作为H分量的特征矩阵,最后根据不同的源图像的H分量对应像素局部熵的大小,取其LE较大的像素作为最终融合所取的像素。

图像的局部熵由下式表述:
在这里插入图片描述
其中:Pk=h(k)/(m×n),m×n表示像素I(i,j)的邻域,h(k)表示邻域的直方图,pi为邻域的归一化直方图,K表示邻域像素的最大灰度值。

对于S分量和I分量,对其进行拉普拉斯金字塔分解,然后用不同的策略对经分解处理后的金字塔子层图像进行融合。在金字塔低层的图像,用局部熵来作为决策准则选取融合系数,高层金字塔图像通过S-PCNN模型来选取融合系数。本文采用的融合算法是基于简化脉冲耦合神经元的神经网络模型(S-PCNN),S-PCNN模型每次迭代后,经过判断每个像素对应的神经元是否点火,可以输出一幅二值脉冲图像,这些二值图像包含了图像的一些特征信息。在S-PCNN网络的N次迭代运算中,对每个图像I的像素I(i,j)对应的神经元N(i,j)发出脉冲进行统计后可得到一幅振荡频图(OFG),将OFG记为ION,则可用式(16)计算得到:
在这里插入图片描述
根据分析统计每个像素点的点火次数,再通过计算其局部熵(LE)来选取源图像的包含更多信息的更清晰区域,作为融合部分进行最终的图像融合。经S-PCNN模型迭代后的图可以展现图像的主要细节信息。

源图像经拉普拉斯金字塔分解,得到许多在不同空间频带上的子图像,由于在各个频带上的图像包含的特征和细节不同,所以对不同频带上的子图像进行融合时采用的融合策略也不相同。对金字塔的低层0~N,区域能量能衡量图像的质量,采用区域能量的方式选取系数。其计算公式如下:
在这里插入图片描述
图像融合后的结果如下式所示:
在这里插入图片描述
其中0≤l<N。
分别用上式计算获得金字塔的各层图像,融合后的图像LF1,LF2,LF3,…,LFN,通过式(14)可以重构出最终的融合图像。由于拉普拉斯金字塔高层图像含有源图像的细节信息及纹理和边缘信息,S-PCNN在提取图像纹理细节、区域分布等方面表现出色,所以对于高层的拉普拉斯金字塔图像则采用的S-PCNN模型来选取系数。
本文提出的彩色图像融合算法流程如图2所示。
在这里插入图片描述
图2 融合算法流程
结合算法流程,下面说明算法具体步骤:
1)将源彩色图像从RGB空间转换到HSI彩色空间,得到H、S、I三个分量。
2)将分离出的H分量送入S-PCNN模型,经过迭代后得到振荡频图(OFG);再对其进行局部熵(LE)的计算,得到OFG局部熵矩阵作为H分量的特征矩阵;最后根据不同源图像的H分量的对应像素的局部熵大小,取其LE较大的像素作为最终融合所取的像素。
3)将S、I分量进行拉普拉斯金字塔分解,对其用本文彩色图像融合部分表述的方式进行融合。
4)融合后的H、I、S分量得到HSI彩色图像,逆转换为RGB得到最终图像。

二、部分源代码

clear all;
clc;leftImage = double(imread('apple.png'));
rightImage = double(imread('orange.png'));iternum = 5;if (size(leftImage) ~= size(rightImage))error('Input images are not the same size!')
end% 预处理,使图片height,width为偶数
[rows, cols, channels] = size(leftImage);% mask gaussian
mask = double(zeros(rows, cols, channels));
mask(:, 1:floor(cols/2), :) = ones(rows, floor(cols/2), channels);
mask_pyramid = GaussianPyramid(mask, iternum);% leftImage pyramid and rightImage pyramid
left_pyramid = LaplacianPyramid(leftImage, iternum);
right_pyramid = LaplacianPyramid(rightImage, iternum);% TODO: get blend laplacian pyramid
blend_pyramid = cell(iternum, 1);
for i = 1:iternumblend_pyramid{i} = left_pyramid{i} .* mask_pyramid{i} + right_pyramid{i} .* (1 - mask_pyramid{i});
end% reconstruct the blend image
blendImage = LaplacianReconstruct(blend_pyramid);
imwrite(uint8(blendImage), 'blendImage.png');figure;
imshow(uint8(leftImage));
title('leftImage');
figure;
imshow(uint8(rightImage));
title('rightImage');
figure;
imshow('blendImage.png');
title('blendImage');
function up_image=UpSampling(image)[rows, cols, channels] = size(image);up_image = double(zeros(rows*2, cols*2, channels));up_image(1:2:rows*2, 1:2:cols*2, :) = image;
%     up_image(2:2:rows*2, 2:2:cols*2, :) = image;
%     up_image(1:2:rows*2, 2:2:cols*2, :) = image;
%     up_image(2:2:rows*2, 1:2:cols*2, :) = image;

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]贺康建,金鑫,聂仁灿,周冬明,王佺,余介夫.基于简化脉冲耦合神经网络与拉普拉斯金字塔分解的彩色图像融合[J].

这篇关于【图像融合】基于matlab GUI高斯金字塔+拉普拉斯金字塔彩色图像融合【含Matlab源码 1506期】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/893192

相关文章

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听