李玲玲1,王正勇1,卿粼波1,何海波2
(1.四川大学 电子信息学院,四川 成都610065;2.成都西图科技有限公司, 四川 成都610000)
摘要:为了满足现实生活中对物体体积实时测量的需求,提出了一套基于Kinect 2.0深度图像处理的快速体积测量方案。首先,使用Kinect 2.0 深度传感器获得深度图像及对应的点云数据矩阵,并对深度图像进行增强、二值化、目标提取等预处理,定位出目标物体。然后,通过像素点的统计和点云数据的处理得到目标物体的面积、高度。最后由面积和高度完成目标物体的体积计算。经验证这种方法的体积测量误差控制在3%以内,完全满足实时性的误差要求,又由于深度图像较彩色图像不易受光线、背景的干扰,使得该方法具有很强的鲁棒性。
关键词:Kinect 2.0深度图像;点云数据矩阵;目标提取;体积计算
中图分类号:TP274文献标识码:ADOI: 10.19358/j.issn.1674-7720.2017.07.011
引用格式:李玲玲,王正勇,卿粼波,等.基于Kinect 2.0深度图像的快速体积测量[J].微型机与应用,2017,36(7):35-38,42.
0引言
体积测量在现实生活中应用广泛,例如在航空运输行业中,货物入舱前需对运输货物体积有快速明确的估计,以满足飞机腹舱空间的充分利用,提高运输效率。目前机场主要是通过目测确定需运入飞机腹舱的货物体积,其精确度不够高,因此研发一套自动化体积测量系统尤为必要。现体积测量系统主要是基于激光传感器[13],但实际操作中为了获得被测物体某个面上的三维坐标信息,激光传感器需要电机等配套设备的驱动才能获取由线阵数据组成的整个物体表面的信息[1],又由于对激光传感器的扫描分辨率和灵敏度的要求,使得整个系统操作复杂,速度慢且成本高[1]。不同于传统的激光传感器得到的线阵数据,Kinect 2.0深度传感器得到的不仅是面阵数据,而且可获取物体深度信息,为此,本文主要研究基于Kinect 2.0深度图像预处理方法实现入舱前货物体积的快速实时测量。该方案优点主要体现在实现速度快,系统组成和操作简单,只需一台Kinect和一台电脑,成本低,更具有经济使用价值。
1实现方案
图1体积测量方案流程图1为体积测量方案流程。本文首先用Kinect 2.0采集深度图像及其对应的点云数据矩阵,然后采用漫水填充的方法增强图像初步去噪突出目标物体,并经过图像二值化、Canny边缘检测提取物体轮廓,图像填充提取目标物体。最后,根据Kinect 2.0视场与像素个数的比值关系得到面积,由目标物体在整个图像中的具体位置将其配准到点云数据矩阵中计算物体高度,进而求出物体体积。
2深度图像和点云数据矩阵获取
2.1深度图像获取
深度图像又叫做距离图像,类似于彩色图像矩阵中的颜色值、灰度图像矩阵中的灰度值,深度图像信息即深度值存储在深度图像矩阵中。深度图像较灰度图像的优势是,深度值只与距离相关,与光照强度和方向无关[4]。
本方案采用Kinect 2.0摄像头获取深度图像。Kinect 2.0是微软公司于2014年7月推出的高性价比摄像头。相比于传统的激光传感器,Kinect 2.0是一款功能强大、性价比高、方便使用的三维数据采集设备,图2Kinect深度图像其分辨率为512×424;水平视场可增大至70°,垂直视场增大至60°;其深度图像拍摄范围为0.8~4.0 m,图2为获取的一张深度图像。
2.2点云数据矩阵获取
点云是指以各种方式获得的点数据,是测量目标表面上各点信息的集合。坐标数据是点云数据必须包括的信息,另外法向量、颜色值或其他数据信息也可能被包括在点云数据中[5]。本方案中Kinect 2.0获取的点云数据是与其深度图像的每个像素点对应的距离信息矩阵,其大小为512行、424列,其值表示的是Kinect 2.0深度摄像头到被拍摄物体表面的垂直距离,单位为mm。经实验验证Kinect 2.0在其所能达到的距离范围0.8~4 m内的距离误差均在2 cm以内,Kinect 2.0测得距离与实际距离的比较如表1所示,由此获得的Kinect 2.0测试距离和实际距离的精度曲线如图3所示。
3深度图像预处理
由于Kinect采集的深度图像并不完美,含有与距离平方成正比的噪声及无效像素构成的空洞[6]。本文中的深度图像还有周围物体的干扰,因此对采集到的原始深度图像进行预处理对后续进一步研究尤为重要。本方案经过对深度图像的漫水填充[7]处理、基于Otsu[8]算法的图像二值化、Canny算子[9]边缘检测、图像填充等预处理方法检测定位提取出目标物体。
3.1基于漫水填充的图像增强
图像增强可弱化或消除一些不必要信息,经过增强处理的图像比原始图像更适合特定场景的需求[10]。本文首先对带目标物体的深度图像通过漫水填充,强化突出目标区域。实验证明该方法效果比较理想,基本上消除了周围噪声并突出了目标物体,为后续图像处理做准备。漫水填充法是一种常用的区域填充法,它的实质是种子填充法,经常被用来标记或分离图像的感兴趣区域。
图4漫水填充处理后的图像漫水填充法的具体操作即在具有同一颜色或亮度值的像素区域内选取种子点,通过判断种子与种子点的邻域像素颜色或亮度值的差别是否满足预先设定的阈值,来决定是否对邻域的像素用新的颜色或亮度值代替,直到遍历完区域内所有像素或达到轮廓线的边界[11]。由此可知,初始种子点、替代颜色和目标颜色判定阈值是漫水填充的3个重要参数。本文并没有填充目标区域,而是通过填充目标区域以外的区域为白色即像素值为(255,255,255)来突出黑色的目标区域,这样就简化了参数的选择。漫水填充可通过opencv中的cvFlood Fill函数来实现,选取种子点为(20,20),将下标记和上标记都选取为30,对种子的8邻域逐点进行判断,经实验验证这种参数的选取值可取得很好的效果,如图4所示。
3.2基于Otsu的图像二值化
图像增强虽然突出了目标物体但周围仍有噪声,故需对图像进行进一步的处理。接下来对漫水填充后的图像进行二值化操作以适应下一步图像处理的要求。针对目标物体与背景有较大差别的图像,为了得到理想的二值化效果,阈值分割是备受青睐的方法。因此,区分目标物体和背景的阈值对二值化效果是否理想起到关键的作用。设原始灰度图像为f(x,y),经二值化处理的图像为g(x,y),可用式(1)描述二值化过程。
g(x,y)=1,f(x,y)t
x,f(x,y) 全局阈值法和局部阈值法是二值化的主流方法,本文采用基于Otsu算法的全局阈值法,该方法针对直方图呈明显双峰分布的图像实现效果优越,适合本文中的图像。Otsu算法可自动获取图像二值化所需要的阈值。其具体实现是以一个初始阈值t分割图像,这样就把原图像分割成C1和C2两部分,C1和C2分别为像素灰度值大于等于t和小于t的集合,之后分别求得这两部分的类间方差σ2B和类内方差σ2A,最终找出分割图像的最佳阈值t,也就是满足两个方差比σ2B/σ2A最大的阈值。分别将C1类和C2类的像素点总数设为W1和W2,其像素点灰度均值为M1和M2,方差分别为σ21和σ22。则有: σ2B=W1W2(M1-M2)2(2) σ2A=W1σ21+W2σ22(3) 将灰度值大于等于t的像素灰度值规定为255,小于t的像素灰度值规定为0。通过图像二值化将24 bit的深度图像转化为8 bit深度图像,以便后续对目标图像的提取。 3.3基于Canny算子边缘检测的目标提取 目标提取即把感兴趣的部分从单幅图像或序列图像中提取出来。为了从背景中提取出目标物体,采用Canny算子对二值化图像进行边缘检测。相比于其他边缘检测算子,依据图像边缘检测最优准则设计的Canny边缘检测算法具有良好的边缘检测性能,且具备信噪比大和检测精度高的优点,因此文中使用Canny算子进行边缘检测,效果如图5所示。 然后对提出的边缘进行内轮廓填充,将轮廓内的像素值填充为1,效果如图6所示,图中黑色的区域为背景,白色区域即提取出的目标物体。 4体积测量 利用统计匹配像素点及视场比值不变性的方法计算物体的体积, Kinect 2.0的视场图如图7所示。其中h是Kinect 2.0到物体表面的距离,N是图像中目标物体区域内像素个数测量值,S是物体实际面积大小;M是Kinect 2.0整个视场范围内像素的个数,S1是Kinect 2.0整个视场的面积;α和β分别是Kinect 2.0的水平视场和垂直视场。 4.1面积计算 由于Kinect 2.0采集的深度图像中保存的是深度信息,要进行体积测量还需得到面积相关的信息。当Kinect 2.0与所测物体的距离固定时,可以根据Kinect 2.0在该距离的视场范围和该视场范围内像素个数的比例关系来求取面积。即图像中目标物体区域内像素个数测量值N与实际物体的面积大小S的比值和在该距离下Kinect 2.0整个视场范围内像素的个数M与整个视场面积S1的比值是相等的,如式(4)所示: 其中N是根据图像统计出的目标物体所在区域的像素个数,即二值图像中像素值等于1的像素个数,S1可根据图7中Kinect 2.0的视场范围由几何关系求出,如式(5)所示: 又由于视场S1中总的像素个数M=512×424,利用这个原理,对于搭建好的图像采集系统,由式(4),在S1、M、N已知的情况下即可以求出目标物体区域的面积S: 4.2高度计算 统计目标物体区域即图6中的白色区域在整幅图像中的具体位置,即白色区域的起始行m1和终止行m2以及起始列n1和终止列n2,然后求出白色区域的中间行m和中间列n,并将其配准对应到点云矩阵A1和A,即在A1和A中提取出白色区域对应的距离信息。由于得到的Kinect 2.0摄像头到背景表面和到目标物体表面的两个点云矩阵A1和A边缘有噪声,因此选取A1和A中20×20的中间区域的小矩阵,即行m-10至m+9和列n-10至n+9的区域分别求平均值得到h1和h。通过背景距离减去前景距离计算被测物的高度信息h2,计算公式为: h2=h1-h(7) 4.3体积计算及实验测试 由体积计算公式V=Sh2,即可计算出被测物的体积。 分别对不同的物体和0.8~4 m不同的距离(Kinect 2.0到被测物的距离)进行了实验,尽管被测对象的体积很小,但误差均有良好的可控性,结果显示控制在3%以内,这充分说明了该方案的潜力和可行性。具体测量结果及误差分析如表2所示。 5结论 本文基于VS2013环境和Kinect SDK 2.0提出一套体积测量方案,实验证明本文提出的测量方案测量结果准确可靠,3%以内的体积测量误差可满足实时的需求。 (1)本文应用Kinect 2.0深度图像的处理来求体积,充分利用了深度图像较彩色图像不易受光照强度和方向影响的优势,增强了本文提出算法的鲁棒性。 (2)本文设计的体积测量方案成本低,经济实惠,不需要配套的硬件驱动,所需设备仅为一台电脑和一台Kinect 2.0,性价比高,操作简单便捷,并且可实现快速准确实时的体积测量,经济价值可观。 (3)本文将Kinect 2.0的应用由尺寸测量进一步深入到体积测量领域,增强了Kinect 2.0的实用性,拓展了Kinect 2.0的应用领域,对计算视觉技术在体积测量领域的应用具有积极意义。 参考文献 [1] 路达, 滕奇志, 卿粼波,等. 基于激光测距的中小型货物三维体积扫描[J]. 微型机与应用, 2015,34(23):83-86. [2] 周峰. 基于三维激光扫描技术的仓储散粮堆体积测量系统研究[D].长春:吉林大学,2015. [3] 雷文. 基于激光扫描的物料堆三维测量系统研究[D].长沙:湖南大学,2014. [4] Yue Haosong, Chen Weihai, Wu Xingming, et al. Fast 3D modeling in complex environments using a single Kinect sensor[J]. Optics and Lasers in Engineering, 2014, 53(2): 104-111. [5] 韦羽棉. 基于 Kinect 深度图像的三维重建研究[D].重庆:重庆大学, 2014. [6] 陈理. Kinect 深度图像增强算法研究[D]. 长沙:湖南大学, 2013. [7] BRADSKI G, KAEBLER A.Learning OpenCV[M].California:0’Reilly Media,Inc,2008. [8] OTSU N. A threshold selection method from graylevel histogram [J]. IEEE Transactions on Systems, Man, and Cybernetics, 1979, 9(1): 62-66. [9] CANNY J. A computational approach to edge detection[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 1986, 8(6):679-698. [10] Li Bai, Li Ya, Cao Hongxin, Fet al. Image enhancement via lateral inhibition: an analysis under illumination changes[J]. OptikInternational Journal for Light and Electron Optics, 2016, 127(12): 5078-5083.