本文最后更新于:2024年5月7日 下午
图像融合在cv领域有着广泛用途,其中2003年的论文 Poisson Image Editing - 2003 因其开创性与效果拔群成为了相关领域的经典之作。而且该算法在传统图像融合算法中效果拔群,对该领域影响深远。
简介
泊松图像编辑是一种全自动的“无缝融合”两张图像的技术,由Microsoft Research UK的Patrick Perez,Michel Gangnet, and Andrew Blake在论文“Poisson Image Editing”中首次提出。
- 泊松编辑主要解决的是两个不同来源信号的无缝融合(seamless cloning)问题
- 目的是将源图像$g$的一部分内容$\Omega$融合到目标图像$f*$同样大小区域上,并使其自然融合过渡
左上:目标图像$f*$,区域$\Omega$是被源图像内容替换的部分;
左下:源图像$g$,区域$\Omega$内的内容需要贴到目标图像去
右上:直接将源图像信息贴过去会有违和的边缘过渡
右下:将源的信号按照原始梯度关系变化到目标图像边界,达到了无缝融合的效果
- 泊松编辑的目标是自然地融合来源不同的图像
- 将源图像粘贴到目标图像上
- 为了保持过渡平滑,顾及了源图像粘贴区域的梯度信息与目标图像的边缘信息
- 结合已知信息求解方程组得到泊松编辑图像的结果
理论介绍
符号定义
如上图所示:
- 图像融合是要把源图像$g$的指定区域$\Omega$融合到目标图像$S$中,边缘区域为$ \partial \Omega $,源图像区域函数$f^*$,目标图像区域函数$f$。
- 这里面$g$,$\Omega$,$S$,$ \partial \Omega $,$f^*$都是已知量,需要求的是$f$
理论
$$ \min _{f} \iint_{\Omega}|\nabla f-\mathbf{v}|^{2} \quad with \left.\quad f\right|_{\partial \Omega}=\left.f^{*}\right|_{\partial \Omega} $$泊松图像编辑的目的是保留源图像的纹理,无缝融入到新图像中。
实现的思路就是将源图像的梯度保留,应用到目标图像的边界中,解出同时满足梯度和边缘约束条件的方程,得到目标区域像素。
- $∇f$ 指的是图像函数 $f$ 的梯度
$$
\nabla .=\left[\frac{\partial_{.}}{\partial x}, \frac{\partial}{\partial y}\right]
$$
- $v$ 在原论文中是指一个引导向量场(guidance field),当用于图像合成时,它指的就是源图像的梯度。
- 这意味着上面的变分方程是指在$Ω$ 的区域内,$f$的梯度和源图像的梯度一致,而在$Ω$ 的边缘处f的值则和源图像$f^*$的值一致。这个变分方程的解是如下泊松方程在Dirichlet边界条件时的解,这也是为什么我们的融合方式叫做泊松融合。
几个关键和符号说明
- 梯度 Gradient:
$$
\mathbf{v}=(u, v)=\nabla g
$$
- 散度 Divergence
核心
- 也就是$f^*$和$f$的散度对应相等
- 同时保证$f^*$和$f$的边界对应相等
$$
\Delta f=\Delta f^* \text{ over } \Omega , \text{ with } \left.f\right|_{\partial \Omega}=f^{*} \mid \partial \Omega
$$
求解方程
- 将泊松方程表示为线性向量形式 $Af=b$
- 等号的右边是图像$g$中每一个像素的拉普拉斯滤波结果$∆gp$,这很容易理解。未知函数$f$的每个元素构成了等号左边的列向量。而系数矩阵$A$则描述了最关键的$f$的拉普拉斯滤波算子。
- 列出方程后就是解方程组了,$A$是稀疏矩阵,每行元素不超过5个,可以用 $f = b / A$计算得到
参考代码
- 参考了一份github上星星最多的泊松图像编辑代码,改成了python3并封装成类方法,供大家参考。
核心类函数为
channel_process
,输入图像为单通道,mask
为0-1的浮点数
1 |
|
效果示例
![]() |
![]() |
![]() |
![]() |
源图像的指定区域融合到目标图像中,纵享丝滑。
参考资料
文章链接:
https://www.zywvvd.com/notes/study/image-processing/poisson-editing/poisson-editing/
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信支付

支付宝支付