基于OpenCV的车辆轮廓检测

第10卷 第12期 2010年4月167121815(2010)1222987205 

科 学 技 术 与 工 程

Science Technol ogy and Engineering

 Vol 110 No 112 Ap r 1

2010

 2010 Sci 1Tech 1Engng 1

基于O penCV 的车辆轮廓检测

刘慧英 王小波

(西北工业大学自动化学院,西安710129)

摘 要 为了获得理想的车辆轮廓线,提出了一种基于开源计算机视觉库OpenC V 的轮廓检测新方法。首先对图像进行形态学去噪、平滑滤波处理和二值化阈值分割等预处理,获得二值化黑白图像。然后通过轮廓提取和跟踪检测到车辆外轮廓线。在VC ++6.0环境下,利用OpenC V 编程实现了此方法。由实验结果看出,该方法可以较为理想地获得车身外轮廓线信息,既节省了预处理的时间,也保证了精度。关键词 OpenCV 图像预处理 轮廓检测中图法分类号 TP391.41; 文献标志码 B

国内外对于汽车各部件的测量、检测技术已有较大的发展,但对整车尺寸参数进行测量的手段相对落后。到目前为止,还没有测量在用汽车整车尺寸参数的专用自动测试系统。我国汽车检测机构普遍采用的测量器具有卷尺、角度尺、外径卡规、标杆,以及光学式及电磁式检测仪等。传统的三维测量方法多为人工检测,劳动强度大、效率低。工业上的三维检测主要是以全站仪、三坐标测量机等为主,结构复杂、对测量条件要求苛刻,价格昂贵,不利于在汽车检测领域进行推广。当今非常有必要开发这样一套设备,对汽车外形尺寸进行准确测量,为交通管理部门提供详实的数据,为整治超限超载提供必要的依据

2010年1月22日收到

作者简介:刘慧英(1956—),女,山东日照人,博士,教授,研究方向:控制理论及应用。王小波(1981—),男,河南洛阳人,硕士研究生,主要研究领域为数字图像处理。

本文采用计算机视觉技术,在通过CCD 摄像头采集车辆图像的基础上,通过OpenCV 来检测车辆的外轮廓线,从而为进一步设计车辆外廓尺寸测量系统提供基础支持。

1 O penCV 简介

OpenCV 全称Open Source Computer V isi on L i 2

brary,是由I ntel 公司资助的开源计算机视觉库。它

由一系列C 函数和少量C ++类所组成,实现图像处理和计算机视觉方面的很多通用算法,例如特征检测与跟踪、运动分析、目标分割与识别以及3D 重建等

[1]

。OpenCV 包括300多个C /C ++函数的跨平

台的中、高层AP I,它不依赖于其它外部库,但是也可以使用某些外部库。由于OpenCV 的源代码是完全开放的,而且源代码的编写简洁而又高效,特别是其中大部分的函数都已经过汇编最优化,以使之能高效而充分地利用英特尔系列处理芯片的设计体系,所以近年来在国外的图像处理相关领域中被广泛地使用,成为一种流行的图像处理软件。1.1 O penCV 的模块

[2]

本文采用的是OpenCV 1.1p rela 版本,包括以下几个模块,其具体功能是:

①CV 模块:主要的OpenCV 函数,包括图像处理、机构分析、运动分析与对象跟踪、模式识别、照相机定标和三维重建等;

②CVAUX 模块:辅助的(实验性的)OpenCV 函数;

③CXCORE 模块:数据结构与线性代数支持;④ML 模块:机器学习库,是一些用于分类、回归和数据聚类的类和函数;

⑤H I G HG U I 模块:图像界面函数,主要提供了图形用户窗口G U I,图像视频I/O,系统调用函数等。

1.2 O penCV 在M SVC ++6.0下的安装及配置

[3]

1)双击OpenCV 安装文件,将路径设置为D:\r ogra m Files \OpenCV 。安装时选中Add <…>\OpenCV \in t o the syste m P ATH,将其加入系统变量,

以使在运行程序时,能够找到所需要的OpenCV 的动态链接库文件。安装后检查D:\Pr ogra m Files \OpenCV \bin 是否已经被加入到环境变量P ATH,如

果没有,需要手动加入。

2)配置VC ++6.0:点击菜单Tools →Op ti ons →D irect ories,先设置lib 路径,选择L ibrary files,在下

方填入路径D:\Pr ogra m Files \OpenCV \lib;然后选择I nclude files,在下方填入路径:

