Thin Plate Spline(TPS)薄板样条是图像拼接(Image Stitching)中的一个常用工具,它在warp阶段特别实用。图像拼接大家可能不陌生,比如用手机拍全景照片时,后台就会自动把多张图片拼起来。但要拼得自然,就得处理好图片间的变形和对齐。TPS就是一种非刚性变换方法,能让图片"柔软"地弯曲适应,效果比简单仿射变换要好得多。
这篇文章会从TPS的基本原理入手,讲讲它的数学基础,然后结合图像拼接的实际场景,配上公式、代码和图例。
TPS是什么?为什么用在图像拼接?
先简单说背景。图像拼接的流程大致分特征提取、匹配、对齐(warp)和融合。warp阶段的核心是把一张图片"扭曲"到另一张的坐标系下,让重叠部分完美匹配。
如果用刚性变换(如平移旋转),对齐效果有限,尤其是镜头畸变或物体变形时。TPS是一种基于控制点的插值方法,灵感来自物理上的薄板弯曲模型。它能最小化"弯曲能量",让变形看起来自然流畅。
在拼接中,我们通常从特征匹配得到对应点对(比如SIFT或ORB提取的keypoints),这些点对就是TPS的"源点"和"目标点"。TPS会计算一个连续的变形场,把源图像的所有像素映射到目标位置。优点是局部灵活,全局平滑,不会产生裂缝或过度拉伸。
TPS的数学原理
TPS的核心是求解一个函数f(x,y)f(x, y)f(x,y),它把源点(xi,yi)(x_i, y_i)(xi,yi)映射到目标点(xi′,yi′)(x_i', y_i')(xi′,yi′),同时对其他点进行插值。2D的TPS可以分开处理x和y方向的映射,通常我们定义两个函数:fxf_xfx和fyf_yfy。
基本形式是径向基函数(RBF)的组合:
f(x,y)=a1+axx+ayy+∑i=1nwiU(∥(x,y)−(xi,yi)∥)f(x, y) = a_1 + a_x x + a_y y + \sum_{i=1}^n w_i U(\| (x,y) - (x_i, y_i) \|)f(x,y)=a1+axx+ayy+∑i=1nwiU(∥(x,y)−(xi,yi)∥)
其中:
- a1,ax,aya_1, a_x, a_ya1,ax,ay 是仿射部分的参数,处理全局线性变换。
- wiw_iwi 是权重,控制每个控制点的贡献。
- U(r)=r2logrU(r) = r^2 \log rU(r)=r2logr 是薄板样条的基函数(r=0时U=0)。
为什么用这个基函数?因为它来自薄板弯曲能量的最小化。物理上,薄板在固定点受力弯曲时,总能量EEE是二阶导数的积分:

TPS就是找一个f,使得E最小,同时满足插值条件f(xi,yi)=vif(x_i, y_i) = v_if(xi,yi)=vi(v_i是目标值)。
要计算参数,我们把控制点代入,组成线性方程组:
设源点P = [(x1,y1), ..., (xn,yn)],目标x' = [x1', ..., xn']。
矩阵形式:K_w + L_a = v
其中K是基函数矩阵,K_{ij} = U(||P_i - P_j||),L是仿射矩阵,a=[a1, ax, ay]^T,v是目标向量。
再加正交条件确保唯一解。实际用库如skimage时,这些都封装好了。
如果想加平滑,可以引入正则项λ E(f),λ越大变形越刚性。
在图像拼接中的应用
在拼接里,TPS常用于非线性warp。比如两张照片有透视畸变,特征点匹配后,用TPS拟合变形场,然后用grid_sample或remap函数应用到整张图。
优点:处理复杂变形好,计算高效(O(n^3)但n小)。
缺点:控制点少时可能过度扭曲,多时计算慢。实际中常结合RANSAC滤点。

上图是skimage库的TPS示例,左边是原始棋盘格,右边是变形后。可以看到控制点(数字标记)移动后,网格自然弯曲,这在拼接时能修正镜头畸变。
实际代码示例
用Python的skimage实现TPS warp很简单。假设我们有源点src和目标点dst:
python
import numpy as np
from skimage.transform import ThinPlateSplineTransform, warp
# 示例控制点
src = np.array([[0, 0], [0, 100], [100, 100], [100, 0]]) # 源矩形
dst = np.array([[10, 10], [5, 90], [110, 95], [105, 5]]) # 目标扭曲
tps = ThinPlateSplineTransform()
tps.estimate(src, dst)
# 假设image是源图像 (numpy array)
warped = warp(image, tps, output_shape=image.shape)
这儿estimate计算参数,warp应用变形。实际拼接中,src/dst从特征匹配来。
为了可视化变形场,我们可以变形一个网格:

如上图,(a)是原始点网格,(b)是TPS后。点位移后,整场平滑过渡。
在医疗图像如CT拼接,TPS还能处理3D变形:

图中左列原始切片,右列变形后,用于数据增强或配准。
小结
TPS是图像拼接warp的利器,平衡了灵活性和平滑性。实际项目中,点对质量关键,多用边界点约束避免边界失控。如果变形太猛,试试加λ或更多点。