立体视觉的核心技术:视差计算与图像校正详解
立体视觉的核心技术:视差计算与图像校正详解
在立体视觉中,通过双目相机(即左右两台相机)的不同视角捕获的图像,结合几何关系,我们可以推算出场景中物体的深度。本文将深入讲解如何基于视差(disparity)和相似三角形的几何关系推导深度z,并阐述图像校正(Image Rectification)的作用及其在视差匹配中的意义。
一、立体成像中的几何关系
在双目立体视觉系统中,左相机和右相机之间存在一个固定的水平距离,称为基线(baseline),记作B。两个相机的焦距(focal length)为f。
图中展示了双目立体视觉系统的结构和关键参数,帮助我们理解视差与深度的关系。
1. 基本变量定义
如图所示,双目视觉系统由左相机(光心O_l)和右相机(光心O_r)构成,两者之间的距离为基线B。设待测物体在三维空间中的真实坐标为P(X, Y, Z),其在左、右相机图像平面上的投影点分别为p_l(x_l, y_l)和p_r(x_r, y_r)。
2. 焦距与图像平面
每个相机都有一个图像平面,其焦距为f。图像平面是相机感知三维世界的二维空间,它距离相机光心的垂直距离为f。在此图像平面上,左、右相机的成像点分别为p_l和p_r,其横坐标分别为x_l和x_r。
3. 视差的定义
视差(Disparity)表示物体在左右图像平面上的水平位置差异,用d_x表示,定义为:
d_x = x_l - x_r
视差的存在是因为左右相机拍摄同一物体的角度不同。视差越大,意味着物体越靠近相机;反之,视差越小,物体离相机越远。
4. 深度Z的推导
我们可以利用相似三角形关系推导出物体到相机的深度Z。根据图中的三角形关系,以下是推导深度Z的过程。
- 对于左相机成像的三角形,可以得到:
X/Z = x_l/f
- 对于右相机成像的三角形,可以得到:
(X - B)/Z = x_r/f
通过消去X,得到Z的公式如下:
- 由左相机的成像关系得出:
X = (x_l * Z)/f
- 将X代入右相机的成像关系中,得到:
((x_l * Z)/f - B)/Z = x_r/f
- 整理得出:
x_l * Z - B * f = x_r * Z
- 将Z项合并,可以得出最终深度Z的表达式:
Z = f * B / (x_l - x_r) = f * B / d_x
5. 深度Z与视差d_x的关系
最终,深度Z可以表示为基线B、焦距f和视差d_x的函数:
Z = f * B / d_x
该公式表明,深度Z与视差d_x成反比关系。具体来说:
- 当视差d_x增大时,深度Z会减小。这表示物体距离相机更近,因为左右相机看到的物体位置差异显著。
- 当视差d_x减小时,深度Z会增大。这表示物体距离相机更远,因为左右相机看到的物体位置几乎相同。
这种关系很直观:当物体靠近相机时,由于角度差异,左右相机的成像位置会有较大差异,形成较大的视差;而当物体较远时,左右相机成像位置差异较小,视差随之减小。
二、图像校正:视差匹配的预处理
在实际的双目视觉系统中,左右相机并不总是能够完美对齐。由于安装误差、镜头失真或相机的角度偏差,左右图像可能存在垂直方向或旋转上的不一致。这会导致对应点的极线(epipolar line)并不水平。
如图所示,左右图像平面中的极线可能是倾斜的,这种不对齐给视差匹配带来了额外的复杂性。为了解决这一问题,我们通常需要对图像进行图像校正(Image Rectification),即通过一种变换使得左右图像的极线变得水平平行,使得同一空间点在左右图像中的投影点位于同一条水平线上。这种操作能够简化视差匹配过程,并提高深度估计的精度。
1. 图像校正的作用
图像校正的核心目标是对输入图像进行透视变换,确保左右相机的极线在校正后的图像中保持水平。校正后的图像具有以下特点:
- 极线水平对齐:校正后的极线保持水平,从而简化视差计算。
- 简化匹配:同一个空间点的左右成像点处于同一水平线上,有利于更高效、精确地进行视差匹配。
在图中可以看到,原始左右图像的极线(红色虚线)可能并不水平;校正之后,这些极线被强制水平对齐,从而满足视差计算的要求。
2. 图像校正的数学描述
为了实现图像校正,构造一个变换矩阵H是关键步骤。通过这个矩阵,我们可以对原始图像进行透视变换,将左右图像中的点映射到校正后的平面上,从而使得左右相机的极线水平对齐。
图像校正过程可以表示为:
校正图像 = 原始图像 × H
其中H是校正变换矩阵,其求解依赖于相机的内参和外参,即相机的内部光学特性(焦距、光心)和相机相对于其他相机或世界坐标系的空间位置关系(旋转和平移)。
内参矩阵K
相机的内参描述了相机的光学特性,包括焦距和光心位置。内参矩阵K通常表示为:
K = [f_x 0 c_x
0 f_y c_y
0 0 1]
其中f_x和f_y是相机在x和y方向的焦距,c_x和c_y是光心的位置。内参矩阵K可以通过相机标定技术得到。
外参矩阵[R | t]
外参定义了相机的空间位置和方向,包括旋转矩阵R和平移向量t。其中,R是一个3×3矩阵,描述了相机坐标系相对于世界坐标系的旋转;t是一个3×1向量,描述了相机的平移。外参矩阵组合表示为:
外参矩阵 = [R t
0 1]
通过内参和外参的组合,我们可以构造出用于校正的变换矩阵H。
构造校正矩阵H
校正矩阵H的构造如下:
H = K * R_rect * K^-1
其中:
- K为内参矩阵;
- R_rect是通过外参计算得到的旋转矩阵,用于将原始图像坐标旋转到极线水平对齐的校正坐标系下;
- K^-1是内参矩阵的逆矩阵,用于将校正结果映射回像素坐标系。
通过这种变换,校正后的图像点p_rect可以由原始图像点p映射得到:
p_rect = H * p
3. 校正后的视差匹配
完成图像校正后,左右图像的极线平行且水平对齐。这样一来,视差匹配可以直接在水平方向上进行,这带来了以下好处:
- 提高视差计算的准确性:由于极线对齐,视差直接反映物体深度的信息,减少了因角度偏差带来的误差。
- 降低计算复杂度:无需在垂直方向上搜索匹配点,从而简化了视差匹配的计算过程。
最终,通过图像校正,双目相机的视差匹配过程变得更加简单有效,为深度估计提供了精确的基础。这一过程在自动驾驶、三维重建和机器人视觉系统中尤为重要,因为它显著提升了双目视觉系统的鲁棒性和计算效率。
三、总结
立体视觉中的视差与深度成反比关系。通过双目相机拍摄的图像,我们可以利用视差来推算物体的深度。而图像校正操作则确保了左右图像的极线平行,使得视差计算更为简单和高效。这一过程在自动驾驶、3D建模等领域中有着广泛的应用。