ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

双目标定与极线校正

双目标定与极线校正 双目标定与极线校正文章目录双目标定与极线校正1. 为什么深度公式之前必须标定与校正2. 双目标定要估计的量3. 采集与求解流程3.1 采集标定板3.2 角点检测与立体标定3.3 立体校正与映射4. 验收指标纵向残差与基线误差5. 合成棋盘格上的可复现演示6. 常见失效与处理7. 核对清单8. 术语对照9. 适用边界10. 小结摘要上一篇给出了双目深度的公式 (Z f B / d)。公式里的焦距 (f)、基线 (B)以及「左右对应点落在同一行」这一前提都来自双目标定与极线校正。本文说明要估计哪些量、采集与求解流程、如何用纵向残差验收并给出一组合成棋盘格上的可复现演示。说明双目标定同时估计左右相机内参、畸变以及右相机相对左相机的旋转与平移。极线校正也叫立体校正根据标定结果把左右图变换到共面、行对齐使同一物点落在同一水平行。纵向残差指同一物点在左右图上的行号差的绝对值单位是像素校正后应接近 0。承接前文《双目深度估计的含义与基本流程》那里给出了 (Z f B / d) 与匹配流程本篇补上公式参数与行对齐从标定、校正中来的部分。建议实验目录mkdir-p~/stereo-calib-lab/{notes,scripts,logs,images,fixtures}cd~/stereo-calib-lab# 本文脚本stereo_calib_rectify_demo.py / generate_figures.py文件作用scripts/stereo_calib_rectify_demo.py合成多视角棋盘格、立体标定、极线校正与纵向残差验收scripts/generate_figures.py生成文内配图notes/stereo_calib_checklist.md核对清单fixtures/stereo_calib.json标定与校正参数快照fixtures/rectify_preview.png校正后对应点预览logs/stereo_calib_report.json演示报告标记含义STEREO_CALIB_DEMO_OK演示跑通并写出标定文件与报告STEREO_RECTIFY_EVAL_OK校正前纵向偏差足够大校正后残差与基线误差达标STEREO_RECTIFY_EVAL_BLOCKED纵向残差或基线误差未通过1. 为什么深度公式之前必须标定与校正(Z f B / d) 有两个前提(f)、(B) 是这台双目模组自己的标定结果不是示例数视差 (d) 是同一水平行上的列差。未校正时对应点往往上下错开匹配必须在二维邻域里搜视差会系统性偏掉深度整片不可信。图1. 校正前对应点有纵向偏差校正后同一物点共行匹配才能收成一维搜索。上一篇演示里左右图是合成对齐的所以直接谈匹配与公式。真机链路里标定与校正在匹配之前跳过这一步后面的 SGBM 参数再怎么调也救不回错的几何。也可以从现象反推若左右图上同一角点的行号差长期大于 23 像素却仍在做水平一维匹配得到的「视差」里混进了纵向错位深度图往往整片倾斜或条带化。先修标定与校正再谈匹配窗口。2. 双目标定要估计的量一次合格的双目标定至少要把下表写进同一份参数文件。图2. 内参、畸变、相对外参、基线与校正旋转应落在同一份标定文件里。量含义本篇演示约定内参 (K_1, K_2)焦距、主点左右各一份合成相机焦距 500 像素畸变 (D_1, D_2)径向 / 切向畸变演示设为零便于突出几何项相对旋转 (R)、平移 (T)右相机相对左相机真值基线 60 mm并带小倾角基线 (B)通常取 (|T|)单位毫米与棋盘格格长一致校正旋转 (R_1, R_2) 与投影 (P_1, P_2)把两相机拧到共面、行对齐由立体校正求出基线单位必须与标定板格长一致。格长填 25 mm(T) 却按米解释基线会差三个数量级深度跟着整体错。内参也可以先各自单目标定再固定内参做立体外参本篇演示用「已知合成内参 立体标定」路径验收重点放在相对外参、基线与纵向残差。参数文件建议至少包含图像宽高、左右 (K/D)、(R/T)、(R_1/R_2/P_1/P_2)、(Q)若后续要反投影点云、基线毫米值、重投影 RMS、标定时间与板规格。缺字段时匹配程序往往会静默用默认焦距深度偏差要到抓取失败才被发现。3. 采集与求解流程图3. 采集标定板 → 角点检测 → 立体标定 → 立体校正 → 纵向残差验收。3.1 采集标定板常用平面棋盘格或圆点板。左右相机同步拍多组姿态板要铺满视场的不同区域并覆盖俯仰、偏航的变化。姿态太单一时外参与畸变容易耦合重投影误差看起来还行换场景后纵向残差会反弹。本篇演示用 9×6 内角点、格长 25 mm合成 12 个有效视角。真机上建议先保证每侧角点检出稳定再谈数量检出率低的帧应丢弃不要硬塞进求解。采集时左右必须同一时刻。软件触发不同步时运动中的标定板会在左右图上错位外参会被「时间差」污染。静止板 硬件同步比盲目增加帧数更有效。板的打印缩放也要核用卡尺量相邻方格实际边长填进配置按设计值 25 mm、实际印成 24.5 mm基线与深度都会带固定比例误差。3.2 角点检测与立体标定对每一对左右图检测角点得到图像坐标结合已知的三维格点坐标调用立体标定OpenCV 中为stereoCalibrate估计 (K, D, R, T)。重投影误差RMS是第一道数字演示里要求 RMS 1 像素。RMS 只说明「角点被模型解释得好」不能代替后面的行对齐验收。左右图对必须成对进入求解。把左相机第 3 帧和右相机第 5 帧拼成一对RMS 可能仍能降下来但外参已经错了。同步时间戳或硬件触发帧号应写进采集日志标定脚本只读成对样本。3.3 立体校正与映射把 (R, T) 送入立体校正OpenCV 中为stereoRectify得到左右校正旋转与新的投影矩阵再生成 remap 表。线上推理时对每一帧左右图做相同 remap再送入立体匹配。校正质量用纵向残差衡量取同一批对应点计算平均 (|y_L - y_R|)。校正前应明显大于阈值说明场景确实未对齐校正后应落到阈值以下说明行对齐成立。alpha控制裁切与视野保留的折中过小会裁掉边缘有效像素过大边缘会留下无效黑边。验收纵向残差时应在有效成像区域内统计不要把黑边像素算进去。4. 验收指标纵向残差与基线误差只看「标定跑完了」不够。本篇用三层数字层指标演示阈值一次实测重投影立体标定 RMS 1 px0.0 px纵向几何校正前平均 (\lvert\Delta y\rvert)≥ 8 px证明未对齐17.464 px纵向几何校正后平均 (\lvert\Delta y\rvert)≤ 0.8 px0.0 px尺度估计基线相对真值误差 ≤ 3 mm60.052 mm真值 60图4. 校正前平均纵向偏差约 17.5 像素校正后约 0估计基线约 60.05 mm。三层同时通过才打印STEREO_RECTIFY_EVAL_OK。任一失败打印STEREO_RECTIFY_EVAL_BLOCKED标定文件不要写进线上配置。真机没有「真值基线」时至少保留RMS、校正前后纵向残差、有效角点帧数、标定文件哈希。换镜头、拆过相机座或改过基线机械结构后必须重标定只换匹配算法、不重标定属于常见误操作。抽检可以做成固定动作每周用同一块板拍 35 对静止图只跑校正与纵向残差不重估全套内参。若平均 (\lvert\Delta y\rvert) 从 0.3 像素爬到超过业务阈值先停用依赖深度的路径再安排完整重标定。5. 合成棋盘格上的可复现演示脚本构造左相机在原点、右相机沿 (X) 平移 60 mm 并带小倾角的双目对 12 个棋盘姿态投影角点再调用立体标定与立体校正比较校正前后的纵向残差。cd~/stereo-calib-lab python3 scripts/stereo_calib_rectify_demo.py期望输出包含STEREO_CALIB_DEMO_OK STEREO_RECTIFY_EVAL_OK views12 rms0.0 baseline_est60.052 dy_before17.464 dy_after0.0报告在logs/stereo_calib_report.json参数快照在fixtures/stereo_calib.json。合成角点无检测噪声所以 RMS 与校正后纵向残差可以为 0。真机上应把阈值改成校正后平均纵向残差不超过业务允许值常见先盯 0.51 像素量级基线与装配尺寸的偏差按机械公差另定。演示里校正前故意保留相对倾角是为了让「校正前后纵向残差必须拉开」可检验。若合成数据本身已经行对齐校正前 (\lvert\Delta y\rvert) 接近 0验收会失去区分度。核心调用顺序逻辑示意# 1) 多视角角点 → 立体标定rms,K1,D1,K2,D2,R,T,E,Fcv2.stereoCalibrate(obj_points,img_points_l,img_points_r,K1,D1,K2,D2,image_size,criteriacriteria,flagsflags,)# 2) 立体校正 → 行对齐映射R1,R2,P1,P2,Q,roi1,roi2cv2.stereoRectify(K1,D1,K2,D2,image_size,R,T,flagscv2.CALIB_ZERO_DISPARITY,alpha0,)# 3) 用校正后的对应点算平均 |yL - yR|baselinefloat(np.linalg.norm(T))线上对图像做 remap 时左右必须使用同一套标定文件生成的映射表左图用旧文件、右图用新文件会出现「单侧看起来清晰、两侧对不齐」的假象。6. 常见失效与处理图5. 角点、重投影、错行与基线四类问题应分别对应采集、尺寸、相机顺序与单位。现象更可能的原因处理角点检出率低曝光不当、运动模糊、板过斜调曝光、静止拍摄、补中间姿态丢弃坏帧重投影误差偏大格长填错、左右图对错帧、板不平整核对格长与同步重采校正后仍明显错行左右图对调、外参过期、remap 用错文件检查相机顺序整套重标定基线数值离谱单位混用、取了 (T) 的某一分量而非范数统一毫米基线用 (|T|)标定当时很好、过一周变差相机座松动、温度导致结构微变定期抽检纵向残差超限重标定深度整体偏大或偏小优先查 (f) 与 (B) 是否来自当前这份标定文件只有在标定验收通过后才去调立体匹配窗口。7. 核对清单notes/stereo_calib_checklist.md的要点左右内参、畸变、相对外参写进同一份文件基线取 (|T|)单位与格长一致校正前纵向偏差明显校正后平均 (\lvert\Delta y\rvert) 低于阈值重投影 RMS 可接受估计基线与装配真值若可知偏差在阈值内看到STEREO_RECTIFY_EVAL_OK再写入配置换镜头、拆相机或改基线座后重标定。8. 术语对照中文英文或符号说明双目标定stereo calibration估计左右内参与相对外参极线校正 / 立体校正rectification使对应点共行纵向残差vertical residual (\lvert\Delta y\rvert)左右对应点的行号差绝对值基线baseline (B|T|)两光心间距重投影误差reprojection RMS角点被模型解释的平均误差内参intrinsics (K)焦距与主点等相对外参extrinsics (R,T)右相对左的旋转与平移演示通过STEREO_CALIB_DEMO_OK脚本跑通并写出文件评测通过STEREO_RECTIFY_EVAL_OK纵向残差与基线达标9. 适用边界本篇适合已经理解 (Z f B / d)需要补上 f、B 与行对齐从哪里来要用最小脚本看到「校正前后纵向残差必须拉开」准备把标定文件写进配置前先固定验收数字。本篇不适合单独作为某款工业双目模组的厂商标定 GUI 操作手册畸变很大、必须精细单目内参流程的完整教程手眼标定与点云到夹爪坐标的链路不经真机重标定就把演示基线抄进产线的依据。标定通过之后下一环才是立体匹配与深度有效性检查匹配参数调优不能代替过期的外参。若产线同时存在多套双目模组标定文件必须与模组序列号绑定。把 A 机的参数拷到 B 机基线可能只差几毫米近距离深度偏差却足以让抓取点落到物体边缘之外。10. 小结双目标定给出 (f)、(B) 与相对姿态极线校正把对应点拧到同一行。没有行对齐视差不是水平列差(Z f B / d) 不能稳定使用。验收至少覆盖重投影 RMS、校正前后纵向残差、基线尺度。合成演示中 12 视角、RMS 0、校正前 (\lvert\Delta y\rvert\approx 17.5)、校正后 0、基线约 60.05 mm标记STEREO_RECTIFY_EVAL_OK。真机必须用自己的板与同步采集换结构后重标定无效标定不要进入匹配。如果本篇对你有帮助欢迎点赞、收藏也欢迎关注后续更新。
返回列表