图像拼接基础:数学原理与流程概览

图像拼接,说白了就是把多张照片拼成一张大图。听起来简单,但背后有一套严谨的数学逻辑。我刚开始接触这个领域时,也以为就是简单叠图,结果拼出来的图歪七扭八,根本没法看。

后来才明白,核心就两个问题:怎么对齐,怎么融合。这一章我们先啃第一个问题——对齐的数学原理。

单应性矩阵:两张图之间的“映射密码”

假设你拍了两张照片,场景有重叠区域。这两张图之间是什么关系?

如果相机只是绕着光心旋转,或者拍摄的是一个平面场景(比如墙面、地面),那么两张图之间的变换可以用一个 3×3 的矩阵来描述——这就是单应性矩阵(Homography)。

核心公式:

p' = H · p

其中 p 是第一张图上的点 (x, y, 1),p' 是第二张图上的对应点 (x', y', 1),H 就是单应性矩阵。

H 矩阵有 8 个自由度(去掉一个尺度因子)。这意味着,理论上只需要 4 对匹配点就能解出 H。但实际项目中,我从来不用 4 对点——噪声太大。一般我会用 RANSAC 算法,找几十对点,然后筛选出内点再求解。

我的经验:匹配点对数量建议在 20-50 对之间。太少容易过拟合,太多计算量上去了但精度提升有限。我曾经在一个项目中只用了 8 对点,结果拼接处总有错位,后来加到 30 对,问题就解决了。

透视变换:图像怎么“变形”

有了 H 矩阵,下一步就是把一张图映射到另一张图的坐标系里。这个过程叫透视变换(Perspective Transformation)。

透视变换和仿射变换不一样。仿射变换只能做平移、旋转、缩放、剪切,保持平行线还是平行线。但透视变换可以改变“透视感”——你想想看,拍一个矩形墙面,从侧面拍会变成梯形,这就是透视效果。

变换类型 自由度 保持特性 典型应用
仿射变换 6 平行线、比例 图像配准、简单校正
透视变换 8 直线(不保持平行) 图像拼接、视角校正

透视变换的公式展开是这样的:

x' = (h11*x + h12*y + h13) / (h31*x + h32*y + h33)
y' = (h21*x + h22*y + h23) / (h31*x + h32*y + h33)

注意分母不是 1,而是 h31*x + h32*y + h33。这就是透视变换和仿射变换最本质的区别——分母随坐标变化,所以能产生“近大远小”的效果。

避坑指南:我曾经在拼接无人机航拍图时,直接用仿射变换代替透视变换,结果拼接出来的图边缘严重扭曲。后来才发现,无人机虽然飞得高,但地面不是平面,透视效应仍然存在。记住:只要相机有旋转或场景有深度变化,就必须用透视变换。

拼接流程概览:从输入到输出

好了,数学原理讲完了。那整个拼接流程长什么样?我画了一张图,你看一眼就明白了。

图像拼接核心流程 输入图像序列 特征提取(SIFT/ORB) 特征匹配 + RANSAC 单应性矩阵估计 透视变换 + 图像融合 全景图输出 关键点 • 特征提取质量决定拼接上限 • RANSAC 能剔除误匹配 • 单应性矩阵至少 4 对点 • 融合策略影响拼接效果 • 多图拼接需全局优化

整个流程其实就五步:

  1. 输入图像——保证有足够重叠区域(我一般要求至少 30% 重叠)
  2. 特征提取——SIFT 精度高但慢,ORB 快但鲁棒性差,看场景选
  3. 特征匹配 + RANSAC——这一步是去噪的关键,RANSAC 迭代次数设 1000 次以上
  4. 单应性矩阵估计——用内点做最小二乘,别直接用原始匹配点
  5. 透视变换 + 融合——变换后做加权融合或多频段融合,消除接缝

我的习惯:在特征匹配阶段,我会先用暴力匹配(Brute-Force)找出所有候选匹配,然后用 RANSAC 筛选。虽然慢一点,但匹配质量有保障。如果追求实时性,可以改用 FLANN 匹配器。

为什么单应性矩阵不能解决所有问题?

嗯,这里要泼一盆冷水。单应性矩阵假设场景是平面,或者相机只有旋转运动。如果你的相机有平移,场景又有深度变化,那单应性矩阵就不够用了——会出现视差(Parallax)问题。

我记得有一次做室内全景拼接,相机平移了 50 厘米,结果拼接处出现了重影。后来改用全局对齐 + 局部光流校正才解决。

所以,单应性矩阵是基础,但不是万能药。遇到复杂场景,需要更高级的模型(比如 Bundle Adjustment 或网格变形)。这些我们后面章节会细讲。

一句话总结:单应性矩阵解决“怎么对齐”的问题,透视变换解决“怎么变形”的问题,两者配合,才能把两张图拼到一起。