欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

薄板样条插值(Thin Plate Spline)

最编程 2024-01-18 09:03:12
...
薄板样条插值(Thin Plate Spline)
FesianXu 2020/09/08 at UESTC

前言

本文是笔者阅读[1]过程中,遇到了关于Thin Plate Spline[5]相关的知识,因而查找若干资料学习后得到的一些笔记,本文主要参考[2,3,4],希望对大家有所帮助。 如有谬误,请联系指出,转载请联系作者并注明出处

∇ \nabla 联系方式:

e-mail: FesianXu@gmail.com

QQ: 973926198

github: https://github.com/FesianXu

知乎专栏: 计算机视觉/计算机图形理论与应用

微信公众号
qrcode


薄板样条插值

薄板样条插值(Thin Plate Spline,TPS)是插值方法的一种,是常用的2D插值方法。假如给定两张图片中一些相互对应的控制点,如何将其中一个图片进行特定的形变,使得其控制点可以与另一张图片的控制点重合,如Fig 1.1所示。当然,提供插值的方法也特别的多,TPS是其中一种技术,其有着一个基本假设

如果用一个薄钢板(只是一个比喻)的形变来模拟这种2D形变,在确保所有控制点能够尽可能匹配的情况下,怎么样才能使得钢板的弯曲量最小。

几乎所有的生物有关的形变都是可以用TPS来近似,因此TPS也经常被用于脸部关键点形变等相关的应用[1]。

tps

Fig 1.1 该图演示了TPS的基本任务,(a)图的p点表示的是移动之前的点,而q点表示的是移动之后的点,若干控制点产生了这种移动之后,势必整个平面发生了扭曲,其结果如(b)所示,TPS的目的就是拟合得到每个曲面上的点的变化。

为了描述整个插值过程,按照我们刚才所说的,需要定义两个项,一个是拟合项 E Φ \mathcal{E}_{\Phi} EΦ,测量将源点变形后距离目标点的大小;第二个是扭曲项 E d \mathcal{E}_{d} Ed,测量曲面的扭曲大小。那么有总的损失函数:
E = E Φ + λ E d (1.1) \mathcal{E} = \mathcal{E}_{\Phi}+\lambda \mathcal{E}_{d} \tag{1.1} E=EΦ+λEd(1.1)
其中的 λ \lambda λ为权值系数,控制允许非刚体形变发生的程度,不同的 λ \lambda λ对于整个拟合效果的影响如Fig 1.2所示。

diff_lambda

Fig 1.2 不同的权重系数对于拟合效果的影响,越大的权重变形就越接近仿射变换。

其中有:
E Φ = ∑ i = 1 N ∣ ∣ Φ ( p i ) − q i ∣ ∣ 2 (1.2) \mathcal{E}_{\Phi} = \sum_{i=1}^{N}||\Phi(p_i)-q_i||^2 \tag{1.2} EΦ=i=1NΦ(pi)qi2(1.2)

E d = ∫ ∫ R 2 ( ( ∂ 2 Φ ∂ x 2 ) 2 + 2 ( ∂ 2 Φ ∂ x ∂ y ) 2 + ( ∂ 2 Φ ∂ y 2 ) 2 ) 2 d x d y (1.3) \mathcal{E}_d = \int \int_{\mathbb{R}^2} \bigg( \bigg( \dfrac{\partial^2\Phi}{\partial \mathrm{x}^2} \bigg)^2 + 2 \bigg( \dfrac{\partial^2\Phi}{\partial \mathrm{x} \partial \mathrm{y}} \bigg)^2 + \bigg( \dfrac{\partial^2\Phi}{\partial \mathrm{y}^2} \bigg)^2 \bigg)^2 \mathrm{dx}\mathrm{dy} \tag{1.3} Ed=R2((x22Φ)2+2(xy2Φ)2+(y22Φ)2)2dxdy(1.3)

其中的 N N N为控制点的数量,式子(1.2)很容易理解,是源目标经过形变函数 Φ \Phi Φ之后和目标之间的距离;而式子(1.3)是曲面扭曲的能量函数,由文献[6]中给出,最小化式子(1.1)的结果,可以推导出形变函数的唯一闭式解结果为:
Φ ( p ) = M ⋅ p + m 0 + ∑ i = 1 N ω i U ( ∣ ∣ p − p i ∣ ∣ ) (1.4) \Phi(p) = \mathbf{M} \cdot p + m_0+\sum_{i=1}^{N} \omega_i U(||p-p_i||) \tag{1.4} Φ(p)=Mp+m0+i=1NωiU(ppi)(1.4)
其中 p p p为曲面上的任意一个点,有 p = ( x , y ) T p = (x,y)^{\mathrm{T}} p=(x,y)T p i p_i pi是对应域的控制点,而 M = ( m 1 , m 2 ) \mathbf{M} = (m_1,m_2) M=(m1,m2),而这里的 U ( ⋅ ) U(\cdot) U()为径向基函数,表示某个曲面上的点的变形会受到所有控制点变形的影响(当然,不同控制点的影响程度不一样),有
U ( x ) = r 2 log ⁡ r (1.5) U(x) = r^2\log{r} \tag{1.5} U(x)=r2logr(1.5)
ω i \omega_i ωi表示对不同径向基的加权。如Fig 1.3所示,如果我们假设每个控制点都对应一个高度,也就是 ( x i , y i ) → v i (x_i,y_i)\rightarrow v_i (xi,yi)vi,也就是说控制点是三维空间坐标系中的自变量,而其高度是因变量,那么我们可以再继续分析式子(1.4)中的第一项和第二项。

我们发现第一项其实是尝试用一个平面 y = M ⋅ p + m 0 y = \mathbf{M} \cdot p+m_0 y=Mp+m0去拟合所有的目标控制点,当然这个拟合肯定不够好,因此用第二项尝试在该平面的基础上去弯曲(当然是尽可能小的弯曲),从而达到更好的拟合效果,如Fig 1.3所示。此时有未知参数 M ∈ R 2 , m 0 ∈ R \mathbf{M} \in \mathbb{R}^2, m_0 \in \mathbb{R} MR2,m0R,和 ω i , i ∈ [ 1 , N ] \omega_i, i \in [1,N] ωi,i[1,N],因此一共有 1 + 2 + N 1+2+N 1+2+N个参数,其中 D = 2 D = 2 D=2是维度, N N N是控制点数目。

thinplates

Fig 1.3 最小程度地扭曲平面,使得该曲面可以符合所有的控制点,而扭曲程度最小。

我们为了求解形式一般化,用以下矩阵代表之前谈到的数值,有:
P = [ 1 x 1 y 1 1 x 2 y 2 ⋮ ⋮ ⋮ 1 x n y n ] (1.6) \mathbf{P} = \left[ \begin{matrix} 1 & x_1 & y_1 \\ 1 & x_2 & y_2 \\ \vdots & \vdots & \vdots \\ 1 & x_n & y_n \end{matrix} \right] \tag{1.6} P=111