背景
比较火热的短视频绿布特效其实就是用到了图像融合技术,将其中一幅图加入另一幅图中形成合成视频。一般情况下,两幅图像或多幅图像若直接涂像素融合,比较突兀感官体验上不是一体,有一种图像技术可以较为自然的将两种图像融合,它就是泊松图像编辑技术。这是一个微分方程在图像中的一个重要应用,首先提出该应用的是SIGGRAPH 2003,该文章对现在的图像编辑技术有着非常重要的影响。下面我们拆解一下其中的原理,为提高图像处理技术提供支持。本人能力有限,有错误请批评指正。
数学模型
问题描述:原图图像
g
g
g 所占的区域为
Ω
\Omega
Ω,根据原图的梯度和目标图嵌入位置的边界结构,构建过渡区域的图像像素值无缝融合至右侧图像
T
T
T 中,右侧融合部分的图像值未知需要求解,如下图所示。
符号说明:原图图像
g
g
g ,梯度图是
∇
g
\nabla g
∇g,,图像
g
g
g 的区域范围是
Ω
\Omega
Ω,其边界为
∂
Ω
\partial \Omega
∂Ω。合并后
Ω
\Omega
Ω内的像素用
f
f
f表示,
Ω
\Omega
Ω外用
f
∗
f^*
f∗表示。即:
合
成
像
素
值
F
=
{
f
x
∈
Ω
f
∗
x
∉
Ω
合成像素值F=\begin{cases} f & x\in \Omega \\ f^* & x \notin \Omega \end{cases}
合成像素值F={ff∗x∈Ωx∈/Ω
对于一幅图像来说,宏观意义体现在纹理特征上,所以要让两幅图恰当无缝融合,需要将两幅图的融合部位的纹理做成一致。而纹理体现在梯度上,所以需要融合区域与原图区域梯度保持一致性。融合的纹理一致意味着
Ω
\Omega
Ω 内外区域变化差异达到极小,也就是E(f)取极小值。
用公式表示为能量函数:
E
(
f
)
=
m
i
n
∬
Ω
∣
∣
∇
f
−
∇
g
∣
∣
2
d
x
d
y
E(f)= min\iint_\Omega \mid\mid \nabla f-\nabla g \mid\mid^2dxdy
E(f)=min∬Ω∣∣∇f−∇g∣∣2dxdy
边界条件为:
f
∣
∂
Ω
=
f
∗
∣
∂
Ω
f|_{\partial \Omega}=f^*|_{\partial \Omega}
f∣∂Ω=f∗∣∂Ω
上式积分不容易直接求解,需要做一些简化,有2个途径,本质是相同的。
方法1:
直接使用欧拉-拉格朗日变分,对于能量
E
E
E
E
(
u
)
=
∬
Ω
∣
∣
∇
u
−
∇
g
∣
∣
2
d
x
d
y
=
∬
Ω
∣
∣
∇
(
u
−
g
)
∣
∣
2
d
x
d
y
=
∬
Ω
(
u
x
−
g
x
)
2
+
(
u
y
−
g
y
)
2
d
x
d
y
=
∬
Ω
M
d
x
d
y
\begin{aligned} E(u)=& \iint_\Omega \mid\mid \nabla u-\nabla g \mid\mid^2dxdy \\ =&\iint_\Omega \mid\mid \nabla (u-g) \mid\mid^2dxdy \\ = &\iint_\Omega (u_x-g_x)^2+(u_y-g_y)^2dxdy \\ =&\iint_\Omega Mdxdy \end{aligned}
E(u)====∬Ω∣∣∇u−∇g∣∣2dxdy∬Ω∣∣∇(u−g)∣∣2dxdy∬Ω(ux−gx)2+(uy−gy)2dxdy∬ΩMdxdy
这是个泛函变分问题,
u
u
u在泛函空间取值,使得E为极小值,其中
M
=
(
(
u
x
−
g
x
)
2
+
(
u
y
−
g
y
)
2
M=((u_x-g_x)^2+(u_y-g_y)^2
M=((ux−gx)2+(uy−gy)2。由Euler-Lagrange变分公式:
M
u
−
d
d
x
∂
M
∂
u
x
−
d
d
y
∂
M
∂
u
y
=
0
⟹
d
d
x
2
(
u
x
−
g
x
)
+
d
d
y
2
(
u
y
−
g
y
)
=
0
⟹
u
x
x
−
g
x
x
+
u
y
y
−
g
y
y
=
0
⟹
△
u
=
△
g
=
∇
⋅
∇
g
\begin{aligned} &M_u-\frac{d}{dx}{\frac{\partial M}{\partial u_x}}-\frac{d}{dy}{\frac{\partial M}{\partial u_y}}=0 \\ \Longrightarrow &\frac{d}{dx}{2(u_x-g_x)}+\frac{d}{dy}{2(u_y-g_y)}=0 \\ \Longrightarrow &u_{xx}-g_{xx}+u_{yy}-g_{yy}=0 \\ \Longrightarrow &\triangle u=\triangle g=\nabla\cdot\nabla g \end{aligned}
⟹⟹⟹Mu−dxd∂ux∂M−dyd∂uy∂M=0dxd2(ux−gx)+dyd2(uy−gy)=0uxx−gxx+uyy−gyy=0△u=△g=∇⋅∇g
方法2:
由于梯度算子是个线性算子,并将被积函数用内积表示,切向量作为度量,颇有几何意义,所以有:
E
(
f
)
=
m
i
n
∬
Ω
∣
∣
∇
(
f
−
g
)
∣
∣
2
d
x
d
y
=
m
i
n
∬
Ω
⟨
∇
(
f
−
g
)
,
∇
(
f
−
g
)
⟩
d
x
d
y
\begin{aligned} E(f)=&min\iint_\Omega \mid\mid \nabla (f-g) \mid\mid^2dxdy \\ =&min\iint_\Omega \langle\nabla (f-g),\nabla(f-g)\rangle dxdy \end{aligned}
E(f)==min∬Ω∣∣∇(f−g)∣∣2dxdymin∬Ω⟨∇(f−g),∇(f−g)⟩dxdy
对任意实数
ϵ
>
0
\epsilon>0
ϵ>0,取边界
∂
Ω
\partial \Omega
∂Ω上取值为0的函数
h
∈
C
0
∞
(
Ω
)
h\in C^{\infty}_0(\Omega)
h∈C0∞(Ω) 构成函数族
{
f
+
ϵ
∗
h
}
\{f+\epsilon*h\}
{f+ϵ∗h},在
ϵ
→
0
\epsilon\rightarrow0
ϵ→0时,能量
E
E
E取极小值。
d
d
ϵ
∣
ϵ
→
0
E
(
f
+
ϵ
∗
h
)
=
d
d
ϵ
∣
ϵ
→
0
∬
Ω
⟨
∇
(
f
+
ϵ
∗
h
−
g
)
,
∇
(
f
+
ϵ
∗
h
−
g
⟩
)
d
x
d
y
=
d
d
ϵ
∣
ϵ
→
0
∬
Ω
⟨
∇
(
(
f
−
g
)
+
ϵ
∗
h
)
,
∇
(
(
f
−
g
)
+
ϵ
∗
h
)
⟩
d
x
d
y
=
2
∬
Ω
⟨
∇
(
f
−
g
)
,
∇
h
⟩
d
x
d
y
=
0
\begin{aligned} \frac{d}{d\epsilon}\bigg|_{\epsilon\rightarrow0}E(f+\epsilon*h)=& \frac{d}{d\epsilon}\bigg|_{\epsilon\rightarrow0}\iint_\Omega \langle \nabla(f+\epsilon*h-g),\nabla(f+\epsilon*h-g\rangle) dxdy \\ =& \frac{d}{d\epsilon}\bigg|_{\epsilon\rightarrow0}\iint_\Omega \langle \nabla((f-g)+\epsilon*h),\nabla((f-g)+\epsilon*h)\rangle dxdy \\ =&2\iint_\Omega \langle \nabla(f-g), \nabla h\rangle dxdy \\ =&0 \end{aligned}
dϵd∣∣∣∣ϵ→0E(f+ϵ∗h)====dϵd∣∣∣∣ϵ→0∬Ω⟨∇(f+ϵ∗h−g),∇(f+ϵ∗h−g⟩)dxdydϵd∣∣∣∣ϵ→0∬Ω⟨∇((f−g)+ϵ∗h),∇((f−g)+ϵ∗h)⟩dxdy2∬Ω⟨∇(f−g),∇h⟩dxdy0
由微分运算关系:
∇
⋅
(
h
∇
(
f
−
g
)
)
=
⟨
∇
(
f
−
g
)
,
∇
h
⟩
+
h
∇
⋅
∇
(
f
−
g
)
\nabla \cdot (h\nabla (f-g))=\langle \nabla(f-g), \nabla h\rangle+h\nabla\cdot\nabla (f-g)
∇⋅(h∇(f−g))=⟨∇(f−g),∇h⟩+h∇⋅∇(f−g)
将此式带入上式得:
∬
Ω
⟨
∇
(
f
−
g
)
,
∇
h
⟩
d
x
d
y
=
∬
Ω
∇
⋅
(
h
∇
(
f
−
g
)
)
−
h
∇
⋅
∇
(
f
−
g
)
d
x
d
y
\begin{aligned} &\iint_\Omega \langle \nabla(f-g), \nabla h\rangle dxdy \\ =&\iint_\Omega \nabla \cdot (h\nabla (f-g))-h\nabla\cdot\nabla (f-g) dxdy \end{aligned}
=∬Ω⟨∇(f−g),∇h⟩dxdy∬Ω∇⋅(h∇(f−g))−h∇⋅∇(f−g)dxdy
由Stokes定理(求导与边界对偶), 又由于
h
∈
C
0
∞
(
Ω
)
h\in C^{\infty}_0(\Omega)
h∈C0∞(Ω) , 其实梯度与切向量正交,所以被积函数第一项为0:
∬
Ω
∇
⋅
(
h
∇
(
f
−
g
)
)
d
x
d
y
=
∫
∂
Ω
(
h
∇
(
f
−
g
)
)
d
s
=
0
\iint_\Omega \nabla \cdot (h\nabla (f-g))dxdy=\int_{\partial \Omega}(h\nabla(f-g))ds=0
∬Ω∇⋅(h∇(f−g))dxdy=∫∂Ω(h∇(f−g))ds=0
由
h
h
h 在空间
C
0
∞
(
Ω
)
C^{\infty}_0(\Omega)
C0∞(Ω) 的任意性,进一步有,
∬
Ω
h
∇
⋅
∇
(
f
−
g
)
d
x
d
y
=
0
⟹
h
∇
⋅
∇
(
f
−
g
)
=
0
⟹
h
△
(
f
−
g
)
=
0
⟹
△
f
=
△
g
=
∇
⋅
∇
g
\begin{aligned} &\iint_\Omega h\nabla\cdot\nabla (f-g) dxdy=0 \\ \Longrightarrow &h\nabla\cdot\nabla(f-g)=0 \\ \Longrightarrow &h\triangle(f-g)=0 \\ \Longrightarrow &\triangle f=\triangle g=\nabla\cdot\nabla g \end{aligned}
⟹⟹⟹∬Ωh∇⋅∇(f−g)dxdy=0h∇⋅∇(f−g)=0h△(f−g)=0△f=△g=∇⋅∇g
================================================================================
数值求解
待更新