双目相机模型

近期想研究一下 双目相机 的内容,故先把 理论 弄清楚!

 

一、双目相机模型

针孔相机模型描述了 单个相机 的成像模型。然而,仅根据一个像素,我们是无法确定 这个空间点的具体位置的。
这是因为,从相机光心到归一化平面连线上的所有点,都可以 投影至该像素上。只有当 P 的深度确定时(比如通过双目或 RGB-D 相机),
我们才能确 切地知道它的空间位置。
双目相机模型

 

测量像素距离(或深度)的方式有很多种,像人眼就可以根据左右眼看到的景物差异 (或称视差)来判断物体与我们的距离。

双目相机的原理亦是如此。通过同步采集左右相机的图像,计算图像间视差,来估计每一个像素的深度。

下面我们简单讲讲双目相机的成像 原理(图 5-6

 
双目相机模型
 
 
双目相机一般由左眼和右眼两个水平放置的相机组成(前期需要标定)。当然也可以做成上下两个目 , 但我们见到的主流双目都是做成左右的。
在左右双目的相机中,我们可以把两个相机都看 作针孔相机。它们是水平放置的,意味两个相机的光圈中心都位于 x 轴上。
它们的距离称 为双目相机的 基线 Baseline, 记作 b ),是双目的重要参数。 现在,考虑一个空间点 P ,它在左眼和右眼各成一像,记作 PL, PR
由于相机基线的 存在,这两个成像位置是不同的。理想情况下,由于左右相机只有在 x 轴上有位移,因此   的像也只在 x 轴(对应图像的 u 轴)上有差异 ( y轴相等 )。
我们记它在左侧的坐标为 uL ,右侧坐标 为 u R 。那么,它们的几何关系如图 5-6 右侧所示。 
根据三角形 P -PL -PR P -OL -OR 的相似关系,有:
 
双目相机模型
稍加整理,得:
双目相机模型
 
这里 d 为左右图的横坐标之差,称为 视差 Disparity );根据视差,我们可以估计一 个像素离相机的距离;f,b 都是已经知道的!
视差与距离成反比:视差越大,距离越近 。同时,由于视差最小为 一个像素,于是双目的深度存在一个理论上的最大值,由 fb 确定。
我们看到,当基线越长 时,双目最大能测到的距离就会变远;反之,小型双目器件则只能测量很近的距离。 虽然由视差计算深度的公式很简洁,
但视差 d 本身的计算却比较困难。我们需要确切 地知道左眼图像某个像素出现在右眼图像的哪一个位置(即对应关系),
这件事亦属于“人 类觉得容易而计算机觉得困难”的事务。当我们想计算每个像素的深度时,其计算量与精 度都将成为问题,
而且只有在图像纹理变化丰富的地方才能计算视差。由于计算量的原因, 双目深度估计仍需要使用 GPU FPGA 来计算。
 
 
 

二、理解

 
从上面的相机模型可知,要想求出特征点的深度(距离),需要知道特征点在 左右 两个相机 成像平面坐标系下的位置  uL , u R
目前我知道的有两种方法;
第一种:根据模型分别求特征点在左右相机的位置,然后进行匹配,并去除错误匹配点,根据得到的匹配点进行特征点距离的求解;
 
第二种:根据相机模型,获得特征点在左相机的像素位置,然后根据KLT光流法追踪 左相机特征点 在 右相机的位置,得到匹配的特征点,再进行 三角化!
 

                       左相机                     右相机
K   帧           prev_img

                            |

K+1 帧       cur_img    ------>   rightImg
----------------------------------------------------------------

 
思考:
想一下VINS-MONO程序的思路,单目+IMU;对于单目相机而言, 需要通过不同位置对同一个路标点进行观察,从观察到的位置推断路标点的距离;
在此之前,需要利用 2D-2D 对极约束 估计两帧图像的旋转和平移;得到特征点后,再利用3D-2D的思路求解相机的位姿;本人感觉求出特征点的距离后,
其他的内容应该别无二致,优化、滑动窗口等;
 
对于相机运动的估计,可总结如下:
1. 当相机为单目时,我们只知道 2D 的像素坐标,因而问题是根据 两组 2D 估计运 动。该问题用对极几何 来解决
2. 当相机为双目、RGB-D ,或者我们通过某种方法得到了距离信息,那问题就是根 据两组 3D 估计运动。该问题通常用 ICP 来解决
3. 如果我们有 3D 点和它们在相机的投影位置,也能估计相机的运动。该问题通过 PnP 求解
 
 

双目+imu的作用是什么呢?

(1)追踪中提供较好的初始位姿

(2)提供重力方向

(3)提供一个时间误差项以供优化