【图像融合】基于matlab泊松彩色图像融合【含Matlab源码 1830期】

举报
海神之光 发表于 2022/05/28 23:30:08 2022/05/28
【摘要】 一、泊松彩色图像融合简介 0 引 言 图像拼接是计算机视觉领域的一个重要分支。它是一种将同一场景相互有重叠部分的一系列图片合成为一幅大的宽视角全景图像技术。图像拼接己在计算机视觉、医学图像、模式识别和遥...

一、泊松彩色图像融合简介

0 引 言
图像拼接是计算机视觉领域的一个重要分支。它是一种将同一场景相互有重叠部分的一系列图片合成为一幅大的宽视角全景图像技术。图像拼接己在计算机视觉、医学图像、模式识别和遥感图像等方面得到广泛的应用。其中, 图像融合是最关键的步骤, 图像融合就是确定重叠区域内每一个像素点如何取值, 以实现图像间的平滑过渡和无缝拼接。图像融合可以通过加权平均算法, 多分辨率方法或基于梯度域的融合方法来实现。由于加权平均算法只对重叠区进行加权平均, 因此只在重叠区实现融合过渡, 很难消除合成鬼影, 且对配准误差很敏感。然而多分辨率拼接方法则通过将图像分解成多幅尺度图像再合成, 不仅可实现整图范围内的融合过渡, 并可降低对配准误差的敏感度, 他的不足是由于多次滤波会造成信号减弱, 因此最终合成的图像会变暗和模糊。基于梯度域的融合方法是利用梯度场实现合成, 由于需要计算出重叠区的梯度场, 因此合成的图像不会出现多分辨拼接中存在的变暗和模糊的现象。

Patrick P等人在2003年提出了Poisson图像编辑法, 该方法利用图像梯度场对待融合区域进行引导插值, 将图像融合问题归结为求目标函数的最小化问题, 并利用Poisson方程求解这一变分问题。该方法被很多人运用和研究, 取得了很好的效果。本文运用该方法解决两幅图像间的融合问题, 并在Matlab环境下仿真实现。

1 工作原理
1.1 泊松方程

该方法所用的核心数学工具是带狄里克雷边界条件的泊松偏微分方程, 狄里克雷边界条件指定了在影响域内未知函数的拉普拉斯算子, 以及在区域边界上的未知函数值的拉普拉斯算子。由数学知识可知, 泊松方程的基本表达式如下:
在这里插入图片描述
根据狄里克雷 (Dirichlet) 边界条件, 可给出u+S上的值, 如图1所示。
在这里插入图片描述
图1 相关概念

1.2 离散实现
由式 (1) 的有限微分离散化得到如下离散的二次最优化问题:对所有p∈Ω的点而言, 且fp = f*p。
在这里插入图片描述
当Ω包含S边界上的像素时 (例如当Ω扩展至像素网格的边缘时可能发生这种情况) , 这些像素拥有的上限邻域|Np|<4。注意到对于Ω之内的像素p, 有Np∈Ω, 则式 (3) 可化为:
在这里插入图片描述
方程 (3) 建立了一个经典的、稀松 (带状) 的、对称的、正定的系统。由于边界Ω的任意形状, 必须使用迭代解法。应用较多的是连续超松弛的Gauss-Seidel迭代法, 或是V-循环的多重网格法。

2 系统实现
Matlab是一种广泛应用于工程计算及数值分析领域的新型高级语言, 有着强大的数值计算功能和绘图功能, 且具有丰富的图像处理函数[6]。在Matlab环境下的图像无缝拼合系统能够实现彩色图像的无缝拼合, 且可以改变待处理区域内景物的色彩、光照等因素, 使拼合后的图像更加真实、自然。

本系统主要包含4个步骤:
步骤1:选取待处理区域并将其拷贝到目标图像上, 得到直接拼合后的图像, 此时所得图像存在明显的拼接赝像, 如图2~图4所示。
步骤2:求指导矢量场V的散度值。

令引导矢量场为稳定场, 取它为函数g的梯度。对于离散的数字图像来说, 梯度可以写作:
在这里插入图片描述
式中:i, j分别是数字图像I的行坐标和列坐标 (图像坐标以左上角为整个坐标空间的原点) , 且i, j不可超过图像的高度和宽度。

步骤3:建立泊松方程 (式 (1) ) , 并求泊松方程的解向量。
泊松图像编辑方法中指出彩色图像各个颜色通道是相互独立的, 可以对每一个颜色通道分别求解泊松方程, 然后进行综合即可得到最终结果。在Matlab中彩色图像的颜色模型是RGB颜色模型, 所以对彩色图像的RGB三个颜色通道分别解泊松方程得到最终结果。
步骤4:进行拉普拉斯插值。
所谓拉普拉斯插值是指插值区域内部满足拉普拉斯方程。因此, 仅需要将拉普拉斯方程的解向量赋值给插值区域内部, 泊松方程的解向量赋值给其边界即可[9]。

二、部分源代码

close all;
clear;
clc;
%载入图像
TargetImg = imread('poolRGB.jpg');
SourceImg = imread('bearRGB.jpg');
SourceMask = im2bw(imread('bearMask.jpg'));
%获取裁剪边界
[SrcBoundry,~] = bwboundaries(SourceMask);
%绘制剪切边界
figure,imshow(SourceImg),axis image
hold on
for k = 1:length(SrcBoundry)
    boundary = SrcBoundry{k};
    plot(boundary(:,2),boundary(:,1),'r','LineWidth',2)
end

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

三、运行结果

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

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]张建桥,王长元.基于泊松方程的数字图像无缝拼合[J].现代电子技术. 2010,33(17)

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/123854463

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。