基于OpenCV 的机器视觉功能开发及在工业生产中的应用

2015-04-25 05:14刘庆宏王声文白彦庆
制造技术与机床 2015年3期
关键词:开源轮廓特征提取

刘庆宏 王声文 白彦庆

(大连光洋科技集团有限公司,辽宁 大连116600)

1 OpenCV 简介及选择OpenCV 的原因

在工业应用方面,机器视觉使机器人、机床具有视觉感知功能,是自动化生产系统,尤其是机器人系统的重要部分之一。机器视觉可以通过获取数字图像,并通过适当的算法进行分析和识别,提取有效信息,用于指导生产。常见的机器视觉可以提供诸如零件定位、机器人运动轨迹规划(障碍物判断)、工件加工质量判断和异常情况检测等功能。机器视觉的加入,使得自动化生产系统可以更加智能地处理工作任务,提高了系统的工作效率,降低了系统对于环境的依赖,拓展了系统的应用领域。

在图像处理和视觉识别方面,目前较为流行的基础库为OpenCV 库。该库的全称是:Open Source Computer Vision Library。OpenCV 是一个开源发行的跨平台计算机视觉库,最初由Intel 公司发起并提供支持。可以运行在Linux、Windows、Mac OS 等桌面操作系统以及Android 和IOS 等移动操作系统上。该库主要由C 和C+ +语言编写完成,运行效率较高,OpenCV 库实现了图像处理和计算机视觉方面的很多通用算法。目前该库最近版本为3.0 alpha 版。OpenCV 库的出现和完善,极大地降低了机器视觉方向的学习以及开发的难度。

进行工业软件开发所采用的基础库必须综合考虑可靠性、稳定性、效率以及成本等问题。OpenCV 作为开源软件,所有代码公开,全世界的计算机视觉专家都可以审查其代码。这保证了该库的可靠性和稳定性,同时如果需要进一步开发,可以直接在已有源代码基础上进行。由于OpenCV 使用运行速度较快的C 和C+ + 语言开发,并且支持多线程运算以及基于OpenCL 的异构运算,充分利用了目前的计算机硬件运算能力,运行效率方面无明显瓶颈。并且由于OpenCV 库开源且免费,使用该库本身成本较低。对比采用MatLab 的视觉识别方案以及类似Halcon 库等商业化平台而言,其商业成本基本可以忽略。

采用开源库开发商业软件或者作为商业应用,必须慎重考虑开源库的版权问题。开源并不代表完全免费,也不代表没有任何约束。目前流行的开源协议有GPL、LGPL、BSD 和MIT 等多种协议,并不是每一种开源协议都允许使用者将开源代码用于闭源的商业软件开发。有的协议,如开源软件中最流行的GPL 协议,甚至要求任何基于遵循该协议的开源软件所做的修改或应用,也要遵循该协议,不允许修改后和衍生的代码作为闭源的商业软件发布和销售,即GPL 协议的开源传染性。这方面比较著名的事件是思科公司的WRT54G 路由器事件,该事件发生于2003 年前后,该路由器的固件被发现是基于Linux 开发而成,而Linux遵循GPL 协议,因此思科公司不得不开放了该型号路由器的固件源代码。虽然后来证明该举动甚至扩大了该款路由器的知名度和销售量,但对于绝大多数商业公司而言,开放产品源代码都是不可接受的,因此在选择开源库用于开发时,必须考虑到开源版权的约束,避免潜在的损失。OpenCV 的绝大部分模块遵循较宽松的BSD 协议。BSD(berkeley software distribution)协议对商业应用较为友好,允许在商业软件中使用甚至修改遵循该协议的代码或库,而商业软件本身代码无须开源,即允许闭源商业化应用,仅要求保留原有开源版权声明,因此应用OpenCV 库进行商业开发限制较少。但要特别注意,由于OpenCV 中包含的一些特定算法,可能是专利算法或收费算法,是不遵循BSD 协议的,比如应用于人脸检测的Ada -boost 算法等,不能直接免费用于商业软件,实际使用中要注意辨别。

2 视觉识别软件实现流程

应用于实际工业生产环境的视觉识别软件的实现通用流程如图1。实际应用中,处理流程按照从左到右的顺序执行。其中OpenCV 库提供的功能,可以覆盖除图像获取部分之外的所有模块。

首先,需要从工业摄像头等设备中获取图像信息。从软件设计的角度讲,通常,工业摄像头可以抽象为流设备,从其驱动中可以读取到连续的图像帧。机器视觉的第1 个模块就是实现从不同的摄像头驱动中获取图像信息并转化为OpenCV 支持的图像数据结构的模块。目前常见的工业相机接口有GIGE Vision、Camera Link、USB 和1394 等接口,OpenCV 提供了原生的USB摄像头以及部分品牌的GIGEVision 相机的支持。实际上,由于通常情况下工业摄像机的厂商会提供设备驱动,因此图像获取部分无须OpenCV 的特别支持。

从原始设备中获取的图像信息,包含噪声、阴影、反光等干扰,影响有效信息判断。需要进行图像增强,如滤波、平滑、开闭、均衡化等图像操作,去除无效干扰信息,加强有效信息。同时,由于很多特征分析算法,都是仅支持单通道图像(黑白图像),甚至针对二值化图像,这里也需要针对具体需求进行图像的转换工作。这些工作均由预处理模块完成,OpenCV 提供了常见的图像操作的支持。

