基于RCF边缘检测和双目视觉的箱体体积测量算法
2018-01-18王玉伟尹颜朋
王玉伟,尹颜朋
(四川大学计算机学院,成都 610065)
0 引言
快递箱的体积是快递行业收取运费的一项重要指标,而如何智能、快速、精确、低成本、高效率地获取快递箱的体积是快递行业需要解决的问题。目前,对快递箱等规则物体的体积测量方法[1]主要有:人工测量法、仪器测量法[3]、通过三维建模获取点云并计算体积、基于双目立体视觉的体积测量[1-2]等方法。以上方法要么测量效率低、准确性差,要么成本高、不宜推广。
针对以上问题,提出了基于RCF边缘检测[6]和双目视觉的箱体体积测量算法,该方法的核心思想如图1所示:首先通过双目摄像机标定,对图像进行畸变矫正;然后,采集图像数据训练好RCF网络模型,把用双目图像传感器得到的图像进行边缘的提取并获得边缘二值图;其次,对边缘二值图进行细化、轮廓提取、直线检测与拟合、边缘聚类等预处理,准确定位出目标箱体的边缘与顶点;最后,通过双目立体视觉测距的方法,计算箱体同名顶点的视差、深度,便可计算出箱体的长宽高与体积。
1 双目标定
双目标定首先要获取左右相机的内外参数,然后对左右两幅图像进行立体校准和对齐。只有获得准确的内参与外参,才可用于后面的双目测距。实际情况下,相机的主点(cx,cy)并不位于图像中心,两者存在一定的偏差,而且X方向的等效焦距 fx和Y方向的等效焦距 fy也不相等,所以还需要求解相机的畸变参数;设畸变坐标为(x,y),矫正后坐标为(x`,y`),则畸变矫正的数学模型为:
其中,k1、k2、k3为切向畸变参数,p1、p2为竞径向畸变参数;
因此,为了得到精确的标定参数,选择平面棋盘作为标定物,采用ROS系统提供的标定方法进行双目立体视觉的标定,该标定方法可快速准确地得到相机参数。有了精确的参数,才可以保证立体测距有比较好的效果。
2 RCF边缘检测
为了定位出目标物体,需要得到目标物体的边缘与轮廓信息。边缘检测是图像处理和计算机视觉中的基本问题,图像边缘检测能够大幅减少数据量,在保留重要结构属性的同时,剔除弱相关信息。近些年,有很多基于CNN边缘检测的方法,然而由于不同卷积层之间的信息是可以互补的,传统方法只使用了Pooling前最后一个卷积层的信息,信息利用不充分。而本文采用的是Ming-Ming Cheng副教授2017年在CVPR上发表的文章[6]中提到的RCF边缘检测方法,该方法充分利用了所有卷积层的信息,而不是池化之前的最后一层,使得检测结果有了很大改善,用训练好的RCF网络模型提取的轮廓二值图如图2所示。
3 定位箱体的边缘与顶点
如果想要在图中定位出箱体的边缘与顶点,仅仅利用RCF网络模型训练出的边缘二值图远远不够,需要对边缘二值图做细化、提取最大轮廓、边缘分类、直线拟合等预处理。
3.1 细化
图像细化,就是指二值图像的骨架化的一种操作运算,经过一层层的剥离,从原来图中去掉一些点,但仍要保持原来的形状。细化算法一定要满足:(1)保持原图的基本形状;(2)减少笔画相交处的畸变;(3)细化结果是原图像的中心线;(4)细化的快速性和迭代次数少。为了达到比较好的细化结果,本文采用了Zhang等人1984年发表文章[4]中提到的细化算法。
3.2 提取最大轮廓
由于将要测量箱体体积的环境不确定,在RCF边缘检测的时候可能有外部因素的干扰,导致边缘二值图图中不仅有箱体的边缘,而且存在不确定的物体边缘;又因为要测量的箱体占了图像的主体部分,因此,需要提取边缘二值图的最大轮廓图,就可以得到箱体的边缘;本文通过算法实现提取的最大轮廓,效果如图3所示。
图3 由Figure 2右边提取最大轮廓得到的结果图
3.3 边缘分类
通过以上算法,可以得到准确的箱体边缘二值图,但要想定位出箱体的边缘与顶点,我们需要把边缘二值图中的箱体边缘进行分类,让左右图中箱体的边缘一一对应;本文,首先利用LSD[5]直线检测算法,提取出箱体边缘的直线;然后,把这些检测到的直线利用K-means聚类算法,按照直线斜率以及位置关系进行分类。
3.4 RANSAC直线拟合
在边缘分类以后,由于箱体的每一类边缘都是由多条直线组成,因此我们需要把这些直线拟合成一条直线。而本文采用的是RANSAC直线拟合算法,该算法的主要思想是每一次选取两点,拟合一条直线,不仅要保证该条直线的内点数达到总数的一定比例,而且该直线的斜率与所有直线的平均斜率接近,并且本文采用的是自适应平均斜率;假设每条直线的斜率为gi,每条直线的长度为li,则自适应平均斜率为:
图2 左边为双目相机拍摄的原始图像,右边为RCF网络模型提取的边缘二值图
然后,按照此步骤迭代K次,一旦拟合的直线数的内点达到规定的值,就可以结束迭代;否则,就按迭代K次中得到的最大内点数的那条直线为想要的直线。
3.5 定位边缘与顶点
以上所得到的都是在边缘二值图中得到的结果,想要在原图中定位出边缘与顶点则需要进一步处理;由于边缘二值图和原图是对应关系,因此,首先在原图进行LSD直线检测,再找到与边缘二值图中边缘直线相似的直线,即斜率和位置相近,然后再次进行RANSAC直线拟合,就可得到原图的边缘,最后利用直线相交得到箱体的顶点;效果图如图4所示:
图4 在原图中定位的边缘与顶点效果图
4 双目测距与计算体积
双目立体视觉测距是利用两个摄像机对同一场景拍摄的左右图像对进行立体匹配,获得包含场景三维信息的视差图,根据视差图和相机参数,计算各个匹配点在场景中的深度信息。假设左右相机的像平面位于同一平面上,并且两幅图像是行对准的,那么对于三维空间中的一个点P,其在左右两幅图像中的行坐标分别为 xl、xr,则有:
其中,Z为三维空间点X与摄像机之间的距离,f为摄像机的焦距,B为两幅摄像机的中心距,xl-xr,定义为视差值。为了得到场景的三维信息,还需要计算空间点P的X坐标与Y坐标,假设x、y为P对应的图像坐标,相机的主点为(cx,cy),X方向的等效焦距和Y方向的等效焦距分别为 fx、fy,则有:
由于左右摄像机拍摄的是同一场景,那么左右图像对中箱体的顶点存在一一对应的关系,再根据双目立体视觉测距的原理,就可以计算得到箱体各个顶点的三维信息;最后根据两点之间的距离计算公式,就可得到箱体在三维空间中的长宽高。假设V表示箱体体积,则有V=l*w*h,其中l、w、h分别为箱体的长宽高。
5 实验结果分析
本文分别对7个不同的箱体进行了实验,具体的测量结果及误差分析如图5所示:
图5 实验的测量结果与误差分析
本文算法Linux环境以及双目摄像机提出的一套箱体体积测量。实验结果表明,与传统方法相比,提出的箱体体积测量算法,可以更智能、更快速、更准确地计算出箱体体积,但仍有改进空间。
[1]Gao R X,Wang J M.Volume Measurement of Coal based on Binocular Stereo Vision[J].Computer Systems&Applications,2014.
[2]Liu Z,Chen T.Distance Measurement System Based on Binocular Stereo Vision[C].International Joint Conference on Artificial Intelligence.IEEE,2009:456-459.
[3]Mao J,Lou X,Weixian L I,et al.Binocular 3D Volume Measurement System Based on Line-Structured Light[J].Optical Technique,2016,42(1).
[4]Zhang T Y.A Fast Parallel Algorithm for Thinning Digital Patterns[J].Communications of the Acm,1984,27(3):236-239.
[5]Grompone Von Gioi R1,Jakubowicz J.A Fast Line Segment Detector with a False Detection Control[J].IEEE Trans Pattern Anal Mach Intell,2010 Apr;32(4):722-32.
[6]Liu Y,Cheng M M,et al.Richer Convolutional Features for Edge Detection[J].CVPR,2017.