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

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

TPS

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

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

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

ϕ(s)={s2logs20si,j0otherwise.

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

Lk=1ωk=0

Lk=1xiωk=0

Lk=1yiωk=0

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

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

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

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

[SQTQO3×3][ωxaxωyay]=[u0v0]

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

[xy]=[ϕ(B)Q][ωxaxωyay]

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

image warping

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

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

你可能感兴趣的:(图像处理)