Image Deformation Using Moving Least Squares 发表于SIGGRAPH 2006, 是图像变形领域的经典论文,核心思想是利用移动最小二乘法进行插值。目前引用次数800+,今天简单对这篇论文的核心思想做简单回顾。
还是先上一张论文的Teaser,如下图所示,第1列是原始图像,蓝色的点就是变形控制点,第2、3、4列是随着控制点移动后,分别采用仿射变换、相似变换、刚性变换的图像的变形效果。可以看到变形效果具有很好的局部性,也就是每个控制点只影响到最近的像素。
1. 问题定义
输入:原始控制点 p p p ,移动后的控制点 p ′ p' p′。
输出:所有像素点 v v v 变形后的位置 v ′ v' v′。
图像变形问题本质上还是像素点的插值问题,也就是针对每一个像素点 v v v 求解一个映射函数 f f f: v ′ = f ( v ) v' = f(v) v′=f(v). 该函数需要满足如下一些性质:
- Interpolation: 控制点 p p p 一定能精确的变形到 q q q: f ( p i ) = q i f(p_i) = q_i f(pi)=qi.
- Smoothness: 映射函数需要是光滑的,也就是说空间上相近的点变形后的位置也要接近: l i m v i → v j f ( v i ) = f ( v j ) lim_{v_i \to v_j} f(v_i) = f(v_j) limvi→vjf(vi)=f(vj).
- Identity: 相同的点一定能映射到形同的位置,跟性质2类似。
任意点
v
v
v的映射函数定义如下所示,其中
M
M
M表示一个线性变换的矩阵,
T
T
T表示一个平移变换矩阵,需要注意的是,对于不同的像素点
M
M
M 和
T
T
T 可能不同,但总体上满足光滑性,也就是位置接近,变换相似。
l
v
(
x
)
=
x
M
+
T
(1)
l_v(x) = xM + T \tag1
lv(x)=xM+T(1)
假设我们已经知道了上述像素点
v
v
v的变换函数,那么我们可以进一步推导控制点的变换
l
v
(
p
i
)
l_v(p_i)
lv(pi). 实际的变形过程中,我们往往是先移动控制点再驱动图像变形,因此变形前后的控制点是给定的。那么我们期望
l
v
(
p
i
)
l_v(p_i)
lv(pi)跟真实的修改后的控制点
q
i
q_i
qi 尽可能接近即可,因此能量函数定义:
E
=
∑
i
w
i
∣
l
v
(
p
i
)
−
q
i
∣
2
(2)
E = \sum_iw_i|l_v(p_i)-q_i|^2\tag2
E=i∑wi∣lv(pi)−qi∣2(2)
其中,
w
i
w_i
wi 表示
v
v
v 对于 控制点
p
i
p_i
pi 的变形影响权重,定义如下,基本上也就是距离越近影响越大,距离越远影响越小。
w
i
=
1
∣
p
i
−
v
∣
2
α
(3)
w_i=\frac{1}{|p_i-v|^{2\alpha}}\tag3
wi=∣pi−v∣2α1(3)
为此我们的任务就是怎么来最小公式(1)所示的能量函数,从而得到每个点如公式(1)所示的变换函数。
2. 能量函数优化
我们将公式(1)带入公式(2)得到:
E
=
∑
i
w
i
∣
p
i
M
+
T
−
q
i
∣
2
(4)
E = \sum_iw_i|p_iM+T-q_i|^2\tag4
E=i∑wi∣piM+T−qi∣2(4)
为此,我们可以分别对
T
T
T 和
M
M
M求导:
∂
E
∂
T
=
2
∑
i
w
i
(
p
i
M
+
T
−
q
i
)
(4)
\frac{\partial E}{\partial T} = 2\sum_iw_i(p_iM+T-q_i) \tag4
∂T∂E=2i∑wi(piM+T−qi)(4)
令导数为0,进一步得到
T
T
T:
T
=
q
∗
−
p
∗
M
(5)
T = q_* - p_*M\tag5
T=q∗−p∗M(5)
其中,
p
∗
=
∑
i
w
i
p
i
∑
i
,
q
∗
=
∑
i
w
i
q
i
∑
i
(6)
p_* = \frac{\sum_iw_ip_i}{\sum_i},q_* = \frac{\sum_iw_iq_i}{\sum_i}\tag6
p∗=∑i∑iwipi,q∗=∑i∑iwiqi(6)
接下来,我们将公式(5)代回公式(4):
E
=
∑
i
w
i
∣
p
i
M
+
q
∗
−
p
∗
M
−
q
i
∣
2
=
∑
i
w
i
∣
(
p
i
−
p
∗
)
M
+
q
i
−
q
∗
∣
2
E = \sum_iw_i|p_iM+q_*-p_*M-q_i|^2 = \sum_iw_i|(p_i-p_*)M+q_i-q_*|^2
E=i∑wi∣piM+q∗−p∗M−qi∣2=i∑wi∣(pi−p∗)M+qi−q∗∣2
令
p
i
^
=
p
i
−
p
∗
,
q
i
^
=
q
i
−
q
∗
\hat{p _i} =p_i-p_*, \hat{q_i}=q_i-q_*
pi^=pi−p∗,qi^=qi−q∗:
E
=
∑
i
w
i
∣
p
i
^
M
+
q
i
^
∣
2
(7)
E = \sum_iw_i|\hat{p _i}M+\hat{q_i}|^2 \tag7
E=i∑wi∣pi^M+qi^∣2(7)
接着对
M
M
M求导,并令导数等于0:
M
=
(
∑
i
p
^
i
T
w
i
p
^
i
)
−
1
∑
j
p
^
j
T
q
^
j
(8)
M=\left(\sum_{i} \hat{p}_{i}^{T} w_{i} \hat{p}_{i}\right)^{-1} \sum_{j} \hat{p}_{j}^{T} \hat{q}_{j}\tag8
M=(i∑p^iTwip^i)−1j∑p^jTq^j(8)
为此,整个变换函数可以进一步表示为:
f
a
(
v
)
=
(
v
−
p
∗
)
(
∑
i
p
^
i
T
w
i
p
^
i
)
−
1
∑
j
p
^
j
T
q
^
j
+
q
∗
(9)
f_{a}(v)=\left(v-p_{*}\right)\left(\sum_{i} \hat{p}_{i}^{T} w_{i} \hat{p}_{i}\right)^{-1} \sum_{j} \hat{p}_{j}^{T} \hat{q}_{j}+q_{*}\tag9
fa(v)=(v−p∗)(i∑p^iTwip^i)−1j∑p^jTq^j+q∗(9)
这便是仿射变换函数的求解过程,文章还推导了
M
M
M是相似变换和刚性变换的表示形式,这里就不再细讲,具体可以参考原文。
3. 加速方法
文章对这一插值方法进行了加速,具体而言,先对图像做三角剖分,对于每个三角形,首先对三个顶点计算变换函数,然后对三角内部的像素做线性插值计算变形函数,从而得到变形后的位置。
一些变形效果:
参考论文:
[1] Schaefer S, McPhail T, Warren J. Image deformation using moving least squares[M]//ACM SIGGRAPH 2006 Papers. 2006: 533-540.
[2] Zhu Y, Gortler S J. 3D deformation using moving least squares[J]. 2007. (将移动最小二乘推广到3D形状变形)