基于OpenCV的目标物体颜色及轮廓的识别方法
   来源:现代电子技术     2021年01月25日 07:34

基于opencv的物体定位

侯宾+张文志+戴源成+田洪强

摘  要: 针对机器人视觉中对目标物体的拾取问题,提出一种基于OpenCV函数对从摄像头输入的目标物体的颜色及轮廓进行有效识别的方法。首先利用摄像头读取目标物体及周围环境,经一系列图像处理后进行目标物体的颜色识别,在此基础上进行Canny边缘检测并查找轮廓,最后将轮廓显示。结果表明,该实验程序可以很好地完成对目标物体的颜色及轮廓提取,且有效地避免了目标物体周围相近颜色的干扰。

关键词: 机器人视觉; 颜色识别; 轮廓识别; Canny边缘检测

中图分类号: TN919?34; TP391                文献标识码: A                      文章编号: 1004?373X(2014)24?0076?04

Method of objects color and contour recognition based on OpenCV

HOU Bin, ZHANG Wen?zhi, DAI Yuan?cheng, TIAN Hong?qiang

(Inner Mongolia University of Technology, Huhhot 010051, China)

Abstract: Aiming at the problem of recognizing the target object in robot visual, a way based on OpenCV is proposed, which can effectively recognize the color and the contour of  the objects from the camera. The target object and its surrounding environment are read out by camera, and then the color of the object is recognized after a series of image processing. On the basis of this, the Canny edge detection is carried on, and the contour is determined and displayed. The results show that the expe?

rimental procedure can complete the extraction of target objects' color and contour perfectly, and avoid the interference of similar color around objects effectively.

Keywords: robot vision; color recognition; contour recognition; Canny edge detection

0  引  言

机器人视觉是机器人感知外部世界的重要媒介,也是未来机器人传感器发展的主流方向。机器人视觉通过视觉传感器获取环境的图像数据,并通过软件进行图像的分析和理解,使机器人能够辨识目标物体及确定其位置[1]。随着机器人技术的快速发展及其在工业、医学、军事等领域的广泛应用,机器人视觉技术取得了快速发展,对机器人灵敏感知周围环境的能力要求也不断提高[2]。对目标物体的精确识别问题是机器人视觉中最基本的环节,而颜色识别和轮廓识别又是进行其他深入研究的基础。目前在这方面的主要应用是单一的对颜色或轮廓的提取。

基于上述情况,本文提出了基于OpenCV函数库,对摄像头取景范围内目标物体颜色及轮廓共同精确提取的方法。利用OpenCV函数库中提供的函数,对目标物体首先进行各种图像学方面的预处理以使得到的图像符合实验要求,然后利用阈值调节进行颜色识别,最后在颜色识别的基础上进行边缘检测及轮廓识别。

1  OpenCV简介

OpenCV是由Intel公司资助的开源计算机视觉库,它由一系列C函数和少量C ++类所组成,可实现图像处理和计算机视觉方面的很多通用算法,例如特征检测与跟踪、运动分析、目标分割与识别以及3D重建等[3?4]。由于OpenCV的源代码是完全开放的,而且源代码的编写简洁而又高效,所以近年来在国内外的图像处理相关领域中被广泛地使用,成为一种流行的图像处理函数库。本实验是在Windows XP系统下基于OpenCV 1.0版本及VC++ 6.0环境下实现的。

2  颜色空间的选取

颜色空间的用途是在某些标准下用通常可接受的方式对彩色加以说明。常用的颜色空间有RGB,CMY,HSV,HSI等。本文采用的颜色空间为RGB和HSV[5]。

RGB(红、绿、蓝)如图1所示,可将R,G,B看成一个三维的坐标系,其中每一个坐标点都代表了一种颜色。HSV颜色空间,如图2所示。Hue表示的是颜色,通常使用一个带有角度的圆形表示。Saturation表示的是饱和度,在圆心处的取值是0,表示颜色很淡,沿着圆的半径方向增大颜色越来越浓。Value表示的是颜色的亮度,在圆锥的底端Value表示的是黑色,在顶端是白色。在实际中,RGB颜色表示容易受到强光,弱光,阴影等因素的影响。相比之下,HSV空间面对这些光照的变化更稳定一些,能很好地反应颜色的本质。

本实验采用普通CCD摄像头读入RGB颜色,再将RGB颜色转换为HSV颜色。在OpenCV中RGB转换到HSV时,对Hue通道的存储是用一个字节(8位)来表示,取值为[0,255],而Hue的取值[0,360],故需将Hue取值压缩一倍为[0,180]。其余两个量的取值为[0,255]。

3  算法实现

如图3所示为整个算法的大体流程图。

3.1  图像获取及预处理

利用普通CCD摄像头获取周围环境图像,对获取的图像进行平滑滤波处理[6]:

(1) 进行高斯滤波处理。由于高斯滤波器是一个低通滤波器故适合进行平滑滤波处理,相对于均值滤波它的平滑效果更柔和,而且边缘保留得也更好。

