使用OpenCV标定VGA双目相机后,图像畸变反而加剧的问题排查
双目相机标定问题排查指引
关于剔除竖向摆放棋盘格样本的影响
- 完全没必要因为棋盘格是竖向摆放就剔除有效样本。棋盘格的摆放朝向本身不参与标定参数计算,只要角点检测准确、覆盖视场范围足够,横向、竖向、任意倾斜角度的样本都是有效数据。
- 刻意剔除非常规朝向的样本,反而会压缩标定数据覆盖的角度维度,减少有效样本量,一定程度上降低内参的鲁棒性。只要检测到的角点没有出现排序翻转、错位,任意朝向的棋盘格都可以纳入有效样本池。
- 当前单目标定得到的RMS在0.11-0.13像素区间,属于合格范围,但如果样本集角度维度单一(比如全是同一朝向的棋盘格),很容易出现标定纸面误差低、实际畸变矫正失效的问题。
校正后畸变远高于原图的核心排查方向
按问题出现概率从高到低排序,逐点核对:
- 图像预处理逻辑一致性问题:在单目标定、双目标定环节都对图像做了
cv2.flip(gray, 0)垂直翻转,后续执行remap校正时,传入的原始图像有没有做完全一致的垂直翻转?如果校正时直接读取未翻转的原始图像,和标定阶段使用的图像坐标系上下完全颠倒,计算出的映射关系自然完全错误,最终输出的校正图扭曲程度会远高于原图。 - 校正输入参数错配:执行
initUndistortRectifyMap时用到的R1、P1、R2、P2,必须是调用cv2.stereoRectify接口,基于当前双目标定输出的R、T、K1、D1、K2、D2计算得到的。如果直接复用其他项目的R/P矩阵、或错用单目标定阶段的参数,映射表计算就会完全出错。 - 左右图像配对错误:核对双目标定脚本里的路径替换逻辑
right_im.replace('RIGHT', 'LEFT'),确认每一组配对的左右图像确实是同步采集的对应帧,不存在读反、错位配对的情况。如果双目标定阶段左右相机的图像顺序搞反,计算出的旋转、平移向量完全不符合实际双目空间关系,后续校正必然出现严重扭曲。 - 角点定位精度不足:对比单目标定和双目标定的亚像素角点细化参数,单目标定用的是
(11,11)的搜索窗口,双目标定里设置的是(5,5)的窗口。对640×480分辨率的图像来说,5×5的搜索窗口偏小,容易让视场边缘、低对比度区域的角点定位出现偏移,哪怕整体标定RMS看起来合格,最终得到的畸变系数也会存在偏差,直接导致校正失效。 - 棋盘格参数不匹配:需要确认
cv2.findChessboardCorners传入的尺寸,是棋盘格的内部角点行列数,不是黑白格的总数量。使用的6×5规格棋盘格,内部角点数量比总格数少1,传入的尺寸必须和实际检测到的角点总数完全对应,避免出现角点排序错位的问题。
内容的提问来源于stack exchange,提问作者xtsoukala
相关产品推荐
相关产品推荐

