双目视觉(一)双目视觉系统

1.说说单目相机

在单目视觉中,是无法确定一个物体的真实大小,它可能很大很远,可能很近很小,例如上图中,P点和Q点为真实世界的3维点,但是它们在相机平面上都投影到了同一个点,这也就无法确定一个物体的真实尺寸,也就是所谓的失去了尺度信息。

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

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

但是实际上,相机毕竟不是人眼,它只会傻傻的按照人的操作拍照,不会学习和思考。下图从物理原理上展示了为什么单目相机不能测量深度值而双目可以的原因。我们看到红色线条上三个不同远近的黑色的点在下方相机上投影在同一个位置,因此单目相机无法分辨成的像到底是远的那个点还是近的那个点,但是它们在上方相机的投影却位于三个不同位置,因此通过两个相机的观察可以确定到底是哪一个点。

 

2.如何确定尺度呢?

由于仅通过单张图像无法获得像素的尺度信息,因此我们就需要通过获得不同视角的图像,使用三角测量的方法来估计深度

t时刻:

t+1时刻:

 将多个时刻的图像合在一起:

将相机模型(针孔模型)加入,简化得到如下的示意图,而这满足极线几何约束(不做论述)

 3.双目相机

上面讲了如何获得深度信息,可以通过获得不同视角的图像,然后通过三角测量计算深度,那么添加另外一个相机,然后在不同的位置拍摄同一个点,这样就和同一个相机在不同视角获得多幅图像类似了。

 注:在左相机相机平面上的,投影到右相机平面为一条直线,这也就是极线约束,本质上是点和线的映射关系。

那么如果我们能在右相机平面找到对应的点,我们就可以获得深度值,进一步计算出物体的3维点信息。

 通常的双目相机是这样的:(两个相机平面不在同一水平面上),这是就需要我们进行极线矫正使两个相机平面位于同一水平面上。

 矫正之后的双目相机:

注:(好处)在矫正后的双目相机,我们搜索对应的匹配点的搜索空间也从2维变成了1维。

对于矫正后的标准相机模型(如下图),我们可以使用简单的相似三角形的原理,来计算其深度值。

 如果我们知道了xl和xr的值,那么就可以计算出深度值Z,这时我们Z值知道了,可以通过如下公式,计算X,Y(3维点)

4.双目匹配

 现在已知双目相机的左图和右图,而且已知左图的点(红色)pl = (xl; yl),那么怎么在右图找到匹配点pr = (xr; yr)
呢?

step1:由于矫正后的双目相机的左图和右图的点,符合极线约束,即yr = yl,那么我们可以通过极线来缩减搜索区域。

 

 step2:在极线上我们如何去匹配,发现这个点是否是我们要找的点呢?

我们可以通过扫描极线,比较右图中的块和左图中的块,找到和左图最相似的那个就OK了。

 step3:如何判断哪个块最相似呢?

可以通过计算极线上的每个点匹配代价。

step4:得到匹配点后,通过匹配点的坐标得到视差d,然后根据视差值d,焦距f,j基线b,进一步计算深度值d

双目视觉系统:

发布了44 篇原创文章 · 获赞 26 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/He3he3he/article/details/101053457