周传宏,王怀虎,康少博
(上海大学 上海市机械自动化及机器人重点实验室,上海 200072)
目前我国烟草生产广泛采用生产流水线方式,生产速度比较快,而且还要保证产品及包装的质量。人工抽检测显得非常困难,它检测效率低,在装箱的过程中可能会出现缺条的现象,一旦流入市场,会给产品和烟厂品牌声誉带来不利的影响。为了杜绝和防止装箱缺条现象的发生,就目前我国烟草行业而言,采用机器视觉技术是最好的解决方案。
机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统是指通过机器视觉产品(即图像摄取装置,分为CMOS和CCD两种)将被摄取目标转换成图像信号,传送给专用的图像处理系统,根据像素分布和亮度、颜色等信息,转变成数字化信号,图像系统对这些信号进行各种运算来抽取目标的特征,如面积、数量、位置、长度,再根据预设的允许度和其他条件输出结果,包括尺寸、角度、个数、合格/不合格、有/无等,实现自动识别功能,进而根据判别的结果来控制现场的设备动作[1]。
机器视觉系统通常由硬件和软件两大部分组成,硬件主要包括:光源、镜头、CCD相机、工业PC机、图像采集卡、监视器和通讯/输入输出单元等;软件则是根据具体的检测内容和精度要求由设计人员自行开发。
OpenCV是由Intel公司开发的开源计算机视觉库,该库由一系列C函数和少量C++类构成,实现了图像处理和计算机视觉方面的很多通用算法,机器视觉研发人员在软件开发过程中可以直接调用库内函数,从而省去常用图像处理算法的编写,可以提高软件的检测速度和精度。
OpenCV主体分为五个模块:CV模块包含基本的图像处理函数和高级的计算机视觉算法;ML是机器学习库,包含一些基于统计的分类和聚集工具;HighGUI包含图像和视频输入/输出的函数;CXCore包含OpenCV的一些基本数据结构和相关函数;CvAux模块主要存放一些即将被淘汰的算法和函数,同时还有一些新出现的实验性的算法和函数[2]。
本次设计的视觉检测系统是在Visual C++ 6.0环境下开发的,安装好的OpenCV在VC6.0中配置如下:首先用VC新建一个工程,选择菜单Tools>Options>Directories:分别设置lib路径、include路径、src路径。接着进行项目配置,选择Project>Settings...进入工程设置对话框,点击Link选项卡,在Object/library modules文本框中添加OpenCV lib库。
“装箱缺条视觉检测系统”是针对封装机偶尔出现箱缺条现象而研制的在线图像检测系统,它安装在封装机25条烟装箱推板入口处,在原机缺条检测点位置,装箱作业过程中进行在线检测,从根本上预防和杜绝箱缺条现象的发生。
该算法主要是对采集到的图像进行实时处理,采用自适应阈值处理方法进行图像分割,将检测轮廓的面积与阈值比较,从而判断缺条与否。算法流程图如图1所示。
图1 装箱缺条图像检测算法流程图
2.2.1 ROI设置的实现
OpenCV提供了对感兴趣区域操作的函数,如果想设置ROI,可以使用函数cvSetImageROI(),并为其传递一个图像指针和矩形。而取消ROI,只需要为函数cvResetImageROI()传递一个图像指针。函数原型如下[4]:
2.2.2 自适应阈值处理的实现
图像二值化处理的关键是最佳阈值的选择和确定。二值化处理的最理想的方法就是对图像的自动阈值选择。比较常用的一种方法就是Otsu方法,该方法一直被认为是阈值自动选取的最佳方法[5]。
Otsu算法选择使类间方差最大的灰度值为阈值。这里设计一个函数cvThresholdOtsu()来实现Otsu算法的原理,该函数的设计思路如下:1)首先计算图像的直方图并归一化;2)计算图像灰度均值;3)计算直方图的零阶和一阶距;4)计算最大的类间方差,找到对应的阈值。
经过实验验证,直接使用函数cvThresholdOtsu()计算出的的阈值进行图像分割,由于照明系统的不同,图像的效果不同,效果也一般。经过实验计算出的阈值乘以一个修正系数0.70,效果更佳。
2.2.3 轮廓检测的实现
OpenCV提供了在二值图像中寻找轮廓的方法cvFindContours(),函数原型如下:
若计算得到的轮廓面积大于设定的阈值面积,就判定出现缺条现象,绘制该缺条区域的轮廓。OpenCV提供了一个绘制轮廓的函数cvDraw Contours(),它可以把筛选出来的轮廓绘制出来。
经过以上三步的图像处理,得到的效果图如图2 所示。
图2 图像处理ROI、图像分割、检测轮廓图
图3 缺条区域矩形边界框图
2.2.4 缺条区域边界框绘制的实现
缺条区域选用矩形边界框,比较符合烟条形状且绘制比较简单。OpenCV提供了得到矩形边界框的函数cvBoundingRect(),该函数得到的是四边水平和竖直的矩形,函数的原型如下:
该函数返回的是一个包围轮廓的CvRect对象。为了绘制这个包围轮廓的矩形框,可以使用绘图函数cvRectangle(),它可以绘制一个矩形框。同时我们还可以利用cvPutText()函数来进行绘制文字操作。绘制结果如图3所示。
目前,机器视觉技术已经广泛应用于烟草行业的产品质量检测领域,极大地促进了工业自动化的发展。OpenCV作为一款优秀的开源视觉库,也将随着机器视觉技术的发展而不断成熟。本文采用Otsu算法进行自适应阈值图像分割, 基于OpenCV进行算法设计,缩短了检测软件的开发周期,检测快速、识别准确,从现场调试的情况看,该系统的各项指标都达到了要求。
[1] 贾云得.机器视觉[M].北京:科学出版社,2000.
[2] Gary Bradski, Adrian Kaebler.Learning OpenCV[M].O'Reilly Media, Inc,2009.
[3] http://www.opencv.org.cn设计.
[4] 黎松,平西建,丁益宏.开放源代码的计算机视觉类库OpenCV的应用[J].计算机应用与软件,2005,22(8):134-136.
[5] 薛孝琴,吴怀宇.一种改进Otsu算法在Kirsch边缘检测中的应用[J].计算机与数字工程,2009,3(37):167.
[6] 陈磊.计算机视觉类库OpenCV在VC中的应用[J].微计算机信息,2007,23(4):169-171.
[7] 张留刚.基于机器视觉技术的烟条检测系统研究[D].南京:南京航空航天大学,2008.
[8] Sonka M,Hlavac V,Boyle R.图像处理与机器视觉[M].北京:人民邮电出版社,2009.
[9] 贾小军,喻擎苍.基于开源计算机视觉库OpenCV的图像处理[J].计算机应用与软件,2008,25(4):276-278.