深度相机原理揭秘--双目立体视觉

深度相机原理揭秘--双目立体视觉 

导读算法

为何非得用双目相机才能获得深度?dom

双目立体视觉深度相机的工做流程函数

双目立体视觉深度相机详细工做原理学习

理想双目相机成像模型优化

极线约束spa

图像矫正技术3d

基于滑动窗口的图像匹配blog

基于能量优化的图像匹配图片

双目立体视觉深度相机的优缺点ip

---------------------------------------------------

基于双目立体视觉的深度相机相似人类的双眼,和基于TOF、结构光原理的深度相机不一样,它不对外主动投射光源,彻底依靠拍摄的两张图片(彩色RGB或者灰度图)来计算深度,所以有时候也被称为被动双目深度相机。比较知名的产品有STEROLABS 推出的 ZED 2K Stereo Camera和Point Grey 公司推出的 BumbleBee。

ZED 2K Stereo Camera

为何非得用双目相机才能获得深度?

说到这里,有些读者会问啦:为何非得用双目相机才能获得深度?我闭上一只眼只用一只眼来观察,也能知道哪一个物体离我近哪一个离我远啊!是否是说明单目相机也能够得到深度?

在此解答一下:首先,确实人经过一只眼也能够得到必定的深度信息,不过这背后其实有一些容易忽略的因素在起做用:一是由于人自己对所处的世界是很是了解的(先验知识),于是对平常物品的大小是有一个基本预判的(从小到大多年的视觉训练),根据近大远小的常识确实能够推断出图像中什么离咱们远什么离咱们近;二是人在单眼观察物体的时候其实人眼是晃动的,至关于一个移动的单目相机,这相似于运动恢复结构(Structure from Motion, SfM)的原理,移动的单目相机经过比较多帧差别确实能够获得深度信息。

可是实际上,相机毕竟不是人眼,它只会傻傻的按照人的操做拍照,不会学习和思考。下图从物理原理上展现了为何单目相机不能测量深度值而双目能够的缘由。咱们看到红色线条上三个不一样远近的黑色的点在下方相机上投影在同一个位置,所以单目相机没法分辨成的像究竟是远的那个点仍是近的那个点,可是它们在上方相机的投影却位于三个不一样位置,所以经过两个相机的观察能够肯定究竟是哪个点。

双目相机肯定深度示意图

双目立体视觉深度相机简化流程

下面简单的总结一下双目立体视觉深度相机的深度测量过程,以下:

一、首先须要对双目相机进行标定,获得两个相机的内外参数、单应矩阵。

二、根据标定结果对原始图像校订,校订后的两张图像位于同一平面且互相平行。

三、对校订后的两张图像进行像素点匹配。

四、根据匹配结果计算每一个像素的深度,从而得到深度图。

欲知详情,且看下面详细介绍。

双目立体视觉深度相机详细原理

1

理想双目相机成像模型

首先咱们从理想的状况开始分析:假设左右两个相机位于同一平面(光轴平行),且相机参数(如焦距f)一致。那么深度值的推导原理和公式以下。公式只涉及到初中学的三角形类似知识,不难看懂。

理想状况下双目立体视觉相机深度值计算原理

根据上述推导,空间点P离相机的距离(深度)z=f*b/d,能够发现若是要计算深度z,必需要知道:

一、相机焦距f,左右相机基线b。这些参数能够经过先验信息或者相机标定获得。

二、视差d。须要知道左相机的每一个像素点(xl, yl)和右相机中对应点(xr, yr)的对应关系。这是双目视觉的核心问题。

2

极线约束

那么问题来了,对于左图中的一个像素点,如何肯定该点在右图中的位置?是否是须要咱们在整个图像中地毯式搜索一个个匹配?

答案是:不须要。由于有极线约束(名字听着很吓人)。极线约束对于求解图像对中像素点的对应关系很是重要。

那什么是极线呢?以下图所示。C1,C2是两个相机,P是空间中的一个点,P和两个相机中心点C一、C2造成了三维空间中的一个平面PC1C2,称为极平面(Epipolar plane)。极平面和两幅图像相交于两条直线,这两条直线称为极线(Epipolar line)。P在相机C1中的成像点是P1,在相机C2中的成像点是P2,可是P的位置事先是未知的。

咱们的目标是:对于左图的P1点,寻找它在右图中的对应点P2,这样就能肯定P点的空间位置,也就是咱们想要的空间物体和相机的距离(深度)。

所谓极线约束(Epipolar Constraint)就是指当同一个空间点在两幅图像上分别成像时,已知左图投影点p1,那么对应右图投影点p2必定在相对于p1的极线上,这样能够极大的缩小匹配范围。

根据极线约束的定义,咱们能够在下图中直观的看到P2必定在对极线上,因此咱们只须要沿着极线搜索必定能够找到和P1的对应点P2。

极线约束示意图

细心的朋友会发现上述过程考虑的状况(两相机共面且光轴平行,参数相同)很是理想,相机C1,C2若是不是在同一直线上怎么办?

事实上,这种状况很是常见,由于有些场景下两个相机须要独立固定,很难保证光心C1,C2彻底水平,即便是固定在同一个基板上也会由于装配的缘由致使光心不彻底水平。以下图所示。咱们看到两个相机的极线不只不平行,还不共面,以前的理想模型那一套推导结果用不了了,这可咋办呢?

非理想状况下的极线

不急,有办法。咱们先来看看这种状况下拍摄的两张左右图片吧,以下所示。左图中三个十字标志的点,在右图中对应的极线是右图中的三条白色直线,也就是对应的搜索区域。咱们看到这三条直线并非水平的,若是进行逐点搜索效率很是低。

