matlab 双目 景深,双照相机景深分析的思路

一、大致思路

输入:两个平行相机拍摄到的照片

Step1、照片预处理,包括照片校正,剔除左右相片曝光相差太大的照片,用它们做景深估计可能会出错

Step2、使用MATLAB相机标定工具箱先后进行单相机标定和双相机标定,确定三个相机的内参数,以及相对位置关系

Step3、校准左右相机的图片,保证对每一组照片,左右相机中物体具有相同高度

Step4、使用MATLAB双目视觉工具箱,做景深估计,进而得到图片中不同位置处的场景深度

二、照片的标定结果

通过单相机标定,确定内参

通过双目标定,确定两个相机是否平行,以及它们之间的距离。

左上相机和右上相机之间的位置关系

旋转向量        om = [ 0.00604   0.00170  0.00245 ]

平移向量        T = [ -0.79953   -0.00456  -0.00976 ]以米为单位

说明左上相机和右上相机可以认为是平行且等高度的

三、校准左右相机的图片

要达到双目测距的要求,必须保证对每一组照片,左右相机中物体具有相同高度

需要说明的是,两个相机必须是等高且平行的,如果不是,需要做校准操作。

比如原图

《matlab 双目 景深,双照相机景深分析的思路》

图 1

校准为

《matlab 双目 景深,双照相机景深分析的思路》

图 2

四、景深估计

4.1 双目测距的基本原理

《matlab 双目 景深,双照相机景深分析的思路》

图 3

4.2 景深的计算

《matlab 双目 景深,双照相机景深分析的思路》

四、计算效果的演示

根据上面的原理,计算得到的景深图。

《matlab 双目 景深,双照相机景深分析的思路》

图 4是演示程序运行的效果

图 4

图 5是深度图的一个截图,注意深度图是3维的,记录了照片中大部分像素点的深度信息。

《matlab 双目 景深,双照相机景深分析的思路》

图 5

图5中有一辆车,把它放大后截图,如图6.

《matlab 双目 景深,双照相机景深分析的思路》

图 6

这辆小车,测出他的头和尾的距离是2.8米,这和实际生活经验吻合,因为小轿车一般长度3到4米,而这辆车属于迷你型,长度自然短一点。

五、进一步讨论

Matlab双目视觉工具箱的计算思路的说明

Matlab双目视觉工具箱的基本思想,是对左右相机的图片做块匹配,从而确定左右图片之间的映射关系,由于在“校准左右相机的图片”这一步时,已经保证了相同的物体在左右照片中一定位于同一行,因此只需要判断它们所处的列之间的关系就可以了。

具体的做法,是对右图的每一个像素点,提取一个围绕它的7*7像素块,然后在左图的同一行中寻找匹配块。为了优化搜索的效率,可以假设匹配块的列与右图中的待匹配块的距离在15个像素以内。左右图中匹配块之间的距离,也就是估算景深时所需要的视差disparity(公式(2))。据此可以做景深估算。

图7是工具箱的帮助中给出的某次块匹配的效果。

《matlab 双目 景深,双照相机景深分析的思路》

图7

为了改善计算效率,提升效果,工具箱中又做了金字塔分层计算、动态优化等。

需要说明的是,这个基于匹配来确定视差进而计算景深的原理决定了两种情形下,会出现漏洞区域:

(1)视差为0。如图7(a),(b)所示,左右相机拍摄的挂白板的墙壁重合在一起。

(2)视差虽然不为0,但由于场景几乎没有纹理,所以匹配的时候,误以为视差为0。如图7(c),(d)所示,天空是纯白色,无法准确匹配,所以这部分的景深也是无法计算的。

从景深的计算公式(公式(2)(3))我们可以看到,当视差为0,景深的估算没有意义。

《matlab 双目 景深,双照相机景深分析的思路》

目前方法面临的几个瓶颈

1、计算能力欠缺,只能处理缩小16倍以后的图,去除绘图等冗余操作后代码有多少优化的空间。

2、目前还做不到对图像中每一个位置都计算出深度,计算出来的部分也存在漏洞,比如图6中的车就破了洞。必须进一步优化效果,才能达到进一步应用的需要。

转载请注明

来自  梁登的技术博客

http://blog.csdn.net/ldily110

    原文作者:weixin_35969257
    原文地址: https://blog.csdn.net/weixin_35969257/article/details/116145062
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