双目视觉——立体匹配

参考博客:

  • 基于OpenCV的双目测距:https://www.cnblogs.com/daihengchen/p/5492729.html
  • 双目立体匹配获取深度图:https://www.cnblogs.com/riddick/p/8486223.html
  • 基于Opencv的立体匹配算法+ELAS:https://blog.csdn.net/chuhang_zhqr/article/details/53495030

视差

双目视觉——立体匹配_第1张图片

双目视觉——立体匹配_第2张图片

双目视觉——立体匹配_第3张图片

第一幅图是三维世界的一个点在两个相机的成像,这两个在各自相机的相对位置不可能是一样的,而这种位置的差别,也正是我们眼睛区别3D和2D的关键。将右边的摄像机投影到左边,怎么做呢?因为他的坐标和左边相机的左边相距Tx(标定测出来的外参数),所以它相当于在左边的相机对三维世界内的(x-tx,y,z)进行投影,所以这时候,一个完美的形似三角形就出来,这里视差就是d=x-x‘。

双目视觉——立体匹配_第4张图片

立体匹配

我们知道双目测距的时候两个相机需要平行放置,但事实上这个是很难做到的,所以就需要立体校正得到两个相机之间的旋转平移矩阵,也就是外参数矩阵。  立体匹配是立体视觉研究中的关键部分。其目标是在两个或多个视点中匹配相应像素点,计算视差。通过建立一个能量代价函数,对其最小化来估计像素点的视差,求得深度。

双目视觉——立体匹配_第5张图片

OpenCV中提供了很多的立体匹配算法,类似于局部的BM,全局的SGBM等等,速度越快的效果越差,推荐使用SGBM。这里我想提一下的是为什么做立体匹配有用,原因就是极线约束,左摄像机上的一个点,对应三维空间上的一个点,当我们要找这个点在右边的投影点时,有必要把这个图像都遍历一边么,当然不用。

 双目视觉——立体匹配_第6张图片

             如上图,显然,PL对应的P这个点一定在一条极线上,只要在这条线上找就行了,更明显的是下面这个图:

双目视觉——立体匹配_第7张图片

双目校正的目的就是为了得到两个平行的摄像头,所以当程序运行完毕以后,它会把两幅图像显示出来,并作出一系列的平行线,这样你会看到线上的点大致是呈对应关系,左边的角点对应右边的交点,所以,经过匹配和校正后,是对应的。

你可能感兴趣的:(计算机视觉)