陸趣趣,陳傳克,徐曉龍,虞 佳,賈小軍
(嘉興學院 數學與信息工程學院, 浙江 嘉興 314001)
一種基于OpenCV的織物疵點檢測方法
陸趣趣,陳傳克,徐曉龍,虞 佳,賈小軍
(嘉興學院 數學與信息工程學院, 浙江 嘉興 314001)
在織物疵點自動檢測開發(fā)中,傳統(tǒng)的圖像處理代碼編寫繁瑣、效率不高。OpenCV具有較強的圖像處理能力且提供了豐富的圖像處理函數,可以把OpenCV運用到織物疵點檢測上。以斷經、緯疵樣本為例,提出在OpenCV環(huán)境下采用閾值分割提取疵點圖像,利用形態(tài)學技術實現噪點分離及斷線連接。邊緣檢測實現了疵點圖像在原圖像中的準確定位。實驗結果表明,OpenCV有簡化代碼、提高編程效率的圖像處理強大功能,疵點檢測結果準確,效率高。
OpenCV;疵點檢測;閾值分割
在紡織品生產過程中,質量控制與檢測非常重要,織物疵點檢測是其中最重要的一部分。采用人工檢測織物疵點,在檢測過程中會由于人的一些主觀或客觀因素,使檢測結果受到影響。如,一個檢驗員精力集中的最長時間只有20~30 min,超過這個時間就會疲勞,注意力就會降低,引起漏檢。檢驗員的工作狀態(tài)同時受外界因素的影響,如疵點類型和大小、頻率、天氣、身體情況等也影響著檢查結果。
隨著計算機技術及數字圖像處理技術的發(fā)展,基于圖像處理和微機平臺的織物疵點自動檢測成為可能。以攝像頭和圖像采集卡獲取織物圖像信息,由計算機執(zhí)行相應的圖像處理程序來進行織物疵點的監(jiān)測,這降低了生產成本,提高了產品質量及生產效率,減輕了工人的勞動強度?;趫D像處理的織物疵點自動檢測克服了人工織物疵點檢測的大部分缺點。但如果只使用Matlab,C++,C++.net等一些開發(fā)工具來開發(fā)編寫織物疵點檢測程序,會因為代碼繁瑣,且因編寫的代碼量大,從而導致代碼編寫困難,耗時,維護困難。因此需要一個計算機視覺函數庫來方便開發(fā)和編寫圖像處理程序。OpenCV[1-4]是計算機視覺庫,由一系列C函數和少量C++類構成,它實現了圖像處理和計算機視覺方面的很多通用算法,可以非常方便地嵌入到C或C++開發(fā)平臺,大大縮短應用程序的開發(fā)周期,降低代碼編寫難度。其強大的圖像處理功能在計算機視覺領域可以廣泛應用。
本研究利用OpenCV數據結構及常用圖像處理算法,提出一種織物疵點檢測系統(tǒng)新的開發(fā)平臺,利用此環(huán)境,對現有織物疵點算法進行改進,并和OpenCV視覺庫結合,開發(fā)出具有較高效率的織物疵點檢測系統(tǒng)。相對于Matlab,一般的C或C++通用平臺,基于OpenCV的疵點檢測系統(tǒng)開發(fā)周期短,程序運行速度快,疵點檢測準確。
OpenCV具有以下特征:開源計算機視覺庫,采用C/C++編寫;使用目的是開放實時應用程序;獨立于操作系統(tǒng)、硬件和圖形管理器;具有通用的圖像/視頻載入、保存和獲取模塊;具有底層和高層的應用開發(fā)包。
應用OpenCV能實現以下功能:對圖像數據的操作,包括分配、釋放、復制、設置和轉換數據;對圖像和視頻的輸入輸出;具有對矩陣和向量的操作以及線性代數的算法程序;可對各種動態(tài)數據結構,如列表、隊列、集合、樹和圖進行操作;具有基本數字圖像處理能力,如可進行濾波、邊緣檢測、角點檢測、采樣和差值、色彩轉換、形態(tài)操作、直方圖和圖像金字塔操作;可對各種結構進行分析,包括連接部件分析、輪廓處理、距離變換、各種距的計算、模板匹配、Hough變換、多邊形逼近、直線擬合和Delaunay三角劃分等;對攝像頭的定標,包括發(fā)現與跟蹤定標模式、定標、基本矩陣估計、齊次矩陣估計和立體對應;對運動的分析,如對光流、運動分割和跟蹤的分析;對目標的識別,可采用特征法和隱馬爾可夫模型法;具有基本的GUI功能,等等。
OpenCV自1999年1月發(fā)布Alpha版本開始,它就被廣泛用在許多領域、產品和研究成果中[5]。相關應用包括衛(wèi)星地圖和電子地圖的拼接,掃描圖像的對齊,醫(yī)學圖像去噪(消噪或濾波),圖像中的物體分析,安全和入侵檢測系統(tǒng),自動監(jiān)視和安全系統(tǒng),制造業(yè)中的產品質量檢測系統(tǒng),攝像機標定,軍事應用以及聲音和音樂識別等領域。OpenCV的最新版本是于2009年10月1日發(fā)布的OpenCV-2.0.0a-win32.exe,文獻[6]給出了最新下載地址。
OpenCV作為一個獨立的計算機視覺庫,不能直接使用,必須先進行安裝。先從官方網站下載OpenCV的最新版本,然后進行安裝,安裝方法等同于一般應用程序的安裝。本研究假設OpenCV安裝在目錄“C:Program FilesOpenCV”。安裝好OpenCV后,為了正確使用OpenCV,須配置其應用環(huán)境。不同的編譯器,配置方法略有不同。下面給出.Net環(huán)境下的配置方法。
第一步,在“我的電腦”的屬性選項卡中添加環(huán)境變量“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。
最后,創(chuàng)建一個項目,在程序開頭添加相應的#include語句,并在菜單:“Project”→“Properties”,選擇“Link”→“Input”→“Additional Dependencies”。添加所有需要的庫,如cv.lib,cxcore.lib,highgui.lib等。完成以上步驟,就可以使用OpenCV函數,運行OpenCV程序。
算法的思想是找出正常圖像灰度值的可信區(qū)間,把疵點和背景分離,提取出疵點的特征值,最后進行處理。算法分成4個部分:圖像采集、計算可信區(qū)間、提取疵點特征值、疵點處理。
OpenCV可以從攝像頭中采集織物表面圖像,采集到的圖像是彩色的BMP格式。在分析圖像之前可以使用OpenCV中的cvCvtColor函數把采集到的BMP格式的彩色圖像轉換成灰度圖像。
提取疵點特征值,首先要將采集的原圖像進行閾值分割[7-9],即把疵點圖像從背景圖像中分離出來。圖像閾值分割的關鍵是閾值選擇。大多單色織物圖像都有一個特點:織物圖像的灰度值幾乎都落在一個較小的灰度值區(qū)間內,只有一部分由于布匹本身的紋理、光照條件及采集設備等的影響而落在這個正?;叶戎祬^(qū)間之外。疵點圖像的灰度值必落在這正?;叶戎祬^(qū)間之內,所以找出這個區(qū)間,及找到這個區(qū)間的上閾值和下閾值就可以把疵點從背景圖像分割出來??赏ㄟ^正態(tài)分布求可信區(qū)間的方法求出這個區(qū)間。
對織物圖像進行正態(tài)分布求可信區(qū)間方法就是把織物圖像上的每一點像素點看作一個樣本,像素點上的灰度值看作樣本值,對其先求解正態(tài)分布,及使用OpenCV的cvAvgSdv函數統(tǒng)計圖像像素點的平均灰度值mean和標準差devc。最后求上閾值為:mean+2.5*devc.下閾值為:mean-2.5*devc。可信區(qū)間為[下閾值,上閾值]。使用正態(tài)分布求可信區(qū)間的方法的優(yōu)點是可以較大程度地減少噪點對閾值選擇的影響。
圖1a是正??椢飯D像,圖1b是其灰度圖像像素值從[117,255]的直方圖。計算其可信區(qū)間為[140,175],在這區(qū)間內的像素點數為65 357點,占總像素點數的99.72 %。圖1c為斷經疵點圖像,圖1d為其灰度圖像從[117,255]的像素值直方圖。對比圖1b和圖1d,疵點主要在直方圖1d的左邊部分,即灰度值[124,139]區(qū)間內。在這區(qū)間內的像素數占總像素數的1.54 %。實際疵點所占像素點約為1 548點,占總像素的2.32 %。從上述數據表明,此方法可行。
圖1 正??椢锖痛命c織物及其直方圖Fig.1 Normal and Defect Fabrics and their Histograms
以處理含有斷經、緯疵的疵點圖像的實驗為例,利用OpenCV計算機視覺函數庫在.Net平臺下編寫上述算法,實現織物疵點檢測。以下是實驗過程中一些運行圖片和疵點處理辦法。
圖2是經OpenCV中的cvCvtColor函數轉換得到的灰度圖像,分別是斷經、緯疵。利用上述的正態(tài)分布求可信區(qū)間方法得到雙閾值,對灰度疵點圖像使用cvThreshold函數進行閾值二值化分割,得到疵點特征值圖像,如圖3所示。
圖2 灰度圖像Fig.2 Gray Images
圖3 閾值分割后的疵點圖Fig.3 Segmentation Results of Fabric Images
圖3的疵點特征圖像有很多噪點,利用OpenCV中的cvMorphologyEx形態(tài)函數和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
在上述實驗中,核心代碼只有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] 劉晶璟,劉素一. 基于鏈碼的織物疵點圖像形態(tài)特征提取[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
浙江省教育廳大學生科技創(chuàng)新項目;嘉興市科技局項目(2008AY2014)
陸趣趣(1987- ),男,計算機科學與技術專業(yè),本科生。通訊作者:賈小軍,副教授,xjjiad@sina.com。