D:\Pr ogra m Files\OpenCV \cxcore \include D:\Pr ogra m Files\OpenCV \cv\include D:\Pr ogra m Files\OpenCV \cvaux\include D:\Pr ogra m Files\OpenCV \m l\include D:\Pr ogra m Files\OpenCV \otherlibs\highgui 3)项目配置:每创建一个将要使用OpenCV 的VC Pr oject 都需要给它指定需要的lib 。依次点击菜

单:Pr oject →Settings,然后将Setting f or 选为A ll Con 2figurati ons,然后选择右边的link 标签,在Object/li 2brary modules 附加上cxcore .lib,cv .lib,m l .lib,cvaux .lib,highgui .lib 。如果不需要那么多lib,可以

只添加所需要的。

2 车辆图像的预处理

在进行轮廓检测前,首先要对采集到的车辆俯视图进行预处理,主要包括形态学去噪、图像平滑处理和二值化分割[4]

2.1 形态学去噪

数学形态学作为图像处理的数学工具,它的基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状,从而达到对图像进行处理的目的。数学形态学的原始操作有两种,即膨胀和腐蚀,许多形态学操作都是以这两种运算为基础的。膨胀可以将图像区域扩张大,根据膨胀的这个性质,实际应用中可以用其来实现小的空洞和狭窄的

缝隙的填充。腐蚀可以将图像区域收缩小,根据这个性质,可以用腐蚀操作来将图像菱角去掉。

膨胀和腐蚀并不是互为逆运算的,所以可以级联结合使用。可以对图像进行腐蚀然后膨胀其结果,或者先对图像进行膨胀然后腐蚀其结果。前一种运算称为开运算,后一种运算称为闭运算,它们也是数学形态学中的重要运算。一般来说,开运算能够去除孤立的小点、毛刺和小桥,闭运算可以填平小孔,弥合小裂缝,而总的位置和形状不变。

本文中先对车辆图像进行闭运算,后进行开运算,以达到填平轮廓缺口,去除突出的毛刺、孤立的小点的目的。

2.2 利用中值滤波进行图像平滑处理

图像的平滑是一种实用的数字图像处理技术,主要目的是为了减少图像的噪声。对于在测试场地采集到的车辆俯视图,由于场地等的原因,不可避免的存在许多噪声,进行平滑处理时最重要的是要保持车辆轮廓的清晰,同时能够去除高频噪声。中值滤波恰好符合这一条件。

中值滤波器是一种非线性的滤波器,它能够很好的抑制脉冲干扰和图像噪声,保护图像的边缘不变模糊。利用中值滤波进行平滑处理可以保留更多的关于图像的灰度信息,使图像轮廓检测的质量得到提高。

2.3 对图像进行二值化阈值分割

图像分割的目的是把图像空间分割成一些有意义的区域。对于本文要实现的车辆轮廓检测,要实现的目的是通过图像分割,得到黑白二值图像。因此采用二值化阈值分割法,其基本出发点是将图像中的目标和背景看成是以阈值为分割点的两种成分。

首先确定需要的分割阈值,然后顺序读取图像各像素点灰度值并与阈值比较,凡大于等于阈值的用1代替,否则以0代替。通过二值化分割,得到黑白图像,为轮廓提取做好准备。

3 轮廓提取与轮廓跟踪

二值化图像轮廓提取算法的原理是:如果原图

8892科 学 技 术 与 工 程

10卷

中有一点为黑,且它的8个相邻点都是黑色时,则该点为内部点,将该点删除,即将内部点都掏空,得到图像的轮廓线。

轮廓跟踪的基本方法是:先根据“探测准则”找到目标轮廓上的像素点,然后根据这些点找出目标物体上的其它像素点。先按照从左到右、从下到上的探测准则顺序搜索图像的所有像素点,找到最左下方的边界点[4]。然后根据如下跟踪准则:从第一个边界点开始,定义初始的搜索方向为沿左上方;如果左上方的点是黑点,则为边界点,否则顺时针旋转45°,这样一直找到第一个黑点为止;然后把这个黑点作为新的边界点,在当前搜索方向的基础上逆时针旋转90°,继续用同样的方法搜索下一个黑点,直到返回最初的边界点或直到找不到点为止。

4 基于O penCV的车辆轮廓检测实现

本文利用OpenCV提供的强大的图像处理函数来对读取的车辆俯视图进行一系列的处理,最后得

