曹維林,李 捷,孫順凱,陸海華,陳海濤,陳 明,陳思蕭,沈苗杰
浙江中煙工業(yè)有限責(zé)任公司寧波卷煙廠,浙江省寧波市奉化經(jīng)濟開發(fā)區(qū)葭浦西路2001號 315504
隨著煙草行業(yè)“降本增效”要求的提出,卷煙生產(chǎn)過程中的材料消耗越來越受到關(guān)注,濾棒消耗也是其重要組成部分。考察濾棒消耗的前提條件是精確統(tǒng)計每托盤濾棒數(shù)量,但目前煙草行業(yè)尚未建立起有效檢測濾棒數(shù)量的方法,卷煙企業(yè)大多采用稱重法、人工計數(shù)法、經(jīng)驗法等方法進行統(tǒng)計,存在統(tǒng)計速度慢、效率低、誤差大等問題。針對此問題,李哲[1]提出在發(fā)射機端的每個發(fā)射管道內(nèi)配置一個伺服控制器,用于控制濾棒發(fā)射時間并對發(fā)射的濾棒數(shù)量進行計數(shù),但由于伺服控制器安裝在發(fā)射管道內(nèi),如果濾棒在進入發(fā)射管道前,設(shè)備出現(xiàn)故障導(dǎo)致濾棒損壞而產(chǎn)生的濾棒消耗則無法統(tǒng)計,因此存在一定誤差。當(dāng)前數(shù)字圖像處理[2]、機器視覺[3]等技術(shù)在物體數(shù)量檢測方面已有較多研究報道。1972年,Duda等[4]首次提出了基于霍夫變換(Circle Hough Transform,CHT)的圓檢測算法,該算法結(jié)構(gòu)簡單,抗噪能力強,但計算量和存儲量大,在工業(yè)檢測時效性要求下,存在速度慢、效率低等缺陷。邊緣是圖像基本特征之一,邊緣檢測在圖像處理、機器視覺、目標(biāo)檢測與識別、圖像分割等領(lǐng)域應(yīng)用廣泛[5-8]。其中,Canny算子[6-7,9-10]、Log 算子[11]、Sobel算子[12]等都是對圖像邊緣進行檢測的微分算子方法,通過微分檢測圖像中邊緣灰度值的變化進而檢測出邊緣信息。Canny算子檢測出的邊緣較細(xì),定位較準(zhǔn)確,但容易受梯度幅值和雙閾值的影響,且不具有自適應(yīng)性;Log算子首先對圖像進行平滑濾波去噪,但濾除噪聲效果越好,圖像損失的細(xì)節(jié)越多,同時也會濾除邊緣信息,因此在邊緣信息精度與濾除噪聲之間存在矛盾;Sobel算子通過計算像素四鄰域梯度值來檢測邊緣信息,可以較好地檢測低噪聲圖像,但對于混合復(fù)雜、多噪聲圖像處理效果不佳。OpenCV(Open Source Computer Vision Library)[7,10,13]是 Intel公司開發(fā)的由 C 函數(shù)和部分C++庫構(gòu)成的開源計算機視覺庫,平臺功能強大且支持Canny算子,具有代碼開源、圖像及計算機視覺處理函數(shù)豐富、執(zhí)行效率高、跨平臺性好等優(yōu)點,廣泛應(yīng)用于圖像特征檢測、物體運動跟蹤與識別、醫(yī)學(xué)成像等領(lǐng)域。為此,基于Canny算子建立了一種濾棒數(shù)量檢測方法,以期提高濾棒數(shù)量統(tǒng)計精確性,為降低卷煙生產(chǎn)消耗提供數(shù)據(jù)支持。
長支煙、中支煙和短支煙濾棒樣品,圓周分別為(24.50±0.20)mm、(24.20±0.20)mm 和(22.00±0.20)mm(均由浙江中煙工業(yè)有限責(zé)任公司寧波卷煙廠提供),各隨機抽取20托盤共60托盤進行編號。
CCD 相 機(acA4112-8gm-Basler ace,德 國Basler集團);鏡頭(Lens Kowa LM12HC F1.4 f12.5mm 1",日本興和集團);光源(條形白光);筆記本電腦(ThinkPad T480,聯(lián)想集團),硬件環(huán)境為:Windows10(64)+Intel(R)Core(TM)i5-8250U CPU@1.60GHz 1.80GHz+8GB RAM。
首先利用Canny算子對托盤濾棒進行邊緣檢測,再利用圖像形態(tài)學(xué)中的膨脹運算對邊緣進行處理[14],從而精確定位濾棒位置。Canny算子檢測圖像邊緣時分為4步:①使用高斯濾波函數(shù)對圖像進行濾波去噪;②對去噪后圖像計算梯度幅值;③在梯度幅值方向上進行非極大值抑制;④通過雙閾值處理實現(xiàn)邊緣點檢測及連接[10,15]。
1.3.1 高斯濾波
Canny算子使用的是高斯濾波器,其在圖像處理中去噪性能優(yōu)越,通過濾波模板與原圖進行卷積,對圖像進行平滑處理,二維高斯函數(shù)為:

式中:σ是人為設(shè)置的一個重要參數(shù),決定了圖像的平滑程度。σ值過大會使圖像過于平滑,丟失有用的邊緣信息;σ值過小會降低對噪聲的抑制效果,出現(xiàn)虛假邊緣信息。
由式(1)可得到其梯度矢量公式:

為提高運算速度,對式(2)中的濾波卷積模板進行分解,分別得到x和y方向的一維濾波器:

1.3.2 梯度幅值和方向
利用計算機進行數(shù)字圖像處理時,通常通過2×2窗口的一階偏導(dǎo)數(shù)有限差分進行計算,那么圖像I(i,j)在x和y方向的偏導(dǎo)數(shù)分別為:

1.3.3 非極大值抑制
為得到更精細(xì)的圖像邊緣信息,需要對圖像進行梯度方向的非極大值抑制。具體過程為:遍歷圖像,計算出每一個像素點的梯度幅值和方向,若某個像素點的幅值小于該像素點梯度方向上其他任意兩個像素幅值中的任意一個,那么該像素點判定為非邊緣點,同時將該點的幅值設(shè)置為0;否則該像素點可能為邊緣點。
1.3.4 雙閾值檢測和邊緣連接
如果將非極大值抑制圖像中梯度值不為0的像素點連接成邊緣,那么這些邊緣中肯定會包含大量虛假邊緣。因此,在Canny算子中需要對非極大值抑制后的圖像進行雙閾值處理,以消除虛假邊緣以及間斷邊緣。具體過程為:分別設(shè)置高低兩個閾值,對非極大值抑制圖像的邊緣灰度值進行統(tǒng)計分析,灰度值大于高閾值的像素點全部提取,直接作為選定的邊緣像素點,此時虛假邊緣較少,但間斷點會較多;將灰度值小于低閾值的像素點作為非邊緣像素點,此時圖像邊緣信息較全面,但也會包含虛假邊緣。為此,通過高低閾值分別處理兩幅圖像。利用高閾值將選定的邊緣像素點連接成線,利用低閾值將灰度值處于低閾值與高閾值之間的像素點提取出來;當(dāng)遇到間斷點時,如果提取的像素點與選定的邊緣像素點是相連接的,則認(rèn)為這些像素點也是邊緣。如此往復(fù),直至得到連續(xù)的邊緣。
基于圖像處理技術(shù),利用Python3版本的計算機編程語言、OpenCV及其豐富的函數(shù)庫,通過采用Canny算子對托盤濾棒進行邊緣檢測,并最終檢測出濾棒數(shù)量。檢測流程見圖1。

圖1 濾棒數(shù)量檢測方法流程圖Fig.1 Flow chart of counting method for filter rods
Step1:讀取圖片Img。使用高清相機拍攝濾棒圖像,利用函數(shù)cv2.imread()讀取圖片。
Step2:Img轉(zhuǎn)灰度圖Gray。利用函數(shù)cv2.cvtColor()實現(xiàn)圖像Img的灰度化,見圖2。

圖2 濾棒灰度圖Fig.2 Grayscale images of filter rods
Step3:Gray轉(zhuǎn)二值圖Binary。Gray中像素點灰度值高于127的置為255,否則置為0。利用函數(shù)cv2.threshold()實現(xiàn)圖像二值化,見圖3。Step4:通過Canny算子對Gray進行邊緣檢測。利用函數(shù)cv2.Canny()得到濾棒邊緣圖Edges,見圖4。

圖3 濾棒二值圖Fig.3 Binary images of filter rods

圖4 濾棒邊緣圖Fig.4 Edge images of filter rods
Step5:利用Edges進行膨脹運算得到圖像Dilate。由于一個托盤中濾棒數(shù)量較多,排列緊密且顏色差異不大,利用Canny算子雖然可以檢測出濾棒的大致邊緣,但仍會存在間斷點和虛偽邊緣,因此需要對這些邊緣進行處理。膨脹是圖像形態(tài)學(xué)基本運算之一,通過對圖像中白色部分(高亮部分)進行膨脹,可以擴大圖像的高亮區(qū)域。利用函數(shù)cv2.dilate()進行膨脹運算,見圖5。

圖5 邊緣膨脹圖Fig.5 Images of dilated edges
Step6:利用Binary減去Dilate得到濾棒位置Result_Canny。圖5中的高亮(白色)部分為邊緣膨脹后的結(jié)果,雖已經(jīng)看不出濾棒邊緣形狀,但消除了間斷點和虛偽邊緣,此時在二值圖Binary中,去除膨脹后邊緣即可得到濾棒大致位置。利用函數(shù)cv2.subtract()得到濾棒位置圖,見圖6。

圖6 濾棒位置圖Fig.6 Images of filter rod positions
Step7:利用Result_Canny進行膨脹得到濾棒形狀Result_Canny_Dilate。對圖6再次進行膨脹運算,即可恢復(fù)濾棒原始形狀。為了提高濾棒數(shù)量檢測精度,膨脹后的高亮部分不可粘連在一起,見圖7。
Step8:檢測Result_Canny_Dilate中每支濾棒的圓心和半徑。圓心數(shù)量Count即為濾棒數(shù)量,利用函數(shù)cv2.findContours()實現(xiàn)圓心和半徑檢測。

圖7 濾棒圖Fig.7 Images of filter rods
Step9:通過檢測出的圓心和半徑在Img中畫圓得到檢測結(jié)果Result_Img。利用函數(shù)cv2.circle()得到檢測結(jié)果,見圖8。

圖8 濾棒檢測結(jié)果圖Fig.8 Image of detection result of filter rods
由表1可見,長支煙、中支煙和短支煙濾棒各20托盤,長支煙濾棒誤檢率0.14%,漏檢率0.99%,準(zhǔn)確率99.01%;中支煙濾棒誤檢率0.08%,漏檢率0.66%,準(zhǔn)確率99.34%;短支煙濾棒誤檢率0.08%,漏檢率0.67%,準(zhǔn)確率99.33%。系統(tǒng)平均準(zhǔn)確率達到99.27%,平均耗時3.97 s/托盤,表明該檢測方法具有較高的準(zhǔn)確性和通用性。根據(jù)表1數(shù)據(jù)計算可得,長支煙、中支煙、短支煙濾棒檢測準(zhǔn)確率標(biāo)準(zhǔn)偏差分別為0.28、0.36、0.42,離散程度較低,表明該方法具有較好的魯棒性。此外,相同數(shù)據(jù)采用經(jīng)驗法進行統(tǒng)計,長支煙、中支煙、短支煙濾棒檢測準(zhǔn)確率分別為98.63%、98.69%和97.67%,平均為98.33%。可見,采用本方法檢測準(zhǔn)確率可提高0.94百分點。

表1 濾棒數(shù)量檢測數(shù)據(jù)Tab.1 Detection data of filter rod number

表1(續(xù))
基于Canny算子對整托盤濾棒進行邊緣檢測,再利用膨脹運算和濾棒的圓形特性,精確定位濾棒位置,從而檢測出濾棒數(shù)量。以長支煙、中支煙和短支煙濾棒樣品為對象進行測試,結(jié)果表明:該檢測方法能夠?qū)崿F(xiàn)濾棒數(shù)量的精確統(tǒng)計,準(zhǔn)確率達到99.27%,且不會因濾棒圓周變化而無法檢測其邊緣,適用于各種圓周濾棒,具有較好的通用性和魯棒性。在實際生產(chǎn)中若能使用更高配置的計算機,將會進一步降低檢測耗時,提高檢測效率。