双目摄像头定位的核心是“视差三角测量”——用两台平行固定的小孔相机,从不同视角看同一目标,根据目标在左右图像上的像素位移(视差 d)反推三维坐标。流程可以拆成五步:
-
相机标定
用棋盘格同时拍摄多张图片,计算左右相机的内参(焦距 fx、fy,主点 cx、cy)和外参(基线 Tx、姿态 R|t),并估计径向/切向畸变系数
-
。
-
立体校正(Rectify)
通过 cv::stereoRectify 把左右图像旋转到完全行对准,使得后续匹配只需在同一行上找对应点 -
。
-
立体匹配
在极线约束下,对每个左图像素在右图同行中寻找最佳匹配。常用算法:SGBM(半全局匹配)或 BM(Block Matching),输出视差图 d -
。
-
深度计算
视差 d 与深度 Z 成反比:
Z = (fx · Tx) / d
其中 fx 为像素焦距,Tx 为左右相机中心距离(基线) -
。
-
三维坐标恢复
对任意像素 (u, v) 有
X = (u − cx) · Z / fx
Y = (v − cy) · Z / fy
Z 由上式得出,最终得到目标在世界坐标系下的 (X, Y, Z)
-
。
整体工作流程可概括为:
标定 → 校正 → 匹配 → 视差 → 深度 → 三维坐标。
关键注意点
• 标定精度直接决定最终定位误差;
• 视差图需亚像素级精度才能达到厘米级测距;
• 暗光、弱纹理、重复纹理场景会降低匹配准确率,可用主动光或结构光辅助