当前位置:   article > 正文

Thin plate splines 薄板样条插值个人理解

薄板样条插值

Thin plate spline 薄板样条插值是一种插值算法,经常用于图像变形(image warping)等,通过少量的控制点就可以驱动图像进行变化。

TPS

既然是插值方法,就从插值开始说起。
插值,简单来说就是近似,用一个插值函数去近似我们已经知道的数据,近似的结果和真实结果间的差值也表示了插值函数的好坏。常见的插值函数有多项式函数,样条函数等。
给定L个点 {xi,yi}i=1L以及他们对应的函数值vi,i=1,2,,L. TPS插值的目标就是求解一个函数f,使得f(x,y)=v,并且弯曲能量函数最小。我们把插值函数想象成用力去弯折一块薄钢板,使这块钢板穿过给定的L个点,弯曲这块钢板所需的力或者能量可以表示为:
J(ϕ)=j=12(2ϕjx2)2+2(2ϕjxy)2+(2ϕjy2)2dxdy
可以证明TPS的插值函数就是使得弯曲能量最小的函数。

f(x,y)=a0+a1+a2+i=1Lωiϕ(s)

其中ϕ() 是一个样条函数

ϕ(s)={s2logs2si,j00otherwise.

s是矩阵S的元素, si,j=∥PiPj2
TPS插值函数有 L+3个参数,条件 f(x,y)=v只有L个,需要添加约束才能求解,我们再添加三个约束:

k=1Lωk=0

k=1Lxiωk=0

k=1Lyiωk=0

TPS插值函数的参数可以通过求解如下方程组求得:

[SQQTO3×3][ωa]=[v0]

Q=[11×L;X;Y],a,ω,v 都是已知的向量表示。当有噪声存在时(或者说允许有一定的误差),我们可以引入一个正则项 λ 来控制TPS插值的平滑程度,具体做法就是在样条函数的作用矩阵S上做文章,令S=S+λI, I 是一个单位矩阵。

以上是TPS插值得到函数值的具体方法。更多的,我们一般操作的都是二维平面的点。对于这种情况,只需要将x和y坐标分开看待,求解两个TPS插值函数即可。例如我们有N个对应{xi,yi}i=1N{ui,vi}i=1N,则求解方程组如下:

[SQQTO3×3][ωxωyaxay]=[uv00]

我们求得TPS插值函数之后,如何利用TPS插值函数计算新的点插值之后的位置呢?x,y经过TPS插值之后的位置x,y可通过下式计算:

[xy]=[ϕ(B)Q][ωxωyaxay]

其中B(i,j)=∥(xi,yi)(ui,vi)2.

image warping

利用TPS插值做图像变形,只需要制定对应的控制点的坐标,然后根据TPS函数对图像所有像素点进行插值,求得插值之后的位置,进行像素值映射就可以,这种一般也叫作后向插值法,会出现有些点经过插值后不再属于图像范围内,舍弃掉即可。对应的还有种插值方法叫前向插值法,就是对变形后的图像每个像素点求它在原图像中的位置,感兴趣的可以看看。

PS:第一篇博文,鼓励自己,再接再厉!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号