到车辆的外轮廓线,工作流程如图1所示

图1 图像处理流程图

4.1 图像读取、显示及释放

从文件中读取图像的语句为:

I p lI m age3src=0;

src=cv Load I m age(filename,flag);

结构I p lI m age定义I P L图像的头部,目前OpenCV支持的图像格式有:BMP,JPEG,P NG,P BM, PG M,PP M,SR,RAS和TI FF等。其中flag为载入图像的通道数标志:当flag>0时,表示载入图像强制为32通道彩色图像;flag=0时,表示载入图像强制为单通道灰度图像;flag<0时,表示载入图像由文件中的图像通道数决定。本文中要求载入的图像为灰度图像,因此要设置flag=0。

要实现图像的显示,首先要创建一个窗口,然后再显示,实现函数为:

cv Na med W indow(“窗口名”,CV_W I N DOW_AUT OSI ZE);

cvShow I m age(“窗口名”,src);

载入后的灰度图像如图2所示

图2 载入的灰度图像

在图像处理完毕后,需要释放内存空间,其函数为:

cvRelease I m age(&src);

cv Destr oy W indow(“窗口名”);

4.2 形态学去噪和平滑处理

膨胀和腐蚀的函数分别为:

cv D ilate(src,dst,ele ment,iterati ons);

cvEr ode(src,dst,ele ment,iterati ons);

其中src为输入图像,dst为输出图像(dst可以为src),ele ment为结构元素,如果为NULL,则使用3×3的矩形结构元素,iterati ons为运算次数。

将膨胀和腐蚀级联应用即达到开、闭运算目的OpenCV中用如下函数实现此操作:

cv Mor phol ogyEx(src,dst,te mp,ele ment,operati on,iterati ons);

其中operati on标志形态学操作的类型,C V MOP OPE N表示开运算,C V MOP CLOSE表示闭运算。

平滑处理函数为:

cvS mooth(src,dst,s moothtype,para m1,pa2 ra m2,para m3,para m4);

其中s moothtype标志采用的平滑处理方法,本文中采用中值滤波,因此设置为CV_MED I A N,对图像进行核大小为para m1×para m1的中值滤波,设置para m1=3,其余参数设置为0。

本文中,对图像进行闭、开运算和中值滤波的多

9892

12期刘慧英,等:基于OpenC V的车辆轮廓检测 

次循环操作,以达到弥合轮廓缺陷,去除毛刺,平滑轮廓,消除噪声等效果。经处理后的图像如图3

所示。

图3 去噪处理后的图像

4.3 阈值分割及取反

阈值分割函数为:

cvThreshold (src,dst,threshold,max _value,threshold_type );

其中threshold_type 设置为CV _THRESH_B I N A 2RY,采用二值化滤波,threshold 为阈值,max_value

为最大值。当src (x,y )>threshold 时,dst (x,y )=max_value,否则dst (x,y )=0。根据场地实际情

况,经过多次实验,本文中取threshold =150,max_value =255。

因为场地背景灰度值要比车辆本身要高,因此,阈值分割后再进行取反处理,函数如下:

cv Not (src,dst );

经过阈值分割后的二值化图像如图4所示

图4 二值化图像

4.4 轮廓检测及绘制

在二值图像中寻找轮廓函数为:

cvFindCont ours (src,st orage,&cont our,header _size,mode,method,offset );

其中src 为输入的82比特、单通道图像,非零元素被当成1,0象素值保留为0,从而图像被看成二值的;st orage 为得到的轮廓的存储容器;cont our 为

输出参数,包含第一个输出轮廓的指针;header_size 是序列头的大小,本文取为sizeof (CvCont our );mode 为轮廓查找的模式,因为本文主要关注最外层的轮廓,因此,设置为CV _RETR _EXTERNAL;method 为逼近方法,采用CV_CHA I N _APPROX_SI M P LE,压缩水平、垂直和对角分割,函数只保留末端的象素点;offset 为偏移量设置,默认设置为cvPoint (0,0),即

没有偏移量。

轮廓查找之后,得到cont our 序列,OpenCV 中绘制轮廓的函数为:

cv D ra wCont ours (dst,cont our,external _col or,hole_col or,max_level,thickness,line_type,offset );

其中dst 是用以绘制轮廓的图像;external_col or 是外层轮廓的颜色;hole_col or 是内层轮廓的颜色;max_level 为绘制轮廓的最大等级,本文中取0,绘制

