我的AI之路(36)--使用深度相机

      2019年一年内使用过三款深度相机用于机器人基于视觉的目标识别和测距,分别是小觅D1000-IR-120、钜芯、Intel Realsense D435(i) (D435i相对于D435来说增加了IMU功能模块),时间久了容易忘记技术细节,现予以回顾记录备忘。

      目标识别当然是基于传统的OpenCV图像处理技术来实现或者使用深度学习网络模型来实现,对于简单的识别(目标和背景都非常单一)并且运行环境是嵌入式环境硬件资源非常有限,可以考虑使用OpenCV来实现即可,对于少复杂的物体识别,尤其背景复制干扰多的还是得使用深度学习模型,甚至还得辅助以其他手段确认,例如红外、超声等(对于测量目标是刚体的并且不关注其形状和不需要识记,并且成本可以接受的话,直接使用激光测距当然是最好最可靠的途径)。 有时受限于要识别的目标是非刚体非固定轮廓外形等特殊性质,例如烟火雾之类的东西,只有使用视觉识别辅助以红外等技术途径,这时可使用深度摄像头拍摄图像交给深度学习网络模型识别出目标,并根据目标在图像中的位置,读取对应的深度图数据获得目标的距离,这是大致的技术思路,具体的实现细节涉及商业秘密不便多说。

     在此通过三篇文章只介绍这三款深度相机的使用,三款深度相机的彩色和深度图的分辨率都支持常用的1280x720(分辨率太小的话都知道图片模糊不清识别效果肯定差,分辨率太大的话图片在进行模型训练前最好根据图像本身情况和要识别的目标的情况先做合适预处理,不然可能会有问题,训练效果差),对于三款深度相机的测距范围,相机各自官方给出的数据是:

     小觅D1000-IR-120: 0.32-7 m

     钜芯双目: 0.7-100 m

     Intel Realsense D435(i): 0.1-10 m

      无意对任何一款相机做夸大或贬损,只就本人实际使用的效果来说,在无环境光等干扰因素、可见度适中的前提下,感觉Intel Realsense D435(i)大约在0.5-10m范围内测距比较准确,钜芯双目相机在1.5-100m范围内测距算准确度可以接受,小觅D1000-IR-120在0.6-7m范围内测距表现不大稳定,有时算准确有时测距值离实际值差距较大。

       深度相机的测距原理其实很简单,利用相似三角形的知识计算即可,还没找到合适的数学画图软件,先借用网上的一张图:

     

    上图中的 d=xl-xr (l,r为上标)即为双目相机测距原理中说的视差disparity,f为相机焦距,T为双目相机的基线长,Z为要测的目标的距离,利用相似三角形的边长比例关系,有 (T-d)/(Z-f)=T/Z,化简可得

       Z=Tf/d

     这里d为何是xl-xr,可能一下看不明白吧,其实这里的xl和xr不是长度(绝对值),而是目标物体在左右相机里的两个成像点Pl和Pr相对于各自坐标系的X轴方向的坐标值,从图上可见Pl落在左边相机的坐标系(Ol为原点)的YZ平面的右侧,所以xl为正值,Pr则落在右边相机的坐标系统(Or为原点)的YZ平面的左侧,xr为负值,简单地说,就是Pl落在左边相机成像图片的右半边里,Pr落在右边相机的成像图片的左半边里,如果把这两张图叠放到一起,两点之间的视差d(Pl和Pr之间的距离)自然等于 xl -xr咯。

     深度相机的测距原理其实很简单吧,有时计算原理很简单,但是用数学公式一表示就弄得复杂了,深度学习里的一些知识点也是这样,说原理其实不复杂,用数学公式一写,就一长串多种符号,让人第一次看到时有点懵以为多高大上的深奥理论。其实我们直接使用深度相机而不是普通双目相机来测距的话,也不用理解这个原理,因为一般相机的内部计算芯片输出深度图数据时都给你算好了,这也是使用深度相机的好处,当然你自己也可以使用不带计算芯片的普通双目相机成像后来自己计算距离,计算是需要你自己用代码实现,占用了你的主板的资源,而是计算十分频繁,肯定要影响整个系统的性能了。

     在使用深度相机时,深度相机输出彩色图同时输出与之相匹的深度图,多数相机直接给出个深度图上各坐标点上的深度(距离)值,也有的只给出视差值d,需要你自己计算一下深度值,比如钜芯相机就是这样。

     后面用三篇文章分别介绍这三款相机的使用。

发布了61 篇原创文章 · 获赞 90 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/XCCCCZ/article/details/103791863