经过预处理后的图像,需要交给特征分析模块进行特征的分析提取工作。目前图像识别方面主要使用的特征包括颜色、纹理、形状等,针对不同的特征,有不同的提取算法,需要根据工作环境以及识别目标进行具体分析。经过特征分析后,获得的是有用的信息描述,而不再是一张图像。例如轮廓特征提取,获取到的是轮廓上所有点的坐标顺序描述链表。

提取到的特征需要与用户事先设定的目标特征进行对比,符合用户要求的特征给予通过,否则放弃。特征对比,针对不同的特征分析,有不同的特征对比算法,如针对轮廓,通常可以采用矩匹配。较有效的方法如Hu 不变矩,该方法对轮廓的缩放和旋转不敏感,可以在实际应用中得到较好的匹配结果。OpenCV 提供了常用的特征提取和匹配算法。

通过特征提取对比等工作后,从原始图像中可以获取到零个至若干个符合结果。所有的结果均处在图像坐标系下,以像素为单位。该信息不能直接用于驱动生产,需要通过畸变矫正、坐标变换等工作将结果的坐标信息(如位置,角度等)从图像坐标系变换到空间坐标系下。该项工作的绝大部分函数在OpenCV 中也有支持。

以上流程是视觉识别的基本工作流程,实际上,还需要例如识别目标特征提取存储、现场光照补偿等其他工作进行保障才能完成机器视觉的全部功能。

3 软件的其他组成部分

视觉识别软件作为完整的商业软件,仅仅提供算法接口实现图像识别的基本功能是不够的,还需要有诸如用户操作界面、数据库保存和索引等诸多外围功能,协助用户完成视觉识别的调试、监控等工作。

OpenCV 提供了跨平台的通用界面接口HighGUI(high-level graphical uer iterface)模块。该模块提供了诸如图像文件读入,图像窗口显示,鼠标事件等操作支持,并提供滑动条,按钮开关等GUI 控件。但该模块仅提供较为基础的界面功能,可以作为简单的可视化工具在OpenCV 学习及软件开发调试过程中使用,并不适合作为商业化软件的界面。实际上,作为软件工程的重要组成部分,GUI 界面通常是有专门的库支持的,如微软公司的MFC 库以及最初由奇趣公司发起的QT 等。为了配合OpenCV 构建跨平台的视觉识别软件,这里采用了基于LGPL 开源协议版本的QT 作为界面库进行用户操作界面的开发以及数据库操作。

4 应用情况

下面以笔者公司实际生产环境下的机器人工件识别解决方案为例,介绍视觉识别工作的流程。

首先,基于设备布局走线、工业环境可靠性、成本等因素综合分析,解决方案的工业摄像头选择了支持POE(power over ethernet)供电的GIGE Vision 接口的工业相机,该接口物理形式与千兆以太网兼容,并能通过RJ45 接口的标准网线同时实现信号的传递与电源供给,可以实现从设备到主机仅用1 根线缆连接的最简布置。同时该接口无需主机有额外的板卡设备,并且相对于USB 等接口有较远的传输距离和更高的可靠性。该方案以较低的成本和复杂度满足了工业需求。

从工业摄像头获取的原始图像,经过预处理、特征提取和特征匹配等工作,最终获取有用的信息供机器人拾取使用,由于图像整体的特征提取流程与目标部分的处理有类似之处,为清晰起见,这里以识别目标的提取处理为例。

如图2 为通过工业摄像头获取的静态图像中截取的目标模板部分原始图像,该图像为8BIT 灰度图像。视觉识别以此为参照,凡是符合该模板特征的部分,均识别为工件。

图3 是经过平滑去噪以及开闭操作后的图像,经过以上操作,图像的背景噪声得到了较好的抑制,并且没有丢失边缘等关键信息。

图4 为经过阈值化操作之后的二值图像,后续的特征提取和分析操作均基于此二值图像。

图5 为针对图4 的二值图像进行轮廓提取后得到的关键轮廓特征,这里采用了工件外轮廓以及4 个最大的螺钉孔轮廓作为特征,以后的识别均以此特征作为目标。

图6 为实际匹配效果,在工件拾取平台上的16 个空位中放置了8 个工件,放置角度均不一致,位置也没有精确对齐,通过图像的轮廓特征比对,最终实现了工件的识别和空位的排除,对于识别出的工件,在图像中绘制了其最小包围盒以及轴对齐包围盒为标志。这里运用了Hu 不变矩匹配,但同时考虑到Hu 不变矩对于轮廓缩放不敏感的问题,综合比较了轮廓的周长和面积,最终取得了满意的效果。

5 结语

OpenCV 计算机视觉函数库,提供了常用的视觉识别算法,并且遵循BSD 开源协议,除了作为科研样本,同样也可以用于工业软件开发,并可以取得较好的识别效果。

[1]Gary Bardski,Adrain kaebler.学习OpenCV 中文版[M].于仕琪,刘瑞祯,译.北京:清华大学出版社,2009.

[2]Mark S Nixon.特征提取与图像处理[M].李实英,杨高波,译.2 版.北京:电子工业出版社,2010.

[3]章毓晋.图像处理和分析基础[M].北京:高等教育出版社,2002.

猜你喜欢
开源轮廓特征提取
OPENCV轮廓识别研究与实践
基于实时轮廓误差估算的数控系统轮廓控制
五毛钱能买多少头牛
2019开源杰出贡献奖
基于Gazebo仿真环境的ORB特征提取与比对的研究
基于Daubechies(dbN)的飞行器音频特征提取
高速公路主动发光轮廓标应用方案设计探讨
Bagging RCSP脑电特征提取算法
一种基于LBP 特征提取和稀疏表示的肝病识别算法
大家说:开源、人工智能及创新