余化鹏, 李 舟, 杨新瑞, 刘 雷(成都大学 信息科学与工程学院, 四川 成都 610106)
随着深度学习相关领域的发展,实时目标检测相关技术也迅速发展起来.在目标检测结果的基础上,目标的轮廓提取、颜色识别则是进一步完成目标属性识别的重要环节.对于复杂场景下的目标轮廓提取,基于深度学习的实时目标检测系统通常能较好地标出物体的位置矩形框,但目标检测系统本身就采用了深度学习方法,如轮廓提取再次使用深度学习方法,需要的计算资源过大,对于实时目标检测系统来说,其代价难以承受.深度学习方法还可能导致识别结果有误,学到错误的特征.而且,深度学习的方法依赖大量有标定的数据集,这部分工作通常只能由人力完成,轮廓识别的准确度依赖于数据集标定的准确度,准确的轮廓标定需要消耗大量人力资源和成本.本研究通过手工标定了700幅含有无人机轮廓的图像,在Mask R-CNN[1]模型上训练出了无人机检测和轮廓提取模型,检测效果和精度合宜,但其轮廓提取需要耗费大量计算资源,其效率无法满足实时系统的要求.
对于复杂环境下的目标轮廓提取,本研究尝试直接通过Canny边缘检测算法[2]、Marr-Hildreth[3]边缘检测算法对图像进行检测,虽能较好地提取图像中的边缘,但无法定位哪部分边缘是属于感兴趣的目标,难以使用底层数字图像处理的方法.背景区域和目标区域在数字图像的层面并没有本质区别,无法直接用底层方法加以区分.
实时目标检测系统能检测出目标所在位置并标定矩形框,在此矩形框中的图像主要部分即为物体的主体(即图像的尺度近似等于目标的尺度),其图像范围已经缩小,然而基于深度学习方法的轮廓提取并没有很好地利用这个先验知识.为此,本研究在结合了多种基于数字图像处理的算法后,提出了一种基于目标检测结果的轮廓提取方法.在已有目标轮廓的情况下,目标的颜色也易于识别.本研究通过对轮廓内包围的像素点在HSI颜色空间下进行统计,识别目标主体颜色.本研究首先将检测结果(与目标尺度大致相当)的图像提取出来,将其灰度化后用Canny边缘提取算法进行初步轮廓提取.同时,为减少噪声所带来的误差、将目标的主体提取出来,进行多次形态学闭操作使边缘主体部分扩大,随后在形态学闭操作后的图像中寻找最大轮廓,将其绘制并传入颜色识别模块.
首先考虑如何将输入的图像转换为灰度图?目前,常见的三原色RGB图像转为灰度图的算法有3种,本研究采用的是较广泛使用的一种.任何颜色都由红、绿、蓝三原色组成,如某点的颜色为RGB(R,G,B),其灰度图像对应的点的灰度值gray为,
gray=R×0.3+G×0.59+B×0.11
(1)
由式(1)计算出灰度值,产生灰度图像后, 本研究通过Canny边缘检测算法来初步提取图像的轮廓.
Canny边缘检测算法基于3个基本原则:同时考虑查准率与召回率,尽可能找到所有真实的边缘,同时应该尽量降低伪响应;边缘点的定位误差应该低,真实边缘中心与检测器标记为边缘的点之间的距离应该最小;仅检测出单一边缘点,对于一个真实边缘点,检测器应仅检测并返回一个点,而在只有一个单一边缘点的位置,检测器不应返回多个边缘点.
Canny边缘检测算法在数学层面表达了此3个基本原则,具体如下:
1)令f(x,y)表示输入图像,G(x,y)表示高斯函数,
(2)
用G和f的卷积形成一幅平滑后的图像,
(3)
上述过程采用高斯滤波器将输入图像平滑.随后,计算出该点的梯度幅值和方向,
(4)
和
(5)
2)通过计算出的梯度方向矩阵α(x,y)对梯度幅值矩阵M(x,y)进行非极大值抑制.首先将梯度方向离散化为4个方向,即上下、左右、正斜与反斜,以便对应3×3邻域.在梯度幅值矩阵M(x,y)中以点(i,j)为中心的3×3邻域内沿梯度方向α(i,j)进行比对,若点(i,j)处的梯度幅值M(i,j)大于梯度方向α(i,j)上与其相邻的2个点,则认为点(i,j)是边缘点,保持其梯度幅值不变,反之则认为它是非边缘点,将其梯度幅值设置为0.
3)用双阈值处理和连接分析来检测并连接边缘.首先选取高阈值TH和低阈值TL,随后遍历整个图像.若某点(i,j)的梯度幅值M(i,j)低于TL,则此点为非边缘点;若某点(i,j)的梯度幅值M(i,j)高于TH,则此点为强边缘点;若某点(i,j)的梯度幅值M(i,j)低于TH且高于TL,则此点为弱边缘点.对于弱边缘点,对其8邻域像素进行判断,若其邻域内存在边缘点,则将该弱边缘点视为边缘点,反之则视为非边缘点.最后,输出最终的边缘图像.
需注意的是,应用Canny边缘检测算法时,如双阈值设置过高,会导致本属于目标主体的轮廓未被检测出;如双阈值设置过低,会导致噪声和背景产生的干扰轮廓过多,难以与属于目标主体的轮廓相区分.故本研究在应用Canny边缘检测算法时高低阈值比选取为2∶1,充分考虑了上述两方面问题,取得了较好的平衡.
在上述得到的图像中,本研究已经初步地通过Canny算法提取了图像中的轮廓.因目标尺度与图像大小大致相当,本研究设想提取其中的最大轮廓即为目标的轮廓.但在大多数情况下(即有少量背景干扰),上述操作提取到的轮廓实际上是由多个线段组成的不连通的轮廓,这些线段标出的轮廓有些属于目标轮廓的一部分,另一些则属于背景和噪声.在数字图像的层面上,无法较好地将背景、噪声和目标主体区分开来,如果直接在此图像寻找最大轮廓,提取到的轮廓通常仅表示目标主体的一部分,误差较大.如何连接属于目标主体的多个轮廓,同时又排除背景与噪声产生的轮廓,是本研究考虑的重点.由目标主体组成的轮廓线段位置相近,背景轮廓又通常位于图像边缘并且离目标主体较远,这是一个很好的先验信息,因此本研究通过多次形态学闭操作[4-7],将这些互不相连的属于目标主体的轮廓线段相连接,同时通过控制结构元大小,如此的操作并不会将背景和噪声产生的轮廓与目标轮廓相连.
闭操作会平滑轮廓的一部分,弥合较窄的间断和细长的沟壑,消除小的孔洞,填补轮廓线中的断裂[8].用结构元B对集合A的闭操作,可表示为A∘B,其定义如下,
(6)
(7)
(8)
通过多次形态学闭操作,将目标中互不连接的主体轮廓线段相连,形成了一个由包围面积较小的背景、噪声轮廓和包围面积较大的目标主体轮廓组成的二值图像.随后通过调用OpenCV中的findContours函数实现寻找图像中的最大轮廓,其轮廓搜索方法是由Suzuki等[9]提出的一种基于二值图像外轮廓搜索的方法.此方法会对图像中所有像素点进行搜索,生成多个轮廓.本研究将提取的多个轮廓按轮廓包围的面积进行比较,取面积最大的轮廓即是目标主体的轮廓.
由此,本研究应用的取最大面积轮廓算法步骤如下:
输入:多个轮廓λ1,λ2,…,λn.
输出:最大面积轮廓λmax.
1)从输入轮廓中读取下一个轮廓λnow;
2)如最大面积轮廓标号λmax为空,则λmax=λnow,否则将λmax的轮廓包围面积与λnow的轮廓包围面积进行比较,如λnow的轮廓包围面积更大,则λmax=λnow;
3)如λnow已是最后一个轮廓,结束流程,输出λmax;否则跳至步骤1.
本研究提出的轮廓提取算法基于以下原则:算法时间复杂度应相对较低,这是由实时系统的特性决定的;算法要良好地利用“目标大致尺度已经由实时目标检测系统给定”这一先验知识;轮廓提取精度应远高于直接应用底层数字图像处理的方法.
由此,本研究提出的基于目标检测结果的目标轮廓提取算法步骤如下:
输入:目标检测结果图像(图像大小与目标尺度大致相当.
输出:目标轮廓.
1)将输入图像转为灰度图;
2)将此灰度图应用Canny边缘提取算法;
3)对步骤2中输出的图像进行3次形态学闭操作;
4)对步骤3中输出的图像应用取最大面积轮廓算法搜索最大轮廓;
5)输出此最大轮廓,即为本算法提取的目标轮廓.
RGB系统通常用来描述颜色,其与人眼强烈感知红、绿、蓝三原色的事实能很好地匹配,但不能很好地适应实际解释的颜色.HSI颜色空间在彩色图像中从携带的彩色信息(色度和饱和度)里消去强度分量的影响,这种颜色空间对人来说是自然且直观的[10],因此本研究采用HSI颜色空间来描述图像.从RGB到HSI的彩色转换公式为,
(9)
式中,
(10)
饱和度分量为,
S=1-(3/(R+G+B))[min(R,G,B)]
(11)
强度分量为,
I=1/3(R+G+B)
(12)
本研究通过下述过程完成颜色识别:首先,将仅含有目标轮廓的图像通过填充算法将目标区域填充为白色,将背景区域填充为黑色,形成一个二值图像(该二值图像与原图像的长宽相同),以便于下一步的颜色识别操作.通过实验发现,目标主体颜色通常取决于中心部分颜色,因为边缘部分通常与背景有混淆.故本研究在颜色识别过程中将前述步骤得到的填充后图像应用了形态学腐蚀操作,进一步缩小轮廓范围,提高颜色识别准确率.最后,对上述处理后的二值图像进行遍历.如果颜色为白色的像素点,则对原图中相应的点通过上述HSI颜色空间的方法进行颜色判定,并根据颜色范围表计入黑、灰、白、红、橙、黄、绿、青、蓝、紫,进行统计.通过实践发现,无人机图像中由于背景等原因,尽管有些无人机并不是黑色或灰色的,但其黑色和灰色的统计量会显著升高从而影响判定,因此本研究经验性地将黑色和灰色的统计量权值降低为原来的2/3.通过验证发现,这样做能显著降低非黑色非灰色图像误判为黑色或灰色,同时不会使本是黑色或灰色的图像误判为其他颜色.通过统计10种颜色分类的值,其统计值最高的一个颜色,即为目标主体的颜色.
综上所述,本研究提出的颜色识别算法步骤如下:
输入:目标图像,目标图像类别,目标轮廓图像.
输出:目标颜色.
1)将轮廓图像填充;
2)对步骤1中输出的图像应用形态学腐蚀操作;
3)对于步骤2中输出图像的每个像素点m:如果m为白色,则检测目标图像中对应点的HSI空间下的颜色,将其纳入10种颜色的数量统计值;否则认为该点是背景,对下一个点继续检测;
4)如目标图像类别是无人机图像,则经验性地将黑色和灰色统计量降权为原来的2/3;
5)分析10种类别颜色的统计值,输出统计值最高的颜色.
本研究选取了真实场景下的无人机、小汽车和人3类目标进行测试,建立了用于验证本研究算法的测试集,共有图像405幅,其中有无人机目标180幅、小汽车目标152幅及人目标101幅.本研究选取2个重要指标进行比较,即提取目标轮廓所需时间和目标轮廓交并比IoU(Intersection over Union),并将目标轮廓内的像素点视为集合,计算手工标定的真实轮廓与算法提取的轮廓之间的IoU.
本研究用C++在Visual Studio 2017平台上实现了下述3种算法,并进行了对比实验:用Canny算法提取轮廓;用Mask R-CNN[1]算法提取目标的轮廓;用本研究提出的算法基于目标检测结果提取轮廓.
本研究在第1种算法和第3种算法下选取的Canny双阈值均为40,80;在第2种算法下选取的最小置信度为0.9.实验中采用的部分图像及其轮廓提取结果如图1所示.图1中,第1、2排为无人机图像;第3排为人图像;第4、5排为小汽车图像.图1中,提取到的轮廓已被叠加至原图,矩形框是YOLO实时目标检测系统标定的目标范围矩形框,即本研究进行轮廓提取的图像区域.
图1 本研究算法得出的部分结果
3种算法的对比如图2所示.
图2中,Canny算法得出的结果没有矩形框标定,是因为Canny算法无法定位哪部分是待提取轮廓的目标.
本研究采用的计算机配置与环境是Windows 7操作系统、NVIDIA GeForce GTX 960图形适配器、IntelXeon E3-1231 CPU及16 GiB内存.上述3种算法的对比实验结果如表1所示.
图2 3种算法对比
表1 实验结果
需要说明的是,本研究采用的实时目标检测系统是通过YOLO[11]实现的,在平均速度指标统计中,已经包含了通过YOLO获取目标检测结果的时间.
对于本研究提出的算法,无人机和小汽车这2类目标的颜色都有主体颜色,识别其颜色有应用价值;但人这一目标有肤色、服装颜色等不同颜色特征,通过本研究的算法识别的颜色没有显著的应用价值,故没有纳入统计范围.
由图1、图2和表1可见,在3组算法中,直接Canny算法提取轮廓的效率很高,但其轮廓平均交并比与颜色识别正确率很低,其原因是Canny找到的轮廓是整个图像的轮廓,而不是待检测目标的轮廓.Mask R-CNN[1]算法提取轮廓的精度很高,轮廓平均交并比与颜色识别正确率都非常高,但其识别平均速度非常慢,难以应用于实时系统上.本研究提出的算法轮廓平均交并比与颜色识别正确率略低于Mask R-CNN[1]算法,但运行速度远快于Mask R-CNN算法.
本研究通过基于目标检测结果的图像进行了轮廓提取和颜色识别.对于轮廓提取,本研究采用的结合实时目标检测系统的数字图像处理方法在速度上数百倍快于目前广泛使用的深度学习方法,精度数倍高于直接应用的底层数字图像处理方法,能较好地满足实时系统中轮廓提取对效率和精度的要求.
由于通过像素统计的方法得出的值是所有局部信息相加的结果,然而人的视觉系统是一个很复杂的系统,例如一部分人眼认为是白色的无人机,放大后查看每个像素点,确实又有很大一部分是灰色的,这符合本研究的算法结果,但与人眼直觉有一定的差距,未来的工作需要更深入地研究人类视觉系统对整体信息的理解.