单独的轮廓;thickness 为绘制轮廓时所使用的线条的粗细度,取1;line_type 为线条的类型,取8。

检测及绘制后的车辆外轮廓线如图5所示

图5 车辆外轮廓线

5 实验结果分析

由图2可见,因为车身本身情况比较复杂,加上场地及周围环境(如光照等)的原因,采集到的灰度图像存在比较多的噪声,轮廓线并不是很光滑。经过去噪及平滑处理后,由图3可见背景及车身上的

噪声得到消除,车身轮廓线得到了比较理想的平滑。观察图4二值化处理后的图像,基本上区分了背景与物体。但是由于环境比较复杂,光照情况不一样,灰度值存在比较大的差异,造成二值化后的图像中,车身有一部分没有从背景中区别出来,而背景中还有一部分并入了车身轮廓。根据图4查找轮廓后的车身轮廓线如图5所示,可见,主要的车身轮廓线得到了比较理想的检测。但是如上分析,还

0992科 学 技 术 与 工 程10卷

有一部分分布在图像周边比较杂乱的轮廓线。

本文所进一步研究的车身轮廓尺寸检测系统主要关心的是图像的中央部分(即CCD 垂直取像的中间部分)的情况。利用OpenCV 中取感兴趣区域函数cvSetI m ageRO I (i m age,rect ),可以取得我们关心的中央部分,该函数中rect 为设置的感兴趣的矩形区域

[5]

。本文中处理的图像大小为640×480,而

我们现在需要关心的是中间部分120×90范围的图像,设置rect =cvRect (210,195,120,90),其中(210,195)为感兴趣区域矩形左上角起始坐标,120×90为矩形大小,经取感兴趣区域处理后的图像

如图6所示。可见,得到的是单一的车身轮廓曲线,这也是本文进一步研究需要关心的部分

图6 取感兴趣区域后的图像

6 结论

通过实验结果可以看出,即使在图像情况比较

复杂的情况下,采用OpenCV 开发的该车辆轮廓检测系统也可以较为完整的将前景区从背景区域中分离出来,得到比较理想的车辆轮廓线,为进一步开发车身外轮廓尺寸系统打下了良好的基础。另外值得注意的是,采用此设计的算法复杂度并不高,易于实现,加上OpenCV 库设计高效率性,可以快捷的实现图像的处理。研究结果表明,本文提出的车身轮廓检测设计具有较高的可行性。

I ntel 公司开发OpenCV 库为V isual C ++开发

视觉测量系统提供了极大的方便,其旨在建立一个完全开放的研究机构使得图像处理及计算机视觉技术在快速发展的PC 环境中得到更好地应用,为用户提供了一整套的图像处理以及图像与模式分析函数,且这些函数在I ntel 的处理器上执行是最优的。它相对与其它开发方式具有成本低、速度快、周期短等诸多优点,应用它开发图像处理程序必将得到更广泛的应用。

参 考 文 献

1 I ntel Cor porati on .I ntel open s ource computer visi on library reference

Manual,2001

2 B radski G,Kaehler A.Learning OpenCV.O πReilly Media,20083 刘瑞祯,于仕琪.OpenCV 教程基础篇.北京:北京航空航天大学

出版社,2007

4 景晓军.图像处理技术及应用.北京:国防工业出版社,20055 陈胜勇,刘 盛.基于OpenCV 的计算机视觉技术实现.北京:科

学技术出版社,2008

A Veh i cle Con tours D etecti on M ethod Ba sed on O penCV

L I U Hui 2ying,WANG Xiao 2bo

(School of Aut omati on,Northwestern Polytechnical University,Xi πan 710129,P .R.China )

[Abstract] I n order t o acquire the ideal vehicle cont ours,a ne w vehicle cont ours detecti on method is p r oposed based on OpenCV (Open Source Computer V isi on L ibrary ).First it p rep r ocessed the i m age by mor phol ogy denois 2ing,s moothing and binary threshold seg mentati on t o obtain the binary i m age on the basis of black and white,then thr ough the cont our extracti on and tracking detecti on outlined the vehicle .The method is realized using OpenCV in VC ++6.0p r ogra mm ing envir onment .Experi m ental results show that using this method can obtain the ideal body cont ours,not only saving the ti m e of p rep r ocessing,but als o ensuring the accuracy .[Key words] OpenCV i m age p rep r ocessing cont our detecti on

1

99212期刘慧英,等:基于OpenC V 的车辆轮廓检测 

相关文档
最新文档