Poisson Blending(Seamless clone)研究和实现

简介: Poisson Blending 实现了非常棒的效果,可以看 《自己动手,实现“你的名字”滤镜》 http://www.cnblogs.com/jsxyhelu/p/7216795.html它的原理在论文《Poisson Image Editing》中进行了比较详细的阐述,但是英文的大论文看起来的却比较麻烦,在 https://wenku.
Poisson Blending 实现了非常棒的效果,可以看 《自己动手,实现“你的名字”滤镜》 http://www.cnblogs.com/jsxyhelu/p/7216795.html
它的原理在论文《Poisson Image Editing》中进行了比较详细的阐述,但是英文的大论文看起来的却比较麻烦,在 https://wenku.baidu.com/view/55ac10a7be1e650e53ea9990.html 找到一篇《方轶智_基于泊松方程的图像处理 》,这篇成果中,基本把原论文中关于Poisson Blending(泊松融合)的部分翻译了出来,并且它的综述部分写的相当不错;在http://blog.csdn.net/ZJU_fish1996/article/details/72760571?locationNum=7&fps=1中,作者实现了全文的初略翻译,有一定参考价值。此外,http://eric-yuan.me/poisson-blending/http://eric-yuan.me/poisson-blending-2/中给出了作者自己的分析和独立的实现。
我在自己将这些资料进行归拢,梳理,并提出自己的思考。首先对几位作者的辛勤工作表示感谢,资料的版权属于它们。
一、Poisson Blending(泊松融合)为什么能够产生如此好的效果
           它的基本原理基于人的生物学特性。我们人眼天生就对“突变”更为敏感:比如白纸上的黑线;但是如果这个变化是连续平滑的,那么对人的刺激就要低得多。经过心理学家和计算机科学家的研究,认为二阶偏导数对于解决这个方面的融合问题有帮助,所以才有了我们这里的具体实现。
           图像编辑包括全局变化和局部变化,我们关心的是我们所选中的局部区域中如何几乎无缝且无影响地嵌入到目标图像中。传统的工具来完成局部的剪切,是通过克隆工具直接取代那部分区域的内容,因此选择的片区域的改变会导致明显的边缝。所以为了达到我们想要的理想效果,就迫切地需要一种可以消除边缝的且不改变图像其他特征的方法
            这种无缝编辑和克隆方法的核心是数学工具―泊松方程,需满足在所选区域未知函数的拉普拉斯条件,和它的Dirichlct边界条件:未知函数的边界值与目标图像中所选区域的边界值相同。在这两个条件下方程的解是唯一的。首先,心理学家Land和Mccan。在1971年提出通过拉普拉斯算子的限制可以减缓渐变的梯度,当把一幅图像混淆到另一幅图像上几乎注意不到有什么影响。并且,泊松方程可以完成无缝地填满目标图像中的选中区域。
          注意,这里的脉络是
          1、“提出需要解决的问题” --> 解决无缝融合;
          2、“解决问题的方法”-->使用Poisson Blending
          3、为什么-->理解并证明Poisson Blending的特性
二、什么是泊松方程,以及它在图像处理这里的运用
         粘点百科:
        泊松方程为[2] 
在这里
代表的是拉普拉斯算子,而f和
可以是在流形上的实数或复数值的方程。当流形属于欧几里得空间,而拉普拉斯算子通常表示为
,因此泊松方程通常写成
三维直角坐标系,可以写成
如果有
恒等于0,这个方程就会变成一个齐次方程,这个方程称作“拉普拉斯方程”。
 
注意,我们图像处理,一般来说,都是属于欧几里得空间(而不是黎曼几何空间),也是在三维之间坐标系(而不是极坐标系)中的。

在这不多的几行字里面,一再提到了“拉普拉斯方程”。实际上,拉普拉斯方程是泊松方程的齐次表达方式。幸好的是,对于拉普拉斯方程我们要熟悉的多,甚至基本知道它的实现方式。
三、主要算法流程
这里的三幅图片分别对应于”前景“”背景“和结果。在原论文中,直接将前景叫做“引导向量域”(我这样理解,使用前景来引导背景的向量)
符号的含义:设图像定义域S为R^2上封闭子集合,是S的一个封闭子集,它的边界为。令f*为定义在S上一个已知的标量函数,代表S减去的范围,令f为定义在上一个未知的标量函数。最终,令v为定义在上的向量域。

