计算机视觉——双目立体视觉与窗口匹配方法

1. 双目立体视觉

一些相关概念

  • 双目立体视觉(Binocular Stereo Vision是机器视觉的一种重要形式,它是基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像,通过计算图像对应点间的位置偏差,来获取物体三维几何信息的方法。

  • 为什么双目相机才能得到深度
    下图从物理原理上展示了为什么单目相机不能测量深度值而双目可以的原因。我们看到红色线条上三个不同远近的黑色的点在下方相机上投影在同一个位置,因此单目相机无法分辨成的像到底是远的那个点还是近的那个点,但是它们在上方相机的投影却位于三个不同位置,因此通过两个相机的观察可以确定到底是哪一个点。
    在这里插入图片描述

  • 提到双目视觉就不得不提视差图:双目立体视觉融合两只眼睛获得的图像并观察它们之间的差别,使我们可以获得明显的深度感,建立特征间的对应关系,将同一空间物理点在不同图像中的映像点对应起来,这个差别,我们称作视差(Disparity)图像。
    (对于视差的理解自己可以体验一下:将手指头放在离眼睛不同距离的位置,并轮换睁、闭左右眼,可以发现手指在不同距离的位置,视觉差也不同,且距离越近,视差越大。)

  • 这里再解释一下视差:视差是指在两个摄像机图像之间的像素位置的差异。假设立体视觉相机中的左图像在位置(1,30)具有像素,并且相同的像素在右图像中的位置(4,30)存在,视差值或差值为(4-1)=3。视差值与深度成反比。

  • 深度图:深度图像也叫距离影像,是指将从图像采集器到场景中各点的距离(深度)值作为像素值的图像。获取方法有:激光雷达深度成像法、计算机立体视觉成像、坐标测量机法、莫尔条纹法、结构光法。

  • 点云:当一束激光照射到物体表面时,所反射的激光会携带方位、距离等信息。若将激光束按照某种轨迹进行扫描,便会边扫描边记录到反射的激光点信息,由于扫描极为精细,则能够得到大量的激光点,因而就可形成激光点云。

  • 深度图与点云的区别: 深度图像经过坐标转换可以计算为点云数据;有规则及必要信息的点云数据可以反算为深度图像。 两者在一定条件下是可以相互转化的,之前的博客里,有使用PCL库实现过点云提取深度图,当然给出相机参数也是可以由深度图转为点云的。截图一个深度图:
    在这里插入图片描述
    所以深度与视差的关系如下
    在这里插入图片描述

2. 窗口匹配方法

  • 理想双目相机成像模型:假设左右两个相机位于同一平面(光轴平行),且相机参数(如焦距f)一致。那么深度值的推导原理和公式如下:(相似三角形)在这里插入图片描述
    理想情况下双目立体视觉相机深度值计算原理
    根据上述推导,空间点P离相机的距离(深度) z = f ∗ b / d z=f*b/d z=fb/d,可以发现如果要计算深度 z z z,必须要知道:
    1)相机焦距 f f f,左右相机基线 b b b。这些参数可以通过先验信息或者相机标定得到。
    2)视差 d d d,需要知道左相机的每个像素点 ( x l , y l ) (x_l, y_l) (xl,yl)和右相机中对应点 ( x r , y r ) (x_r, y_r) (xr,yr)的对应关系。这是双目视觉的核心问题

    接下来要用到上篇博客写到的极线约束
    但是要注意:
    上一篇通过实验发现平移拍摄时需要(两相机共面且光轴平行,参数相 同)非常理想,这个要求太高了。C1,C2不在同一直线上的情况非常常见。这时候就需要极线较正
    下图为非理性情况下的极线(缺点:进行逐点搜索效率非常低)在这里插入图片描述

  • 极线校正(分别通过对两张图片用单应矩阵变换得到):目的就是把两个不同方向的图像平面(下图中灰色平面)重新投影到同一个平面且光轴互相平行(下图中黄色平面),这样就可以用前面理想情况下的模型了,两个相机的极线也变成水平的了。
    在这里插入图片描述
    经过极线矫正后,左图中的像素点只需要沿着水平的极线方向搜索对应点就可以了。
    从下图中可以看到三个点对应的视差
    红色双箭头线段表示视差:越远的物体视差越小,越近的物体视差越大,这和我们的常识是一致的。
    在这里插入图片描述
    图片来自于相机原理

  • 上面讲到的对于左图的一个点,沿着它在右图中水平极线方向寻找和它最匹配的像素点,说起来简单,实际操作起来却不容易。这是因为上述都是理想情况下的假设。实际进行像素点匹配的时候会发现问题:
    1)实际上要保证两个相机完全共面且参数一致是非常困难的,而且计算过程中也会产生误差累积,因此对于左图的一个点,其在右图的对应点不一定恰好在极线上。但是应该是在极线附近,所以搜索范围需要适当放宽。
    2)单个像素点进行比较鲁棒性很差,很容易受到光照变化和视角不同的影响。

上述问题的解决办法就是:使用窗口来进行匹配
使用窗口进行匹配。对于左图中的一个像素点(左图中红色方框中心),在右图中从左到右用一个同尺寸的窗口内的像素和它计算相似程度,相似度的度量有很多种方法,比如 误差平方和法(Sum of Squared Differences,简称SSD),左右图中两个窗口越相似,SSD越小。SSD值最小的位置对应的像素点就是最佳的匹配结果。这里详细使用的是NCC方法进行实验。
在这里插入图片描述

3.NCC(归一化相关性)

  • 归一化相关性,normalization cross-correlation,因此简称NCC
    NCC,就是用于归一化待匹配目标之间的相关程度,注意这里比较的是原始像素
    通过在待匹配像素位置 p ( p x , p y ) p(p_x,p_y) p(pxpy)构建 n ∗ n n*n nn邻域匹配窗口,与目标像素位置 p ′ ( p x + d

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值