4、立体标定与极线几何:双目立体标定原理、本质矩阵与基础矩阵、极线约束与极线校正、立体标定误差分析
说到双目视觉,很多人第一反应就是「两个摄像头拍两张图,然后算深度」。嗯,理论上没错。但真正上手做过的人都知道——如果没有做好立体标定,后面的一切都是空中楼阁。
我刚开始做双目项目时,就吃过这个亏。当时急着调算法,随便标定了一下就往上跑,结果视差图全是噪点,深度值飘得离谱。后来花了整整一周重新做立体标定,才把精度拉回来。所以这一章,我想跟你好好聊聊立体标定和极线几何的那些事。
4.1 双目立体标定原理
立体标定,说白了就是同时标定左右两个相机的内参,以及它们之间的相对位置关系。
单目标定我们都很熟悉了——每个相机有自己的内参矩阵 K 和畸变系数。但双目系统多了一个维度:两个相机之间的旋转矩阵 R 和平移向量 T。
为什么要标这个?你想想看,左右相机拍同一个物体,它在左图上的像素坐标和右图上的像素坐标之间,存在一个几何关系。这个关系由两个相机的相对位姿决定。如果 R 和 T 不准,立体匹配就无从谈起。
立体标定的流程,我一般这么走:
- 分别标定左右相机:得到 K1、K2、畸变系数
- 拍摄多组棋盘格图像对:左右相机同步采集
- 提取角点:找到每张图中的棋盘格角点
- 计算立体变换:通过角点对应关系,求解 R 和 T
这里有个细节——棋盘格必须同时出现在左右相机的视野中。我见过有人左右分开拍,然后想通过单目标定结果拼起来,结果误差大得没法用。
核心公式:立体标定的本质是求解以下关系
P_right = R * P_left + T
其中 P_left 和 P_right 是同一个三维点在左右相机坐标系下的坐标。
4.2 本质矩阵与基础矩阵
这两个矩阵,是理解极线几何的钥匙。
本质矩阵 E:描述的是归一化图像坐标系下,左右图像点之间的几何约束。它只与相机的相对位姿有关,跟内参没关系。
基础矩阵 F:描述的是像素坐标系下,左右图像点之间的几何约束。它包含了内参信息。
它们的关系很简单:
F = K2^(-T) * E * K1^(-1)
我在项目中遇到过一个问题:用 OpenCV 的 findFundamentalMat 算出来的 F 矩阵,有时候精度很差。后来发现是特征点匹配质量太差。所以我的习惯是——先用 RANSAC 做一次粗匹配,再用 LM 优化做精匹配,这样算出来的 F 矩阵才靠谱。
个人经验:如果你用的是高分辨率相机(比如 1200 万像素以上),建议先降采样到 640x480 算 F 矩阵,然后再映射回原分辨率。这样速度能快 5 倍,精度损失可以忽略。
4.3 极线约束与极线校正
极线约束,是双目视觉里最优雅的几何关系之一。
它的核心思想很简单:左图上的一个点,在右图上的对应点一定位于一条直线上。这条线就叫极线。
为什么要用这个约束?因为立体匹配时,你不需要在整个右图上搜索对应点,只需要沿着极线搜索就行。搜索范围从二维降到了一维,效率提升巨大。
但问题是——实际的双目系统,极线往往是斜的。这就给匹配带来了麻烦。所以我们需要做极线校正。
极线校正的目标是:通过重投影,让左右图像的极线变成水平的。这样左右图上的对应点就在同一行上,匹配时只需要搜索同一行就行。
校正的步骤:
- 计算左右相机的立体变换(R 和 T)
- 构造校正矩阵,使左右图像平面共面且行对齐
- 对左右图像进行重映射
我曾经在一个项目中,校正后的图像左右边缘有黑边。这是因为校正时图像被旋转了,边缘区域没有像素信息。解决办法是适当缩放校正后的图像,或者用 cv2.getOptimalNewCameraMatrix 自动裁剪。
注意:极线校正会改变图像的像素位置。如果你后续要做三维重建,一定要把校正后的像素坐标映射回原始坐标,否则重建出来的三维点位置是错的。
4.4 立体标定误差分析
标定做完了,怎么知道它准不准?
我一般看三个指标:
| 误差类型 | 来源 | 典型值 | 我的容忍上限 |
|---|---|---|---|
| 重投影误差 | 角点检测精度、标定板平面度 | 0.1~0.5 像素 | 0.8 像素 |
| 立体匹配误差 | R/T 标定误差、图像噪声 | 0.5~2 像素 | 3 像素 |
| 深度误差 | 基线长度、标定误差累积 | 1%~5% | 10% |
重投影误差是最直观的指标。你把标定板的三维点投影到图像上,算一下投影点和实际检测到的角点之间的距离。这个值越小越好。
但要注意——重投影误差小,不代表立体匹配精度高。我遇到过标定重投影误差只有 0.2 像素,但立体匹配误差却到了 2 像素的情况。原因是标定板覆盖的视场范围不够大,导致 R 和 T 的估计在边缘区域偏差很大。
所以我的建议是:标定时让棋盘格覆盖整个视场。四个角落、中心区域都要拍到。至少拍 20 组图像对,越多越好。
避坑指南:我曾经用一张 A4 纸打印的棋盘格做标定,结果精度一直上不去。后来换了玻璃基板的陶瓷标定板,重投影误差直接降了一半。标定板的质量,真的不能省。
知识体系总览
下面这张图,是我自己总结的双目立体标定与极线几何的知识框架。你可以把它当作一个导航图,遇到问题时回来看看。
这张图把整个流程串起来了。从左右图像对开始,经过立体标定得到 R 和 T,然后可以计算本质矩阵和基础矩阵,也可以直接做极线校正。最后进入立体匹配和深度计算,别忘了做误差分析来验证标定质量。
嗯,这一章的内容就到这里。立体标定是双目视觉的基石,花时间把它做扎实了,后面的工作会顺利很多。
公众号:蓝海资料掘金营,微信deep3321