问题背景

两张图像做特征匹配时,经常会混进错误匹配。光照变化、视角变化、重复纹理和模糊都会影响描述子距离。单应性矩阵可以描述同一平面在两幅图像之间的投影变换,但它至少需要 4 对质量比较好的匹配点。直接把所有匹配点拿去估计,很容易被外点带偏。

实现流程

  • 使用 ORB 提取最多 1000 个关键点和描述子。
  • BFMatcher 和 Hamming 距离进行交叉匹配。
  • 按匹配距离排序,得到初始匹配点对。
  • 调用 cv2.findHomography,使用 RANSAC 估计单应性矩阵 H。
  • 根据 RANSAC 返回的 mask 保留内点匹配,并用 cv2.drawMatches 可视化。
RANSAC 实验第一张输入图 RANSAC 实验第二张输入图
实验中用于特征匹配和单应性估计的两张输入图。

RANSAC 的直觉

RANSAC 的做法比较直接:反复随机抽取少量点来估计模型,再看有多少点支持这个模型。支持点多,说明这组参数更可能符合大多数匹配。对特征匹配来说,它是在描述子距离之外,又加了一层几何检查。

RANSAC 筛选后的特征匹配结果
RANSAC 筛选后的特征匹配结果,连线比直接匹配更集中。

我的思考

这次实验让我感觉到,匹配结果好不好不能只看连线数量。连线很多也可能很乱,真正有用的是能被同一个几何关系解释的那部分点。ORB 给候选匹配,RANSAC 再筛出更一致的内点,这样结果才更稳。

RANSAC 阈值也需要调。阈值太小会把真实内点删掉,阈值太大又会放进外点。后面再做类似实验时,我会多看内点比例和匹配分布,不只盯着最终的单应性矩阵。