主要概念

同一个三维点被两个相机看到时,它在第一张图里的位置,会限制第二张图里的对应点位置。这个对应点不需要在整张图里乱找,而应该落在一条极线附近。基本矩阵 F 描述的就是这种约束,匹配点 x 和 x' 近似满足 x'^T F x = 0

实验流程

  • 读取两张图像,并转换为灰度图。
  • 使用 ORB 检测关键点并计算二进制描述子。
  • 使用 Hamming 距离进行暴力匹配,并按距离排序。
  • 调用 cv2.findFundamentalMat,用 RANSAC 估计基本矩阵并剔除外点。
  • 使用 cv2.stereoRectifyUncalibrated 做极线校正,再绘制关键点和极线。
极线几何实验第一张输入图 极线几何实验第二张输入图
实验中用于极线几何计算的两张输入图。

结果怎么理解

画极线主要是为了检查基本矩阵估计得是否合理。如果估计结果比较好,同一个空间点在另一张图中的对应位置应该靠近对应极线。极线校正之后,对应点会更接近同一水平线,后续做视差计算会方便很多。

极线几何关键点和极线可视化结果
关键点和极线绘制结果,用来观察匹配点与极线约束是否一致。

我的思考

这次实验最直观的一点是,特征匹配不能只看描述子距离。ORB 会匹配出一些外观看起来相似、但几何关系不对的点。RANSAC 和基本矩阵相当于再检查一遍这些点是否符合整体几何。

极线几何对拍摄条件也挺敏感。两张图视角差异太大、重复纹理太多、匹配点集中在局部区域时,基本矩阵就不太稳。所以我觉得不能只看程序有没有输出 F,还要看内点比例、匹配分布和极线可视化结果。