定义在上f*的最简单的插值函数f:最小化问题的插值(在边界是未知等于已知,在内部是梯度变化最小。梯度在二阶偏导为0的时候取极值)

        (1)

        其中

        是梯度运算。最小值必须满足相关的拉格朗日方程。

        (2)

         其中是拉普拉斯算子。

         一个引导域是最小化问题(1)的扩展版本中使用的向量域v:(注意 v 是引导向量,也就是前景)

        (3)

        它的解是Dirichlet边界条件下泊松方程的唯一解:

        (4)

         其中v= (u,v)的散度。

 

         一个有用的替代方案是理解泊松插值所做的是定义上修正的函数,以保证

       泊松方程(4)随之成为了以下有边界条件的拉普拉斯方程:

       (5)

       因此,在内,我们添加的修正是就是边界上源和目标错误匹配(f*-g)的一个插值(membrance interpolant)。这一引导插值的特例被用于无缝克隆。

 
四、简单的例子证明

1-D EXAMPLE 一维的例子,这个可以自己上手计算跟着看,效果非常好

7

左边是原图,相当于前景,红色直方图就是引导向量。右边是背景图。想把左边红色部分移过去,但是又要变化最小,怎么办?那么就是计算

8    With   f1 = 6, f6 = 1.

因为这些都是正数,也就相当于计算:

9  

分开求偏导数

10

变化为矩阵

11

结论是:

f2 = 6, f3 = 4, f4 = 5, f5 = 3

12

2-D EXAMPLE

1bignum

 

可以直接使用简化的方式,也就是拉普拉斯算子,进行卷积运算。

13

六、小结
现在看起来,Poisson Blending的却是很神奇的。固然它的理论还是比较复杂的,但是也只是在偏导数相关,并且最终可以简化为拉普拉斯。而我们更幸运,OpenCV中已经对其进行了不错的封装,我们可以直接调用!然而,对于原理的理解和思考,对于我们储备基础知识,解决更为复杂问题一定有帮助。
镇楼:
 
 
目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
6月前
|
机器学习/深度学习 缓存 测试技术
Nice Trick | 不想标注数据了!有伪标签何必呢,Mixup+Mosaic让DINO方法再继续涨点
Nice Trick | 不想标注数据了!有伪标签何必呢,Mixup+Mosaic让DINO方法再继续涨点
211 0
|
机器学习/深度学习 数据采集 数据可视化
自组织映射(Self-Organizing Map, SOM
自组织映射(Self-Organizing Map, SOM)是一种聚类方法,它属于非线性降维技术。SOM 的主要思想是将原始数据映射到一个较低维的子空间,同时保持数据之间的原始结构和关系。SOM 的特点是可视化程度较高,可以直观地展示数据中的簇结构和关联关系。
264 1
|
机器学习/深度学习 数据可视化 TensorFlow
NeRF系列(2):NeRF in the wild : Neural Radiance Fields for Unconstrained Photo Collections论文解读与公式推导
NeRF系列(2):NeRF in the wild : Neural Radiance Fields for Unconstrained Photo Collections论文解读与公式推导
387 0
|
机器学习/深度学习 存储 编解码
NeRF系列(1):NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 论文解读与公式推导(一)
NeRF系列(1):NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 论文解读与公式推导
291 0
|
机器学习/深度学习 编解码 数据可视化
NeRF系列(1):NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 论文解读与公式推导(二)
NeRF系列(1):NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 论文解读与公式推导(二)
234 0
|
计算机视觉
目标检测Trick | SEA方法轻松抹平One-Stage与Two-Stage目标检测之间的差距(二)
目标检测Trick | SEA方法轻松抹平One-Stage与Two-Stage目标检测之间的差距(二)
101 0
|
机器学习/深度学习 编解码 算法
目标检测Trick | SEA方法轻松抹平One-Stage与Two-Stage目标检测之间的差距(一)
目标检测Trick | SEA方法轻松抹平One-Stage与Two-Stage目标检测之间的差距(一)
79 0
|
机器学习/深度学习 编解码 算法
目标检测Trick | SEA方法轻松抹平One-Stage与Two-Stage目标检测之间的差距
目标检测Trick | SEA方法轻松抹平One-Stage与Two-Stage目标检测之间的差距
134 0
目标检测Trick | SEA方法轻松抹平One-Stage与Two-Stage目标检测之间的差距
《Visualizing the Latent Space of Vector Drawings from the Google QuickDraw Dataset with SketchRNN,PCA and t-SNE》电子版地址
Visualizing the Latent Space of Vector Drawings from the Google QuickDraw Dataset with SketchRNN,PCA and t-SNE
77 0
《Visualizing the Latent Space of Vector Drawings from the Google QuickDraw Dataset with SketchRNN,PCA and t-SNE》电子版地址
|
算法 固态存储 计算机视觉
目标检测的Tricks | 【Trick3】IoU loss与focal loss(包含一些变体介绍)
目标检测的Tricks | 【Trick3】IoU loss与focal loss(包含一些变体介绍)
480 0
目标检测的Tricks | 【Trick3】IoU loss与focal loss(包含一些变体介绍)