3、极线几何:对极约束、本质矩阵、基础矩阵、极线校正原理与实现
双目立体匹配的核心任务是解决“左图像素点在右图像中的对应位置在哪里”的问题。如果直接在二维图像平面上进行全图搜索,计算量巨大且极易产生误匹配。极线几何(Epipolar Geometry)正是描述两幅图像之间投影几何关系的数学框架,它将对应点的搜索空间从二维平面压缩到一条直线(极线)上,从根本上降低了匹配的复杂度和歧义性。本章将深入剖析对极约束的数学本质,厘清本质矩阵与基础矩阵的区别与联系,并详细讲解极线校正(Stereo Rectification)的原理与工程实现路径。
上图展示了双目视觉中最基本的几何关系:空间点 P 分别投影到左右相机成像平面上的点 p₁ 和 p₂。两个相机光心 C₁、C₂ 的连线称为基线 T,点 P 与基线构成的平面称为对极平面 π。对极平面与左右图像平面的交线 l₁、l₂ 即为极线。对极约束的核心结论是:左图上任意一点 p₁,其在右图上的对应点 p₂ 必然位于右图的极线 l₂ 上。这一约束将二维搜索降为一维搜索,是立体匹配效率与鲁棒性的基石。
3.1 对极约束的数学表达与几何意义
3.1.1 核心原理:从三维空间到二维投影的约束传递
对极约束的数学本质是共面约束。空间点 P、左光心 C₁、右光心 C₂ 三点确定一个平面(对极平面)。根据相机投影模型,左像点 p₁ 对应的三维射线 C₁P 上的所有点,在右相机中投影形成的轨迹恰好就是极线 l₂。因此,对于左图中的特征点 p₁,我们无需在右图全图搜索,只需沿极线 l₂ 进行一维匹配即可。
用齐次坐标表示,设左右相机的投影矩阵分别为 P₁ 和 P₂,则对极约束可以写成代数形式:
p₂ᵀ F p₁ = 0
其中 F 是 3×3 的基础矩阵(Fundamental Matrix),秩为 2,自由度为 7。它编码了两个相机之间的全部内参和相对位姿信息。当左右相机内参已知时,可以进一步归一化到本质矩阵(Essential Matrix)E:
E = K₂ᵀ F K₁
本质矩阵 E 仅与相机的相对旋转 R 和平移 t 有关,其自由度为 5(3 旋转 + 3 平移 - 1 尺度模糊)。E 的奇异值具有特殊形式 [σ, σ, 0],这一性质常用于 E 的分解与位姿恢复。
3.1.2 判断方法:如何快速判断点是否满足对极约束
在实际工程中,我们经常需要验证一组匹配点 (p₁, p₂) 是否满足对极几何关系,或者用于剔除误匹配(如 RANSAC 中的外点判断)。操作流程如下:
- 归一化坐标:将像素坐标转换为归一化相机坐标(若使用基础矩阵则跳过此步)。
- 计算代数误差:计算
p₂ᵀ F p₁的值,该值理论上应为 0。 - 计算几何误差(Sampson 距离):考虑噪声影响,更稳健的做法是计算点到极线的距离。极线 l₂ = F p₁,则点 p₂ 到极线的距离为:
d = |p₂ᵀ F p₁| / sqrt( (F p₁)₁² + (F p₁)₂² )
其中 (F p₁)₁ 和 (F p₁)₂ 表示向量 F p₁ 的前两个分量。若 d 小于阈值(通常 1~2 像素),则认为该匹配对满足对极约束。
| 矩阵类型 | 输入信息 | 自由度 | 核心性质 | 典型应用 |
|---|---|---|---|---|
| 基础矩阵 F | 像素坐标 + 内参未知 | 7 | 秩为 2,奇异值 [σ₁, σ₂, 0] | 未标定双目、特征匹配剔除 |
| 本质矩阵 E | 归一化坐标 + 内参已知 | 5 | 奇异值 [σ, σ, 0] | 标定双目、位姿恢复 |
| 单应矩阵 H | 像素坐标(平面场景) | 8 | 满秩,可逆 | 平面场景、图像拼接 |
3.2 本质矩阵与基础矩阵的深入辨析
3.2.1 核心原理:两者之间的桥梁与差异
本质矩阵 E 和基础矩阵 F 都描述了对极约束,但应用前提不同。E 定义在归一化图像坐标下,即假设内参矩阵 K 已知并将像素坐标转换为相机坐标;而 F 直接作用于像素坐标,隐含了内参信息。两者的转换关系为:
F = K₂⁻ᵀ E K₁⁻¹
从几何角度看,E 的物理意义更纯粹——它只包含相机间的相对运动(R, t),与相机内参无关。这使得 E 在视觉里程计(VO)、SLAM 中成为恢复相机位姿的首选。而 F 在未标定场景(如仅有两幅图像但无相机参数)中更为实用,可以通过 8 点算法直接从匹配点对中估计。
3.2.2 操作流程:从匹配点估计 F 与 E
以经典的 8 点算法为例,估计基础矩阵的步骤如下:
- 数据归一化:将匹配点坐标平移至质心并缩放至均方根距离为 √2,以提升数值稳定性。
- 构建线性方程组:对于每一对匹配点 (u₁, v₁, 1) 和 (u₂, v₂, 1),展开 p₂ᵀ F p₁ = 0,得到一个线性方程,未知数为 F 的 9 个元素。
- SVD 求解:堆叠至少 8 个方程,使用奇异值分解(SVD)求解最小二乘解。
- 秩约束强制:将求解得到的 F 矩阵进行 SVD,将其最小奇异值置为 0,再重构矩阵,使其满足秩为 2 的性质。
- 去归一化:将结果变换回原始坐标尺度。
若已知内参 K₁、K₂,则可通过 E = K₂ᵀ F K₁ 得到本质矩阵,再对 E 进行 SVD 分解(E = UΣVᵀ),结合 W 矩阵(W = [0,-1,0; 1,0,0; 0,0,1])可恢复出 4 组可能的 (R, t) 解,最后通过三角化检验点的深度正负来筛选唯一正确解。
3.3 极线校正:原理与实现
3.3.1 核心原理:将极线变为水平线
虽然对极约束已将搜索从二维降为一维,但极线通常是倾斜的,沿倾斜方向采样在工程上并不方便。极线校正(Stereo Rectification)通过对左右图像进行重投影变换,使得两幅图像的极线变为水平且行对齐。校正后,左图 (x₁, y) 的对应点必然在右图同一行 (x₂, y) 上,此时视差 d = x₁ - x₂ 仅与深度有关,匹配问题简化为水平方向的一维搜索。
校正的核心思想是:构造两个新的虚拟相机,它们具有相同的朝向(光轴平行)、相同的内参,并且光心连线(新基线)与原基线平行。具体实现通常采用 Bouguet 算法:
- 将右相机相对于左相机的旋转矩阵 R 分解为两半:R_left = R^(1/2),R_right = R^(-1/2),使左右图像各旋转一半,消除旋转差异。
- 构造旋转矩阵 R_rect,使新坐标系的 X 轴与基线方向平行,Y 轴与 X 轴正交且垂直于原光轴方向,Z 轴与 X、Y 构成右手系。
- 最终校正矩阵为 R_rect_left = R_rect * R_left,R_rect_right = R_rect * R_right。
- 结合内参矩阵,计算新的投影矩阵和重映射查找表(map_x, map_y)。
3.3.2 操作流程:OpenCV 实现步骤
在 OpenCV 中,极线校正的典型流程如下:
// 1. 读取标定参数(内参 K1, K2,畸变系数 D1, D2,相对位姿 R, T)
// 2. 调用 stereoRectify 计算校正变换
cv::stereoRectify(K1, D1, K2, D2, imageSize, R, T,
R1, R2, P1, P2, Q,
cv::CALIB_ZERO_DISPARITY, alpha);
// 3. 计算校正查找表
cv::initUndistortRectifyMap(K1, D1, R1, P1, imageSize, CV_32FC1, map1x, map1y);
cv::initUndistortRectifyMap(K2, D2, R2, P2, imageSize, CV_32FC1, map2x, map2y);
// 4. 应用重映射
cv::remap(imgLeft, rectifiedLeft, map1x, map1y, cv::INTER_LINEAR);
cv::remap(imgRight, rectifiedRight, map2x, map2y, cv::INTER_LINEAR);
其中 Q 矩阵为视差到深度的转换矩阵,后续章节会用到。参数 alpha 控制校正后图像的裁剪范围,alpha=0 时图像裁剪最紧,alpha=1 时保留所有像素但黑色区域较多。
3.3.3 案例拆解:双目相机校正实战
背景与约束:某机器人平台搭载双目相机,基线长度 120mm,图像分辨率 1280×720。标定得到左右内参 K₁、K₂ 及相对位姿 R(近似单位阵)、T = [120mm, 0, 0]ᵀ。目标是将图像校正为理想的行对齐状态,以便后续使用 SGM 算法进行稠密匹配。
初始现象:直接使用原始图像进行匹配时,极线倾斜约 3.5°,导致匹配窗口无法水平对齐,误匹配率高达 15%。
关键参数与操作:
- 使用
cv::stereoRectify时设置alpha=0,以最大化有效像素区域。 - 校正后通过
cv::computeCorrespondEpilines验证极线是否水平:随机选取 20 对特征点,计算右图极线与水平线的夹角,平均误差应小于 0.1°。 - 检查视差图质量:校正后使用简单的块匹配(Block Matching)测试,误匹配率降至 2% 以下。
结果对比:校正前,极线倾斜导致搜索范围需覆盖 ±5 像素的垂直偏移;校正后,垂直偏移为 0,搜索范围仅需水平方向 ±60 像素(对应最小深度 0.5m)。计算量降低约 40%,且匹配鲁棒性显著提升。
风险与代价:校正过程会引入图像重采样插值,导致边缘轻微模糊;同时校正后的图像存在黑色无效区域(尤其是 alpha=0 时),需要后续处理时进行掩膜(mask)操作。
3.4 常见误区与总结复盘
3.4.1 误区一:混淆基础矩阵与本质矩阵的使用场景
初学者常在不具备内参的情况下强行使用本质矩阵,或在已标定系统中错误地使用基础矩阵。本质矩阵要求输入为归一化坐标,若直接使用像素坐标,则必须通过内参转换。正确做法是:未标定系统用 F,已标定系统用 E,且 E 的分解结果可直接用于位姿估计。
3.4.2 误区二:忽略极线校正后的边界效应
校正后的图像边缘会出现黑色区域,这些区域的像素没有有效视差。在后续立体匹配中,必须对这些区域进行掩膜处理,否则会产生错误的视差值。建议在匹配前生成有效的 ROI 区域。
3.4.3 误区三:认为校正后视差与深度是线性关系
即使校正完美,视差 d 与深度 Z 的关系仍为非线性:Z = f·B / d,其中 f 为焦距(像素单位),B 为基线长度。当 d 较小时,深度对 d 的微小变化非常敏感,因此远距离物体的深度精度较低。
| 检查项 | 验证方法 | 通过标准 |
|---|---|---|
| 极线水平度 | 随机取 20 对匹配点,计算极线斜率 | 斜率值 < 0.01(约 0.6°) |
| 行对齐精度 | 计算对应点行坐标差值的均方根误差 | RMSE < 0.5 像素 |
| 重投影误差 | 三角化后反投影至原图像 | 平均误差 < 0.3 像素 |
总结:极线几何是双目视觉的数学骨架。对极约束提供了匹配搜索的降维依据,本质矩阵与基础矩阵是这一约束的代数载体,而极线校正则是将理论转化为高效工程实现的桥梁。掌握本章内容后,读者应能够独立完成从标定参数到校正图像的完整链路,并为后续的立体匹配算法(如 SGM、BM)奠定坚实的数据基础。在实际项目中,务必重视标定参数的准确性,因为 F 和 E 的估计误差会直接传导至校正结果,最终影响深度图的质量。