左图中三个点(十字标志)在右图中对应的极线是右图中的三条白色直线

3

图像矫正技术

怎么办呢?把不理想状况转化为理想状况不就OK了!这就是图像矫正(Image Rectification)技术。

图像矫正是经过分别对两张图片用单应(homography)矩阵变换(能够经过标定得到)获得的,的目的就是把两个不一样方向的图像平面(下图中灰色平面)从新投影到同一个平面且光轴互相平行(下图中黄色平面),这样就能够用前面理想状况下的模型了,两个相机的极线也变成水平的了。

图像校订示意图

通过图像矫正后,左图中的像素点只须要沿着水平的极线方向搜索对应点就能够了(开心)。从下图中咱们能够看到三个点对应的视差(红色双箭头线段)是不一样的,越远的物体视差越小,越近的物体视差越大,这和咱们的常识是一致的。

图像校订后的结果。红色双箭头线段是对应点的视差

上面讲到的对于左图的一个点,沿着它在右图中水平极线方向寻找和它最匹配的像素点,提及来简单,实际操做起来却不容易。这是由于上述都是理想状况下的假设。实际进行像素点匹配的时候会发现几个问题:

一、实际上要保证两个相机彻底共面且参数一致是很是困难的,并且计算过程当中也会产生偏差累积,所以对于左图的一个点,其在右图的对应点不必定刚好在极线上。可是应该是在极线附近,因此搜索范围须要适当放宽。

二、单个像素点进行比较鲁棒性不好,很容易受到光照变化和视角不一样的影响。

4

基于滑动窗口的图像匹配

上述问题的解决方法:使用滑动窗口来进行匹配。以下图所示。对于左图中的一个像素点(左图中红色方框中心),在右图中从左到右用一个同尺寸滑动窗口内的像素和它计算类似程度,类似度的度量有不少种方法,好比 偏差平方和法(Sum of Squared Differences,简称SSD),左右图中两个窗口越类似,SSD越小。下图中下方的SSD曲线显示了计算结果,SSD值最小的位置对应的像素点就是最佳的匹配结果。

滑动窗口匹配原理示意图

具体操做中还有不少实际问题,好比滑动窗口尺寸。滑动窗口的大小选取仍是颇有讲究的。下图显示了不一样尺寸的滑动窗口对深度图计算结果的影响。从图中咱们也不难发现:

小尺寸的窗口:精度更高、细节更丰富;可是对噪声特别敏感

大尺寸的窗口:精度不高、细节不够;可是对噪声比较鲁棒

不一样尺寸的滑动窗口对深度图计算结果的影响

虽然基于滑动窗口的匹配方法能够计算获得深度图,可是这种方法匹配效果并很差,并且因为要逐点进行滑动窗口匹配,计算效率也很低。

5

基于能量优化的图像匹配

目前比较主流的方法都是基于能量优化的方法来实现匹配的。能量优化一般会先定义一个能量函数。好比对于两张图中像素点的匹配问题来讲,咱们定义的能量函数以下图公式1。咱们的目的是:

一、在左图中全部的像素点和右图中对应的像素点越近似越好,反映在图像里就是灰度值越接近越好,也就是下图公式2的描述。

二、在 同一张图片里,两个相邻的像素点视差(深度值)也应该相近。也就是下图公式3的描述。

能量函数

上述公式1表明的能量函数就是著名的马尔科夫随机场(Markov Random Field)模型。经过对能量函数最小化,咱们最后获得了一个最佳的匹配结果。有了左右图的每一个像素的匹配结果,根据前面的深度计算公式就能够获得每一个像素点的深度值,最终获得一幅深度图。

双目立体视觉法优缺点

根据前面的原理介绍,咱们总结一下基于双目立体视觉法深度相机的优缺点。

1

优势

一、对相机硬件要求低,成本也低。由于不须要像TOF和结构光那样使用特殊的发射器和接收器,使用普通的消费级RGB相机便可。

二、室内外都适用。因为直接根据环境光采集图像,因此在室内、室外都能使用。相比之下,TOF和结构光基本只能在室内使用。

2

缺点

一、对环境光照很是敏感。双目立体视觉法依赖环境中的天然光线采集图像,而因为光照角度变化、光照强度变化等环境因素的影响,拍摄的两张图片亮度差异会比较大,这会对匹配算法提出很大的挑战。以下图是在不一样光照条件下拍摄的图片:

不一样光照下的图像对比

另外,在光照较强(会出现过分曝光)和较暗的状况下也会致使算法效果急剧降低。

二、不适用于单调缺少纹理的场景。因为双目立体视觉法根据视觉特征进行图像匹配,因此对于缺少视觉特征的场景(如天空、白墙、沙漠等)会出现匹配困难,致使匹配偏差较大甚至匹配失败。

纹理丰富(左)和纹理缺少场景(右)

三、计算复杂度高。该方法是纯视觉的方法,须要逐像素计算匹配;又由于上述多种因素的影响,须要保证匹配结果比较鲁棒,因此算法中会增长大量的错误剔除策略,所以对算法要求较高,想要实现可靠商用难度大,计算量较大。

四、相机基线限制了测量范围。测量范围和基线(两个摄像头间距)关系很大:基线越大,测量范围越远;基线越小,测量范围越近。因此基线在必定程度上限制了该深度相机的测量范围。

本公众号后续继续推出一系列关于深度相机原理和技术应用文章,敬请关注。

注:转载请注明来源,违者必究。

相关文章
相关标签/搜索