【图像融合】基于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

相关文章

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

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

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

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

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

韦季李输入法_输入法和鼠标的深度融合

在数字化输入的新纪元,传统键盘输入方式正悄然进化。以往,面对实体键盘,我们常需目光游离于屏幕与键盘之间,以确认指尖下的精准位置。而屏幕键盘虽直观可见,却常因占据屏幕空间,迫使我们在操作与视野间做出妥协,频繁调整布局以兼顾输入与界面浏览。 幸而,韦季李输入法的横空出世,彻底颠覆了这一现状。它不仅对输入界面进行了革命性的重构,更巧妙地将鼠标这一传统外设融入其中,开创了一种前所未有的交互体验。 想象

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显