一种基于OpenCV的织物疵点检测方法
2010-11-16陆趣趣陈传克徐晓龙贾小军
陆趣趣,陈传克,徐晓龙,虞 佳,贾小军
(嘉兴学院 数学与信息工程学院, 浙江 嘉兴 314001)
一种基于OpenCV的织物疵点检测方法
陆趣趣,陈传克,徐晓龙,虞 佳,贾小军
(嘉兴学院 数学与信息工程学院, 浙江 嘉兴 314001)
在织物疵点自动检测开发中,传统的图像处理代码编写繁琐、效率不高。OpenCV具有较强的图像处理能力且提供了丰富的图像处理函数,可以把OpenCV运用到织物疵点检测上。以断经、纬疵样本为例,提出在OpenCV环境下采用阈值分割提取疵点图像,利用形态学技术实现噪点分离及断线连接。边缘检测实现了疵点图像在原图像中的准确定位。实验结果表明,OpenCV有简化代码、提高编程效率的图像处理强大功能,疵点检测结果准确,效率高。
OpenCV;疵点检测;阈值分割
在纺织品生产过程中,质量控制与检测非常重要,织物疵点检测是其中最重要的一部分。采用人工检测织物疵点,在检测过程中会由于人的一些主观或客观因素,使检测结果受到影响。如,一个检验员精力集中的最长时间只有20~30 min,超过这个时间就会疲劳,注意力就会降低,引起漏检。检验员的工作状态同时受外界因素的影响,如疵点类型和大小、频率、天气、身体情况等也影响着检查结果。
随着计算机技术及数字图像处理技术的发展,基于图像处理和微机平台的织物疵点自动检测成为可能。以摄像头和图像采集卡获取织物图像信息,由计算机执行相应的图像处理程序来进行织物疵点的监测,这降低了生产成本,提高了产品质量及生产效率,减轻了工人的劳动强度。基于图像处理的织物疵点自动检测克服了人工织物疵点检测的大部分缺点。但如果只使用Matlab,C++,C++.net等一些开发工具来开发编写织物疵点检测程序,会因为代码繁琐,且因编写的代码量大,从而导致代码编写困难,耗时,维护困难。因此需要一个计算机视觉函数库来方便开发和编写图像处理程序。OpenCV[1-4]是计算机视觉库,由一系列C函数和少量C++类构成,它实现了图像处理和计算机视觉方面的很多通用算法,可以非常方便地嵌入到C或C++开发平台,大大缩短应用程序的开发周期,降低代码编写难度。其强大的图像处理功能在计算机视觉领域可以广泛应用。
本研究利用OpenCV数据结构及常用图像处理算法,提出一种织物疵点检测系统新的开发平台,利用此环境,对现有织物疵点算法进行改进,并和OpenCV视觉库结合,开发出具有较高效率的织物疵点检测系统。相对于Matlab,一般的C或C++通用平台,基于OpenCV的疵点检测系统开发周期短,程序运行速度快,疵点检测准确。
1 OpenCV特性
OpenCV具有以下特征:开源计算机视觉库,采用C/C++编写;使用目的是开放实时应用程序;独立于操作系统、硬件和图形管理器;具有通用的图像/视频载入、保存和获取模块;具有底层和高层的应用开发包。
应用OpenCV能实现以下功能:对图像数据的操作,包括分配、释放、复制、设置和转换数据;对图像和视频的输入输出;具有对矩阵和向量的操作以及线性代数的算法程序;可对各种动态数据结构,如列表、队列、集合、树和图进行操作;具有基本数字图像处理能力,如可进行滤波、边缘检测、角点检测、采样和差值、色彩转换、形态操作、直方图和图像金字塔操作;可对各种结构进行分析,包括连接部件分析、轮廓处理、距离变换、各种距的计算、模板匹配、Hough变换、多边形逼近、直线拟合和Delaunay三角划分等;对摄像头的定标,包括发现与跟踪定标模式、定标、基本矩阵估计、齐次矩阵估计和立体对应;对运动的分析,如对光流、运动分割和跟踪的分析;对目标的识别,可采用特征法和隐马尔可夫模型法;具有基本的GUI功能,等等。
OpenCV自1999年1月发布Alpha版本开始,它就被广泛用在许多领域、产品和研究成果中[5]。相关应用包括卫星地图和电子地图的拼接,扫描图像的对齐,医学图像去噪(消噪或滤波),图像中的物体分析,安全和入侵检测系统,自动监视和安全系统,制造业中的产品质量检测系统,摄像机标定,军事应用以及声音和音乐识别等领域。OpenCV的最新版本是于2009年10月1日发布的OpenCV-2.0.0a-win32.exe,文献[6]给出了最新下载地址。
2 .Net下OpenCV视觉库的配置
OpenCV作为一个独立的计算机视觉库,不能直接使用,必须先进行安装。先从官方网站下载OpenCV的最新版本,然后进行安装,安装方法等同于一般应用程序的安装。本研究假设OpenCV安装在目录“C:Program FilesOpenCV”。安装好OpenCV后,为了正确使用OpenCV,须配置其应用环境。不同的编译器,配置方法略有不同。下面给出.Net环境下的配置方法。
第一步,在“我的电脑”的属性选项卡中添加环境变量“C:Program FilesOpenCVlib”。
第二步,打开VC++.net应用程序,在菜单项里选择:Tools→Options。在列表中选择Projects→VC++Directories。从“Show Directories for”的“List Box”中选择“Library files”。单击“Insert New”图标,定位要安装OpenCV的文件夹。假设它安装于“C:Program FilesOpenCV”。在库文件列表中,定位并添加“C:Program FilesOpenCVlib”。
第三步,在“List Box”中选择“Include”文件,定位并添加以下路径:
C:Program FilesOpenCVcvinclude;
C:Program FilesOpenCVcxcoreinclude;
C:Program FilesOpenCVotherlibshighgui。
第四步,选择“List Box”中的“Source”文件,定位并添加以下路径:
C:Program FilesOpenCVcvsrc;
C:Program FilesOpenCVcxcoresrc;
C:Program FilesOpenCVotherlibshighgui。
最后,创建一个项目,在程序开头添加相应的#include语句,并在菜单:“Project”→“Properties”,选择“Link”→“Input”→“Additional Dependencies”。添加所有需要的库,如cv.lib,cxcore.lib,highgui.lib等。完成以上步骤,就可以使用OpenCV函数,运行OpenCV程序。
3 OpenCV疵点检测实现
3.1 算法分析
算法的思想是找出正常图像灰度值的可信区间,把疵点和背景分离,提取出疵点的特征值,最后进行处理。算法分成4个部分:图像采集、计算可信区间、提取疵点特征值、疵点处理。
OpenCV可以从摄像头中采集织物表面图像,采集到的图像是彩色的BMP格式。在分析图像之前可以使用OpenCV中的cvCvtColor函数把采集到的BMP格式的彩色图像转换成灰度图像。
提取疵点特征值,首先要将采集的原图像进行阈值分割[7-9],即把疵点图像从背景图像中分离出来。图像阈值分割的关键是阈值选择。大多单色织物图像都有一个特点:织物图像的灰度值几乎都落在一个较小的灰度值区间内,只有一部分由于布匹本身的纹理、光照条件及采集设备等的影响而落在这个正常灰度值区间之外。疵点图像的灰度值必落在这正常灰度值区间之内,所以找出这个区间,及找到这个区间的上阈值和下阈值就可以把疵点从背景图像分割出来。可通过正态分布求可信区间的方法求出这个区间。
对织物图像进行正态分布求可信区间方法就是把织物图像上的每一点像素点看作一个样本,像素点上的灰度值看作样本值,对其先求解正态分布,及使用OpenCV的cvAvgSdv函数统计图像像素点的平均灰度值mean和标准差devc。最后求上阈值为:mean+2.5*devc.下阈值为:mean-2.5*devc。可信区间为[下阈值,上阈值]。使用正态分布求可信区间的方法的优点是可以较大程度地减少噪点对阈值选择的影响。
图1a是正常织物图像,图1b是其灰度图像像素值从[117,255]的直方图。计算其可信区间为[140,175],在这区间内的像素点数为65 357点,占总像素点数的99.72 %。图1c为断经疵点图像,图1d为其灰度图像从[117,255]的像素值直方图。对比图1b和图1d,疵点主要在直方图1d的左边部分,即灰度值[124,139]区间内。在这区间内的像素数占总像素数的1.54 %。实际疵点所占像素点约为1 548点,占总像素的2.32 %。从上述数据表明,此方法可行。
图1 正常织物和疵点织物及其直方图Fig.1 Normal and Defect Fabrics and their Histograms
3.2 实验过程
以处理含有断经、纬疵的疵点图像的实验为例,利用OpenCV计算机视觉函数库在.Net平台下编写上述算法,实现织物疵点检测。以下是实验过程中一些运行图片和疵点处理办法。
图2是经OpenCV中的cvCvtColor函数转换得到的灰度图像,分别是断经、纬疵。利用上述的正态分布求可信区间方法得到双阈值,对灰度疵点图像使用cvThreshold函数进行阈值二值化分割,得到疵点特征值图像,如图3所示。
图2 灰度图像Fig.2 Gray Images
图3 阈值分割后的疵点图Fig.3 Segmentation Results of Fabric Images
图3的疵点特征图像有很多噪点,利用OpenCV中的cvMorphologyEx形态函数和cvErode腐蚀函数除去这些噪点,处理效果见图4。
图4 腐蚀运算后的疵点图像Fig.4 Eroded Results of Fabric Images
经过噪点处理,图像中仍然存在一些孤立点。这些孤立点大部分是布匹的小疵点。处理这些孤立点的思想是:先把小于一定点尺寸的孤立点当作噪点除去;再把尺寸稍大的孤立点当作疵点与邻近的疵点相连接起来。调用OpenCV中cvFindContours函数计算各个孤立点的周长,根据周长剔除噪点。孤立点相连就需要调用OpenCV中cvGetReal2D函数和cvSetReal2D函数,逐个访问图像中的像素点和修改图像中的像素值,结果见图5。
图5 对孤立点处理后的图像Fig.5 Processed Results for Isolated Pixels
最后调用cvCanny边缘检测函数对图5中二值化的疵点图像进行边缘检测。再调用cvCopy函数在原彩色疵点图像中勾画出疵点轮廓,进行疵点定位,结果见图6。
图6 织物图像的检测结果Fig.6 Located Results for Fabric Images
4 结 论
在上述实验中,核心代码只有120行。说明OpenCV的图像处理能力较强,代码编写效率高,解决了程序代码编写繁琐、效率不高等问题。如在程序中要对图像进行边缘检测这种需要大量代码实现的功能时,只需要调用OpenCV中的边缘检测函数,使用一条语句即可,而且疵点检测、定位准确。OpenCV是织物疵点自动检测研究的一个好工具,在织物疵点检测中可以广泛使用,提高编程效率。
[1] 刘瑞祯,于仕琪.OpenCV教程——基础篇[M].北京:北京航空航天大学出版社,2007.
[2] 贾小军,喻擎苍. 基于开源计算机视觉库OpenCV的图像处理[J].计算机应用与软件,2008,25(4):276-278.
[3] YU Qingcang, CHENG Harry H, CHENG Wayne W, et al.CH OpenCV for Interactive Open Architecture Computer Vision[J]. Advances in Engineering Software, 2004.35(9): 527-536.
[4] YU Qingcang, CHENG Harry H, CHENG Wayne W, et al.Interactive Open Architecture Computer Vision[C]//15th IEEE International Conference on Tools with Artificial Intelligence(ICTAI’03).Sacramento, California,USA: IEIE Computer Society, 11, 2003: 406-410.
[5] 于仕琪,刘瑞祯.学习OpenCV[M].北京:清华大学出版社,2009.
[6] OpenCV-2.0.0a-win32.exe[CP/OL].(2009-10-15)[2009-11-05].http://sourceforge.net/pro- jects /opencvlibrary/files/.
[7] 刘晶璟,刘素一. 基于链码的织物疵点图像形态特征提取[J]. 现代电子技术,2007,30(23):155-157.
[8] RADOVAN S, PANAGIOTIS M, CHRISTOS K,et al.Realtime Vision-based System for Textile Fabric Inspection[J].Real-Time Imaging,2001,7(6):507-518.
[9] 刘建立,左保齐.基于小波变换和阈值分割的织物疵点边缘检测[J]. 丝绸,2008(8):42-44,50.
A Method of Fabric Defects Detection Based on OpenCV
LU Qu-qu, CHEN Chuan-ke, XU Xiao-long, YU Jia, JIA Xiao-jun
(College of Mathematics and Information Engineering, Jiaxing College, Jiaxing 314001, China)
In the fabric defects automatic detection development, traditional image processing code compilation is tedious and inefficient. OpenCV has powerful image processing ability and providing rich image processing functions, which may be utilized to process fabric defects detection. This paper took broken end, irregular pick fabric as the examples. Under OpenCV environment, using the thresholding segmentation to extract fabric defects image. Morphological techniques can remove noise pixels and connect broken lines. Edge detection achieves positioning defect image in the original image. The experimental results showed that OpenCV had the powerful functions of simplifying code, raising efficiency to process images, and the results of fabric detection were accurate and efficient.
OpenCV; Defects detection; Threshold segmentation
TS101.9;TN911.73
A
1001-7003(2010)04-0038-04
2009-11-05;
2010-03-10
浙江省教育厅大学生科技创新项目;嘉兴市科技局项目(2008AY2014)
陆趣趣(1987- ),男,计算机科学与技术专业,本科生。通讯作者:贾小军,副教授,xjjiad@sina.com。