主要概念
同一个三维点被两个相机看到时,它在第一张图里的位置,会限制第二张图里的对应点位置。这个对应点不需要在整张图里乱找,而应该落在一条极线附近。基本矩阵 F 描述的就是这种约束,匹配点 x 和 x' 近似满足 x'^T F x = 0。
实验流程
- 读取两张图像,并转换为灰度图。
- 使用 ORB 检测关键点并计算二进制描述子。
- 使用 Hamming 距离进行暴力匹配,并按距离排序。
- 调用
cv2.findFundamentalMat,用 RANSAC 估计基本矩阵并剔除外点。 - 使用
cv2.stereoRectifyUncalibrated做极线校正,再绘制关键点和极线。
结果怎么理解
画极线主要是为了检查基本矩阵估计得是否合理。如果估计结果比较好,同一个空间点在另一张图中的对应位置应该靠近对应极线。极线校正之后,对应点会更接近同一水平线,后续做视差计算会方便很多。
我的思考
这次实验最直观的一点是,特征匹配不能只看描述子距离。ORB 会匹配出一些外观看起来相似、但几何关系不对的点。RANSAC 和基本矩阵相当于再检查一遍这些点是否符合整体几何。
极线几何对拍摄条件也挺敏感。两张图视角差异太大、重复纹理太多、匹配点集中在局部区域时,基本矩阵就不太稳。所以我觉得不能只看程序有没有输出 F,还要看内点比例、匹配分布和极线可视化结果。