一、大致思路

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

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

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

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

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

二、照片的标定结果

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

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

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

旋转向量        om = [ 0.00604   0.00170  0.00245 ]

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

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

三、校准左右相机的图片

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

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

比如原图

图 1

校准为

图 2

四、景深估计

4.1 双目测距的基本原理

图 3

4.2 景深的计算

四、计算效果的演示

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

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

图 4

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

图 5

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

图 6

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

五、进一步讨论

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

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

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

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

图7

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

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

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

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

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

目前方法面临的几个瓶颈

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

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

转载请注明

来自  梁登的技术博客

http://blog.csdn.net/ldily110

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

  1. 景深决定照相机什么特性_相机大百科 从景深公式讲解虚化的奥秘

    怎么才能拍出背景虚化的照片,相信这个问题是无数初学者的向往,甚至在很多人的心中漂亮的虚化就代表了一张照片以及一颗镜头的品质.不过对于初学者来说,他们还有一个很大的疑问,那就是怎样才能创造出虚化效果,而 ...

  2. matlab光顺拐点,基于MATLAB的最大误差双圆弧逼近曲线的算法及实现.pdf

    基于MATLAB的最大误差双圆弧逼近曲线的算法及实现.pdf 第31卷第6期 基于MⅢB的最大误差双圆弧逼近曲线的算法及实现 文章编号:1004-2539120町]06一唧一∞ 基于MAⅡ.AB的最大 ...

  3. matlab实现单(双)极性,Matlab实现单(双)极性(不)归零码

    Matlab实现单(双)极性(不)归零码 内容大纲 Matlab实现单极性不归零波形(NRZ),0 1 幅值 Matlab实现单极性归零波形(RZ),0 1 幅值 Matlab实现双极性不归零波形,- ...

  4. 聚类分析 | MATLAB实现k-Means(k均值聚类)分析

    目录 聚类分析 | MATLAB实现k-Means(k均值聚类)分析 k-均值聚类简介 相关描述 程序设计 学习小结 参考资料 致谢 聚类分析 | MATLAB实现k-Means(k均值聚类)分析 k ...

  5. 景深概念以及景深的计算公式

    在了解景深的概念时,用图文结合的方式更容易理解,那么我们先来了解几个相关的概念: 1.焦点(focus) 与光轴平行的光线射入凸透镜时,理想的镜头应该是所有的光线聚集在一点后,再以锥状的扩散开来,这个 ...

  6. matlab 课程设计循环码性能分析,matlab课程设计--循环码的性能分析

    matlab课程设计--循环码的性能分析 课程设计任务书 学生姓名学生姓名 专业班级专业班级 指导教师指导教师 工作单位工作单位 题目题目 循环码的性能分析 初始条件初始条件 MATLAB,速率为 1 ...

  7. 基于文本和语音的双模态情感分析

    作者 | 陆昱博士 追一科技 来源 | DataFunTalk 今天和大家分享的主题是基于文本和语音的双模态情感分析.大家可能会从自然语言处理的角度认为情感分析已经做得比较成熟了,缺少进一步研究的方向 ...

  8. Matlab plotyy画双纵坐标图实例

    转载自:http://blog.sina.com.cn/s/blog_49d955150100lxoe.html Matlab plotyy画双纵坐标图实例 x = 0:0.01:20; y1 = 2 ...

  9. Matlab实现 线性动态电路可视化分析

    Matlab实现 线性动态电路可视化分析 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 编程思路 这个编程总体采用面向过程的编程思想,将人在 ...

最新文章

  1. Redis为什么又引入了多线程?单线程不香了?
  2. BTC引领市场多头情绪爆发 BCH筑底完成望成上涨新风口
  3. c语言职专试题及答案,中等职业学校计算机应用专业c语言编程基础科试卷及答案.doc...
  4. 深度神经网络的分布式训练概述:常用方法和技巧全面总结
  5. Java9发布回顾Java 8的十大新特性
  6. Python多任务(2.线程的概念以及组成(创建线程的两种方式))
  7. Android手机隐藏命令大全
  8. 高性能对象存储MinIO学习
  9. 【Touchinput 】创建一个输入法(19)
  10. Redis 集群密码配置
  11. java.io.IOException: Too many open files错误解决方案
  12. c jni 调用java_JNI NDK (AndroidStudio+CMake )实现C C++调用Java代码流程
  13. 几个清华和交大学霸的公众号,值得学习
  14. 《OpenGL超级宝典》第一章:3D图形和OpenGL简介
  15. 台式计算机主板,台式电脑主板开机过程详解
  16. java中二维数组Array
  17. K8s 集群节点在线率达到 99.9% 以上,扩容效率提升 50%,我们做了这 3 个深度改造...
  18. uiview 渐变_UIView的背景渐变
  19. Greenfoot简介与使用入门
  20. win10计算机的时间格式,win10系统更改excel时间和日期的格式的图文步骤

热门文章

  1. C语言——Hello World
  2. 用springboot jpa 报:No property yer found for type OrderMaster错
  3. 没钱去巴西? 谷歌地图街景带你游览比赛场馆
  4. 用python统计你的文章里每个英文单词的数量
  5. 平面设计师都在用的素材网站(素材灵感一步到位)
  6. firefox同步mac和win
  7. 省市区三级行政区代码(包含港澳台)sql2
  8. html右侧有白边,html5有白边解决办法
  9. 计算机配置好坏怎么看,怎么看电脑配置好坏
  10. 在CentOS7上运行KVM虚拟机