高斯滤波函数:cvSmooth( src,dst,CV_GAUSSIAN,3,3,0,0)。src为输入的源图像,dst为输出的图像。由于真实图像在空间内的像素是缓慢变化的,邻近点的像素变化不会很明显,但是随机的两个点就可能形成很大的像素差(也就是说空间上噪声点不是相互联系的),正是基于这一点,高斯滤波在保留信号的条件下减少了噪声[3]。

(2) 中值滤波器(CV_MEDIAN)将中心像素的正方形邻域内的每个像素值用中间像素值替换。基于平均算法的simple blur对噪声图像特别是有大的孤立点的图像非常敏感,即使有少量点存在较大差异也会导致平均值的明显波动,因此中值滤波可以通过选择中间值避免这些点的影响[7]。

中值滤波函数:cvSmooth( src,dst,CV_MEDIAN,3,3,0,0)。

基于两种滤波器各自的特点及互补的特性故在程序中同时使用了这两种滤波函数以使得到的图像更平滑从而减少噪声影响。

3.2  颜色空间转换及图像通道的分离

由于HSV颜色空间相比于RGB颜色空间的优越性,故将RGB转化为HSV。

RGB到HSV的数学转换函数如下所示:

[k1=max{r,g,b},k2=min{r,g,b};v=k1255] (1)

[s=0,                     k1=0(k1-k2)k1,     k1≠0] (2)

[h=(0+g-bk1-k2)×60,       s≠0,k1=r(2+b-rk1-k2)×60,       s≠0,k1=g(4+r-gk1-k2)×60,       s≠0,k1=bundefined,                   s=0] (3)

式中:r,g,b为RGB颜色空间中红色、绿色、蓝色3个分量的值;h,s,v为HSV颜色空间中色度、饱和度、亮度的值。采用下列函数实现RGB到HSV转换:cvCvtColor(src,dst,CV_BGR2HSV)。

接下来对得到的HSV图像进行通道分离,分离为3个单通道图像,分别为H(色度通道图像)、S(饱和度通道图像)及V(亮度通道图像)。采用如下函数实现:cvCvtPixToPlane(src,H,S,V,0)。

3.3  创建滑动条及阈值化处理

创建滑动条的目的是返回所想要的颜色参数阈值。本实验设定了6个调节参数LowHue(色度下限值)、HighHue(色度上限值)、LowSaturation(饱和度下限值)、HighSaturation(饱和度上限值)、LowBrightness(亮度下限值)、int HighBrightness(亮度上限值)。cvInRangeS( )函数用于检查图像中像素的灰度是否属于某一指定范围。可以通过接收滑动条返回的各个阈值而得到目标颜色的色度、饱和度和亮度单通道图像。

3.4  图像生成及图像形态学处理

应用“cvAnd()”函数对得到的三个单通道图像进行按位与运算,最后得到检测目标的二值图像。但是得到的图像会出现噪声,故接下来需对得到的图像进行图像形态学处理。

采用膨胀腐蚀的方法进行处理得到的图像,可以明显去除或减少噪点,使得到的目标体进行最大的连通。膨胀是指将一些图像与核进行卷积,求局部最大值的操作,数学公式为:

[dst(x,y)=max{src(x+x′,y+y′)}]  (4)

[(x′,y′)∈kernel]

式中: dst 为输出图像; src 为输入源图像; kernel 为用于腐蚀或膨胀的核结构元素,本实验选取的核大小为3×3像素如图4所示。

腐蚀是膨胀的反操作。腐蚀操作要计算核区域像素的最小值。腐蚀的数学函数为:

[dst(x,y)=min{src(x+x′,y+y′)}]  (5)

在OpenCV中膨胀采用的函数是“cvDilate()”,腐蚀函数为“cvErode()”。

一般来说,膨胀扩展了区域,而腐蚀缩小区域。膨胀可以填补凹洞,腐蚀能够消除凸起。腐蚀操作通常是用来消除图像中的“斑点”噪声,可以将斑点腐蚀掉,且能确保图像内的较大区域依然存在。在试图找到连通分支(即具有相似颜色或强度的像素点的大块的互相分离的区域)时通常使用膨胀操作。故程序中采用先膨胀后腐蚀的方法可以有效的去除被检测到物体的边缘噪点及其他噪声影响[8]。

3.5  查找轮廓和绘制轮廓

Canny边缘检测法是最常用到的进行边缘检测的方法,其最重要的特点是试图将独立的候选像素拼装成轮廓[9]。轮廓的形成是对这些像素运用滞后性阈值,本实验所采用的上下限阈值比为3∶1。Canny 边缘检测算法是高斯函数的一阶导数,是对信噪比与定位精度之乘积的最优化逼近算子[7]。

Canny 算法(见图5)首先用二维高斯函数的一阶导数, 对图像进行平滑, 设二维高斯函数为:

