虽然是2003年的文章了,但是由于其扎实的数学基础和至今看来都极其出色的效果,对每一个图像处理领域的学习者仍然是一篇值得一读的好文章。
文章内容为参考论文原文与网络相关内容的个人理解,如有错误,请在评论区指出。
Poisson Image Editing - 2003
泊松图像编辑
有兴趣的朋友可以详细了解一下泊松方程的来历及其数学原理,在这里给几个可供参考的链接。
我看网络上很多相关解读都是直接从泊松融合入手,其实这并不是泊松图像编辑的本质内容,只能算是一个非常惊艳的应用方法。泊松图像编辑的本质是修改图像的梯度,然后通过泊松方程解最优化问题,从新的梯度恢复出修改后的图像。其梯度的修改可以包括很多种:改变梯度来源(泊松融合)、对梯度频带截断(去纹理)、调整不同通道梯度比例(改变颜色)等等,文章将会对这些应用都有基础的介绍。
在这里,以论文提到的内容为准,对论文涉及的相关数学知识简单梳理一下。当然,对本部分实在没有兴趣的朋友可以跳过,只看后面也可以大致理解泊松编辑的原理和方法。
基于泊松方程的内插方法
从上面两个图开始说起,假设左边的 S S S本来是一副好好的图片,那这时候我们在上面扣了一个洞,这个洞的样子大概就是右边这个图片,那这个 Ω \Omega Ω呢就表示这个洞的区域, ∂ Ω \partial\Omega ∂Ω则表示这个洞的边界。造成了这样的结果,是谁的错已经不重要了,总之我们现在想要把这个图像恢复要原来的样子,也就是想把这个洞填上。那现在没有任何可以参照的东西,剩下的只有带了洞的 S S S,唯一能够直接拿来用的也只有这个洞的边界像素值 ∂ Ω \partial\Omega ∂Ω我们还是知道的,想要填补这个洞,我们希望填出来的内容满足下面两个条件:
- 填补内容要尽可以平滑
- 填补内容的边界像素值和现有的 S S S一致,即要无缝过度
那要满足上述两个要求,就得到了以下的数学表达:
m i n f ∬ Ω ∣ ∇ f ∣ 2 with f ∣ ∂ Ω = f ∗ ∣ ∂ Ω (1) \underset{f}{min}\iint_{\Omega}\left|\nabla f\right|^2\ \text{ with }\ f|_{\partial\Omega}=f^*|_{\partial\Omega} \tag1 fmin∬Ω∣∇f∣2 with f∣∂Ω=f∗∣∂Ω(1)
其中 ∇ \nabla ∇是一阶微分,即梯度算子。那这个式子其实就是按照上面两个条件列出来的,意思就是在 Ω \Omega Ω区域梯度尽可能小(平滑),满足边界上像素相等的约束条件(无缝过度)。而上述最优化问题的解满足欧拉-拉格朗日方程:
Δ f = 0 over Ω with f ∣ ∂ Ω = f ∗ ∣ ∂ Ω (2) \Delta f=0\ \text{ over }\ \Omega \ \text{ with }\ f|_{\partial\Omega}=f^*|_{\partial\Omega} \tag2 Δf=0 over Ω with f∣∂Ω=f∗∣∂Ω(2)
其中 Δ \Delta Δ表示二阶微分(直角坐标系下的散度div),即拉普拉斯算子,也就是二阶梯度 ∇ 2 \nabla ^2 ∇2,学过图像处理的朋友应该很熟悉。而这个时候的边界条件就称为狄利克雷边界(Dirichlet boundary)。众所周知,取得一阶微分极值时,二阶微分等于0。所以要在梯度取最小的时候,就要在使得散度为0,因此就有了上式。已知区域 Ω \Omega Ω内的散度都是0,以及边界上已知的像素值,即可求出 Ω \Omega Ω内部所有像素值,根据以上方程填充的图像将会是以下结果。
上图从左到右分别为原图、填充区域、复原图。
看到这里想必有朋友已经怒拍键盘,看了半天你就给我糊一马赛克上去?
平心而论,有一说一,这个结果其实已经充分满足我们给出的条件了:1、填补内容尽可能平滑;2、颜色也在边界像素点的约束下与背景保持一致。
那之所以最后出现这样不堪入目的结果,是因为我们没有告诉它里面要填些啥东西,所以大家先坐下来继续看。这个时候我们就要稍微引导它一下,给它带入正规,这里就要用到引导向量场(guidance vector field), v \mathbf{v} v。
好了,上图多了 v \mathbf{v} v和 g \mathbf{g} g ,其中 v \mathbf{v} v是引导向量场,也就是梯度场,可以理解为从 g \mathbf{g} g中导出的。其实我们并不关心 g \mathbf{g}