TPS薄板样条变换

$$ \begin{equation*} \rho \frac{\mathrm{D} \mathbf{v}}{\mathrm{D} t}=\nabla \cdot \mathbb{P}+\rho \mathbf{f} \end{equation*} $$

什么是图像扭曲问题?

给定控制点$(x_i, y_i)$和相应位移点$(\Delta{x_i}, \Delta{y_i})$稀疏对应集,我们需要找到一个映射$f: (x,y) \to (x’, y’)$,且两点之间的$(x_i + \Delta{x_i}, y_i + \Delta{y_i})$尽可能平滑。

https://img-blog.csdnimg.cn/img_convert/e7669dfaa823282e79ac62d1fb0d88d3.png

径向基函数插值

起初,我们只有一组稀疏的控制点对应信息。最简单的方法来推断其他点是一个线性插值,插值点将沿着连接最近的控制点的分段移动,如下所示。

https://img-blog.csdnimg.cn/img_convert/8330b0b575bd32e628a04983cdbd370f.png

然而,我们想要的是一个通过紧密控制点得到的平滑的插值函数,这就是径向基函数作用。

以每个控制点为中心放一个核函数$R$,那么中间的点由$f(z)=\sumα_iR(z, x_i)$得到。其中 $α_i$ 是$x_i$点周围径向基核函数$r(x,x_i) $的权重。待变化的点$x$离控制点$x_i$越远,受内核影响的程度就越小。一些核由于其中心周围邻近点的密度和大小较大,对整体光滑轮廓的影响比其他核大。

https://img-blog.csdnimg.cn/f3f66349907843708b6dc5a4f22ce508.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYzBsZEhFYXJ0,size_20,color_FFFFFF,t_70,g_se,x_16

假设有三个控制点,权重 $α_0$ ,$α_1$ , $α_2$将是下列线性系统的解

$$ % $$

即$\vec{\alpha} = R^{-1}\times \vec{x}$

径向基函数可以是高斯核$e^{\frac{-r^2}{2\sigma}}$或$r^2 log(r)$,这是一维情况下的TPS薄板样条函数。

Thin Plate Spline

现在,介绍二维warp下的Thin Plate Spline warping。

给定红色叉点和预期移动到的蓝色圆点,我们想解得两个光滑函数,采样后使得其他离散点可沿$x$和$y$方向位移(图中箭头)。

https://khanhha.github.io/assets/images/tps/2019-d278d8c0.png

https://img-blog.csdnimg.cn/85aa44a2783c4346bca2a9fdd362d804.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYzBsZEhFYXJ0,size_20,color_FFFFFF,t_70,g_se,x_16

两个光滑函数如下所示

$$ f_{x'}(x,y) = a_1 + a_xx +a_yy + \sum_{i=1}^N{w_i U(||(x_i, y_i) - (x,y)||)} \
f_{y'}(x,y) = a_1 + a_xx +a_yy + \sum_{i=1}^N{w_i U(||(x_i, y_i) - (x,y)||)} $$

其中前三个系数$(a_1, a_x, a_y)$表示能通过所有控制点$(x_i, y_i)$最逼近$x'$(或$y'$)的线性平面,$w_i$表示每个控制点的控制权重,$U(||((x_i, y_i) - (x,y))||)$表示核函数,例如薄板样条核$U(r) = r^2log(r)$,接受的参数为待移动点与控制点的距离$||((x_i, y_i) - (x,y))||$,下图为薄板样条核可视化,待变换点离内核中心(控制点)越近,它的高度或返回值就越高。

https://khanhha.github.io/assets/images/tps/2019-8076195d.png

https://khanhha.github.io/assets/images/tps/2019-18b0ca24.png

How to solve

每个薄板样条函数的系数$(a,a_x,a_y,w_i)$由以下线性系统解出

$$ % $$

其中$K_{ij} = U(distance((x_i,y_i), (x_j, y_j))$,$P$由$(1,x_i,y_i)$组成

$v$是所有控制点组成的向量。第一行$[K \ \ P]\times[v, o]^T$表示由所有$(x_i,y_i)$替代得到的函数$f_{x'}$或$f_{y'}$

$$ f_{x'}(x,y) = a_1 + a_xx +a_yy + \sum_{i=1}^N{w_i U(||(x_i, y_i) - (x,y)||)} $$

$$ f_{y'}(x,y) = a_1 + a_xx +a_yy + \sum_{i=1}^N{w_i U(||(x_i, y_i) - (x,y)||)} $$

第二行$[P^T\ \ O]$表示系统的额外约束,解释见原paper

$$ \sum_{i=1}^N{w_i} = 0 \ \ \ \ \ \ (1) $$

$$ \sum_{i=1}^N{w_ix_i} = \sum_{i=1}^N{w_iy_i} = 0 \ \ \ \ \ \ (2) $$

假设有三个控制点,则线性系统如下

$$ % $$

$$ % $$

总结如下:

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy8wQkJyc0tmRmNWbjBUQXlseXFuQkhNdzdzd0h5ejJQcWFHUDd6MTFZUlh5akV4Skh2dU5yTGd4TnBWa3Z1aWNyMTl2OHZRaWJVdkZUeEtQOFc2YmxKZkp3LzY0MA?x-oss-process=image/format,png

由LW=Y解得W矩阵:

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy8wQkJyc0tmRmNWbjBUQXlseXFuQkhNdzdzd0h5ejJQcXU1SzdiamNFNXhiN2RsOVFKNWE4SFIzb05LQW41c3FoRU50M1RxMWxJd29CS0JrZHd4Qk5rZy82NDA?x-oss-process=image/format,png