• Thin Plate Spline (薄板样条函数)(TPS)


    一直不太明白TPS是什么东西,今天特地上网查了一下,总结如下:

    1. TPS是一种插值方法,它寻找一个通过所有的控制点的弯曲最小的光滑曲面;就像一个薄铁板,通过所给定的几个“样条”(比如木条),铁板表面是光滑的。弯曲最小由一个能量函数定义,就是wiki上的那个双重积分。

    2. 对于3个不共线的控制点,TPS是一个平面,多于三个是一个曲面,少于三个则是未定义的。

    3. TPS常用来对形状进行 non-rigid 变形,比如给定原始形状的有限点集A,变形后的对应目标点集B,设C=B-A,对(Ax,Ay, Cx)拟合出一个TPS,就可以得到x方向的内插函数;对(Ax,Ay, Cy)拟合出来的TPS则可以得到y方向的内插函数。这样一以来对于不在点集中的点,我们就可以插值得到目标点。从而完成整个面的变形。

    4. 某些情况下数据(控制点坐标)可能存在噪声,这时可能会放松要求,TPS得到的曲面不一定要通过所有的控制点(类比B样条),这就是正则化(regularization ),并由一个正则化参数λ控制。如果λ=0就是普通的TPS,如果λ为无穷大,TPS就退化为均方误差最小平面(平面的弯曲量为0),对于变形操作来说就是一般的仿射变换。

    5. TPS是一种径向基函数,径向基函数主要是用来解决插值问题的,这种函数只与到某个点的距离有关,所以叫径向,又因为它们是函数空间中用来逼近函数的基(类似于多项式函数或三角函数),所以叫径向基。

    6. 仿射变换保持点的共线性和直线的平行性,可由平移、旋转、缩放、翻转(Flip)和错切(Shear)变换等原子操作叠加实现。平移、旋转、翻转(Flip)不会改变物体形状,属于刚性(rigid)变换。注意错切变换不是Photoshop中的斜切(只拖动一个控制点),后者不保持直线的平行性。仿射变换是线性的,透视变换不是线性的。

    7. 正定阵是可逆的。

    8. TPS是非参,有解析解(Closed-form solution)的。

    TPS的C++程序示例:http://elonen.iki.fi/code/tpsdemo/
    Wiki上的TPS:http://en.wikipedia.org/wiki/Thin_plate_spline
    RBF介绍:http://www.farfieldtechnology.com/products/toolbox/theory/rbffaq.html
    径向基函数:http://166.111.121.20:9218/fedora/get/mathjourpaper:SXJZ803001/fedora-system:3/getItem?itemID=DS1

  • 相关阅读:
    [Windows Powershell]-学习笔记(1)
    MyBatis For .NET学习-问题总结
    Zynq学习笔记(1)
    规范的位操作方法
    浮点数转换成字符串函数
    测试卡尔曼滤波器(Kalman Filter)
    关于按键扫描程序的终极讨论
    关于STM8的用户数据空间读写问题
    IPv4分析
    关于STM8空间不足的解决方法
  • 原文地址:https://www.cnblogs.com/mysunnyday/p/2155375.html
Copyright © 2020-2023  润新知