[G(x,y)=12πσ2exp-x2+y22σ2] (6)

其梯度矢量为:

[?G=?G/?x?G/?y] (7)

通过上式进行平滑, 抑制图像噪声。其中σ为平滑参数, σ较小时, 边缘定位精度高, 但图像平滑作用较弱, 抑制噪声的能力差;σ较大时则相反。梯度计算完成平滑后接下来进行“非极大值抑制”细化梯度幅值矩阵,寻找图像中的可能边缘点; 最后进行“双门限检测”则是通过双阈值递归寻找图像边缘点, 实现边缘提取[10]。

实现Canny检测的OpenCV函数是 cvCanny(src,dst,50,150,3),该函数需要输入一幅灰度图,输出也是一幅灰度图。进行完边缘检测紧接着把图像输出给查找轮廓函数即“cvFindContours()”,从二值图像中检索轮廓,并返回检测到的轮廓的个数。

利用“cvDrawContours()”函数在屏幕上绘制检测到的轮廓。绘制的屏幕图像可以选择源图像。

4  实验结果及分析

根据上述算法思想和实现过程,在Windows XP系统中使用VC++ 6.0和OpenCV 1. 0 来实现目标物体的颜色检测及轮廓检测实验。本文采用的是普通的CCD摄像头,若采用分辨率更高的摄像头其执行后的效果会更好。

图6为从摄像头直接读取的视频截图,未经OpenCV的函数处理。

图7为对一蓝色目标物体进行颜色拾取,图8为所需的色度、饱和度和亮度的阈值。通过调节所需的阈值可以有效的拾取目标的颜色。目标物体与背景的颜色较为相近,用实验中的算法可以有效的区分目标体与背景。

图9为在拾取颜色的前提下进行轮廓的拾取,可以看出轮廓能够很精确地识别出,由于是先拾取颜色所以可以将其他颜色的物体区别开。根据颜色进行轮廓提取可以很好的避免与目标物体轮廓相近的物体的影响。

图10~图12为在同一视频流中对另外的红色物体进行拾取,可以看到目标物体中的红色斑点可以很好的拾取出来。最后在颜色拾取的基础上轮廓也很好的拾取了。背景中的桌面发黄色,在色度中黄色的阈值范围紧挨着红色的阈值范围,但通过实验效果可以看出,红色和黄色完全可以区分且根本没有影响。

以上两组截图为来自同一摄像头的视频流输入,从实验结果截图可以看出该程序较好的拾取了目标物体的颜色及轮廓,对颜色的获取结果令人满意,基本可以去除周围其他相近颜色的干扰。

5  结  论

采用OpenCV开发的目标物体颜色及轮廓识别程序可以得到比较理想的实验效果。采用此设计的算法复杂度并不高,易于实现,加上OpenCV库设计高效率性,可以快捷地实现图像的处理。

实验结果表明,本文设计的目标物体颜色及轮廓同时精确识别的程序具有较高的可行性。这种先通过颜色阈值滑动条调整确定出目标物体,再在此基础上对目标物体进行轮廓提取的方法比单一的目标颜色提取或轮廓提取更实用更便捷,为目标跟踪及其他视觉方面的研究奠定了基础。

参考文献

[1] 徐德,谭民,李原.机器人视觉测量与控制[M].2版.北京:国防工业出版社,2011.

[2] R西格沃特,I R 诺巴克什,D 斯卡拉穆扎.自主移动机器人导论[M].李人厚,宋青松,译.2版.西安:西安交通大学出版社,2013.

[3] BRADSKI Gary, KAEHLER Adrian.学习OpenCV(中文版)[M].于仕琪,刘瑞祯,译.北京:清华大学出版社,2009.

[4] 马新明,赵晓莉,时雷,等.基于OpenCV的图像处理系统设计与实现[J].河南农业大学学报,2014(1):87?90.

[5] 章毓晋.图像工程(上册):图像处理[M].2版.北京:清华大学出版社,2007.

[6] LIN C, TANG Y L. Research and design of the intelligent surveillance system based on DirectShow and  OpenCV  [C]// IEEE conference on Consumer Electronics, Communications and Networks. Piscataway, NJ, USA: IEEE, 2011: 4307?4310.

[7] STEGER C, ULRICH M, WIEDEMANN C. 机器视觉算法与应用[M].杨少荣,吴迪靖,段德山,译.北京:清华大学出版社,2008.

[8] 刘瑞祯,于仕琪.OpenCV教程基础篇[M].北京:北京航空航天大学出版社,2007.

[9] 黄凯奇,任伟强,谭铁牛.图像物体分类与检测算法综述[J].计算机学报,2014(6):1225?1240.

[10] 王娜,李霞.一种新的改进Canny边缘检测算法[J].深圳大学学报,2005(2):149?153.

[11] 崔鹏.基于视频去噪算法移动机器人视觉定位研究[J].现代电子技术,2012,35(20):111?113.

颜色 图像 文章