本帖最后由 乐米hmf 于 2020-12-3 21:28 编辑
1 引言
1.1 双目测距原理及算法流程
正常人可以通过两只眼睛,通过在人的大脑中3D成像,可以大致的估算出前方目标物体的距离,这也就是双目测距的基本原理,利用安放在固定位置上的两个摄像头,所拍摄出的图像的视差,来计算出目标物体的距离。图一为我所使用的双目摄像头的图片。
图1
图2,为整个双目测距系统的算法流程。准备工作还包括,在PC端利用MATLAB,完成相机标定,将标定好的内参数矩阵和重投影矩阵,导入程序内,用于后续的立体校正以及三角测量。当相机获取图像后,左右相机的图片分别利用MobileNetv3-ssdlite完成目标检测,并截取带有目标的图片;对图像中可能存在的多目标,利用dHash完成多目标图片对匹配,也就是将各个目标在左右相机中的图片配对;将图片对完成特征点检测与匹配;将匹配好的特征点校正,再利用三角测量法完成距离计算。
图2
1.2 算法简介
1.2.1 MobileNetv3-ssdlite
MobileNetv3是一种基于深度可分离卷积的分类网络,适于在嵌入式平台上使用。能够以较快的速度完成较高精度的检测。SSD利用多尺度特征图进行目标检测,对较小的物体的检测能力,明显优于同类型的YOLO模型。MobileNetv3- SSDlite利用MobileNetv3作为block,结合SSD目标检测网络结构,将MobilenetV3抽出二层特征层+另外补充的4层卷积层输出的特征,进行分类和回归。图3,为MobileNetv3的网络结构,图4为SSD的网络结构。
图3
图4
1.2.2 dHash算法
感知哈希算法是一类哈希算法的总称,用于生成每张图片的指纹信息,比较不同图像的相似性。感知哈希算法包括均值哈希(aHash)、感知哈希(pHash)和差异值哈希(dHash)。本文选择dHash方法,对提取出的目标物图像计算出指纹信息,再计算汉明距离,通过汉明距离的大小判断两张图片中同一物体的相似性。
1.2.3 特征匹配
ORB 是 Oriented Fast and Rotated Brief 的简称,可以用来对图像中的关键点快速创建特征向量,这些特征向量可以用来识别图像中的对象。经过ORB提取特征点后,使用knn最近邻搜索匹配,即分别计算两张图片的每个点之间的距离,找到距离最小的点,作为匹配点。经过最近邻匹配后,会有很多的误匹配点,再利用RANSAC方法去除误匹配点。
1.2.4 立体校正
三角测量的计算公式是基于理想状态下共面且共基线的相机图片,进行推导的,而现实下的相机,会有各种各样的畸变,造成两张图片并不会共面。此时,需要将双目相机拍摄的两张图片映射到理想的共面且共基线下。常用的为,Bouguet算法:通过坐标系变换,来完成图片平面与世界相机平面的转化,此时还需要之前相机标定的内参数矩阵和重投影矩阵用于计算。图5,图6分别为校正前后示意图。
图5 校正前不共面
图6 校正后共面
1.2.4 三角测量
如图7为三角测量的原理,就是个相似三角形原理。P点是待测量点,OR、OT为左右相机的光学中心,p和p’为P在左右相机上的成像点,XR、XT为图像上的横坐标值,B为相机间距,f相机焦距,Z为待求的距离。Z = fB /(XR - XT)。
图7
2 实验结果
如图8,MobileNetv3- SSDlite识别结果;图9,立体校正后的图像及在目标上识别的特征点;图10,原图及目标上的特征点;图11,截取目标后的图片与特征点。图12,为测量值与实际值对应图表,这里看到当距离在750MM的时候,与其他的值相比较,误差较大,失去线性关系,这可能是因为距离过近带来的误差过大造成的影响。
图8
图9
图10
图11
图12
3 总结
至此,此次的试用,就结束了,非常感谢电路城论坛以及英蓓特能够给我这次机会,试用到这样一块完美的板子。在使用英蓓特I.MX8M MaaxBoard开发板的过程中,由于板子自身带来的问题,没有一个,足以说明一件事,这个板子的完美性,以及适配的系统的完美性。过程中的问题,主要还是在于我对debian系统的不熟悉,对linux编程的陌生。如果非要说个问题的话,那就只有,这个板子的散热不好,建议在散热片上装个小风扇。最后来一张,板子与双目相机的合照。
|