利用摄像机如何获取物体的深度信息

  简而言之,其原理就是使用两个平行的相机,对空间中的每个点三角定位。通过匹配左右两个相机中成像点的位置,来计算对应三维点在空间中的距离。学术界对双目匹配恢复深度图研究有很长的历史,在NASA火星车上就开始采用这个技术。但是其真正在消费电子品市场得到广泛应用还是从微软的Kinect体感传感器开始。

  双目测距:(普通摄像头)

1.双目测距原理:


  如上图所示,双目测距主要是利用了目标点在左右两幅视图上成像的横向坐标直接存在的差异(即视差clip_image004 )与目标点到成像平面的距离Z存在着反比例的关系:Z=fT/d。“@scyscyao :OpenCV中,f的量纲是像素点,T的量纲由定标板棋盘格的实际尺寸和用户输入值确定,一般是以毫米为单位(当然为了精度提高也可以设置为0.1毫米量级),d=xl-xr的量纲也是像素点。因此分子分母约去,Z的量纲与T相同。 

  为了精确地求得某个点在三维空间里的距离Z,我们需要获得的参数有焦距f、视差d、摄像头中心距Tx。如果还需要获得X坐标和Y坐标的话,那么还需要额外知道左右像平面的坐标系与立体坐标系中原点的偏移cx和cy。其中f, Tx, cx和cy可以通过立体标定获得初始值,并通过立体校准优化,使得两个摄像头在数学上完全平行放置,并且左右摄像头的cx, cy和f相同(也就是实现图2中左右视图完全平行对准的理想形式)。而立体匹配所做的工作,就是在之前的基础上,求取最后一个变量:视差d(这个d一般需要达到亚像素精度)。从而最终完成求一个点三维坐标所需要的准备工作。在清楚了上述原理之后,我们也就知道了,所有的这几步:标定、校准和匹配,都是围绕着如何更精确地获得 f, d, Tx, cx 和cy 而设计的 。 ”

2.立体匹配 

目前立体匹配算法是计算机视觉中的一个难点和热点,算法很多,但是一般的步骤是:

A、匹配代价计算

匹配代价计算是整个立体匹配算法的基础,实际是对不同视差下进行灰度相似性测量。常见的方法有灰度差的平方SD(squared intensity differences),灰度差的绝对值AD(absolute intensity differences)等。另外,在求原始匹配代价时可以设定一个上限值,来减弱叠加过程中的误匹配的影响。以AD法求匹配代价为例,可用下式进行计算,其中T为设定的阈值。


B、 匹配代价叠加

一般来说,全局算法基于原始匹配代价进行后续算法计算。而区域算法则需要通过窗口叠加来增强匹配代价的可靠性,根据原始匹配代价不同,可分为:


C、 视差获取

对于区域算法来说,在完成匹配代价的叠加以后,视差的获取就很容易了,只需在一定范围内选取叠加匹配代价最优的点(SAD和SSD取最小值,NCC取最大值)作为对应匹配点,如胜者为王算法WTA(Winner-take-all)。而全局算法则直接对原始匹配代价进行处理,一般会先给出一个能量评价函数,然后通过不同的优化算法来求得能量的最小值,同时每个点的视差值也就计算出来了。

 

D、视差细化(亚像素级)

大多数立体匹配算法计算出来的视差都是一些离散的特定整数值,可满足一般应用的精度要求。但在一些精度要求比较高的场合,如精确的三维重构中,就需要在初始视差获取后采用一些措施对视差进行细化,如匹配代价的曲线拟合、图像滤波、图像分割等。

 

有关立体匹配的介绍和常见匹配算法的比较,推荐大家看看Stefano Mattoccia 的讲义 Stereo Vision: algorithms and applications,190页的ppt,讲解得非常形象详尽。


  深度摄像头:结构光测距

1.原理

  Kinect传感背后使用了以色列Primesense公司授权的结构光技术(如今已被Apple收购)。其原理是避开双目匹配中复杂的算法设计,转而将一个摄像头更换成向外主动投射复杂光斑的红外投影仪,而另一个平行位置的相机也变成了红外相机,可以清楚的看到投影仪投射所有光斑。因为人眼看不到红外光斑,而且纹理非常复杂,这就非常有利于双目匹配算法,可以用非常简洁的算法,识别出深度信息。

尽管Kinect的内在原理官方并没有给出解释,在近年来一篇Kinect Unleashed的文章中,作者向公众hack了这个系统的工作原理:

首先,红外图像在基线方向上采样8倍,这样可以保证在做双目匹配后实现3bit的亚像素精度。然后,对图像做sobel滤波,使得图像的匹配精度提高。而后,图像与预存的投影光斑模板图像进行SAD block matching。该算法的计算复杂度小,适合硬化和并行。最后,经过简单的图像后处理,下采样到原始分辨率,得到最终的深度图。


和其他摄像机一样,近红外摄像机也有视场。Kinect摄像机的视野是有限的,如下图所示:

如图,红外摄像机的视场是金字塔形状的。离摄像机远的物体比近的物体拥有更大的视场横截面积。这意味着影像的高度和宽度,比如640X480和摄像机视场的物理位置并不一一对应。但是每个像素的深度值是和视场中物体离摄像机的距离是对应的。

fov:视场角,其与焦距的关系如下:

h = f*tan\[Theta]
像高 = EFL*tan (半FOV)
EFL为焦距
FOV为视场角



2.结构光测距原理



3.应用:

Segway robot采用了主动/被动可切换的双目深度视觉系统。如下图所示,

左侧三个传感器分别为,左红外相机,红外pattern投影,右红外相机。在室内工作时,因为红外光源不足,红外投影打开,辅助双目匹配算法。在室外工作时,红外光源充足,红外投影关闭,双目匹配算法可以直接运行。综合看,此系统在室内外都表现出优异的深度传感能力。



普通的双目测距与结构光双目测距相比:
 

    普通的双目测距中,光源是环境光或者白光这种没有经过编码的光源,图像识别完全取决于被拍摄的物体本身的特征点,因此匹配一直是双目的一个难点;而结构光测距的不同在于对投射光源进行了编码或者说是特征化。这样,拍摄的是被编码的光源投影到物体上被物体表面的深度调制过的图像,因为结构光光源带有很多特征点或者编码,因此提供了很多的匹配角点或者直接的码字,可以很方便的进行特征点的匹配(换句话说结构光主动提供了很多特征点进行匹配或者直接提供码字,而不再需要使用被摄物体本身具有的特征点,因此可以提供更好的匹配结果。
 
  匹配上的差别:
  a. 双目使用的是物体本身的特征点,而结构光使用的是光源主动提供的特征点或者直接的
码字
  b. 另外一个差别在于由于拍摄物体多种多样,每一次双目匹配都面对不同的图像
都需要重新提取特征点;而结构光投影的是相同的图案特征点是固定的,不需要根据场景的变化而有变化,降低了匹配的难度。

参考文献:

http://blog.csdn.net/android_lee/article/details/18617177

http://www.cnblogs.com/Crazy-Dog123/articles/5043864.html

http://blog.csdn.net/pinbodexiaozhu/article/details/45585361

http://blog.sina.com.cn/s/blog_80ce3a550100wg5j.html

http://book.2cto.com/201211/9203.html

http://www.cnblogs.com/shouhouxiaomuwu/archive/2013/10/26/3389589.html

http://blog.csdn.net/app_12062011/article/details/52486299 (结构光原理)

 

阅读更多
个人分类: intel realsense
想对作者说点什么? 我来说一句

单目摄像机提取物体深度信息

2013年08月15日 40.39MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