曹維林,李 捷,孫順凱,陸海華,陳海濤,陳 明,陳思蕭,沈苗杰
浙江中煙工業(yè)有限責(zé)任公司寧波卷煙廠,浙江省寧波市奉化經(jīng)濟(jì)開發(fā)區(qū)葭浦西路2001號(hào) 315504
隨著煙草行業(yè)“降本增效”要求的提出,卷煙生產(chǎn)過(guò)程中的材料消耗越來(lái)越受到關(guān)注,濾棒消耗也是其重要組成部分。考察濾棒消耗的前提條件是精確統(tǒng)計(jì)每托盤濾棒數(shù)量,但目前煙草行業(yè)尚未建立起有效檢測(cè)濾棒數(shù)量的方法,卷煙企業(yè)大多采用稱重法、人工計(jì)數(shù)法、經(jīng)驗(yàn)法等方法進(jìn)行統(tǒng)計(jì),存在統(tǒng)計(jì)速度慢、效率低、誤差大等問(wèn)題。針對(duì)此問(wèn)題,李哲[1]提出在發(fā)射機(jī)端的每個(gè)發(fā)射管道內(nèi)配置一個(gè)伺服控制器,用于控制濾棒發(fā)射時(shí)間并對(duì)發(fā)射的濾棒數(shù)量進(jìn)行計(jì)數(shù),但由于伺服控制器安裝在發(fā)射管道內(nèi),如果濾棒在進(jìn)入發(fā)射管道前,設(shè)備出現(xiàn)故障導(dǎo)致濾棒損壞而產(chǎn)生的濾棒消耗則無(wú)法統(tǒng)計(jì),因此存在一定誤差。當(dāng)前數(shù)字圖像處理[2]、機(jī)器視覺[3]等技術(shù)在物體數(shù)量檢測(cè)方面已有較多研究報(bào)道。1972年,Duda等[4]首次提出了基于霍夫變換(Circle Hough Transform,CHT)的圓檢測(cè)算法,該算法結(jié)構(gòu)簡(jiǎn)單,抗噪能力強(qiáng),但計(jì)算量和存儲(chǔ)量大,在工業(yè)檢測(cè)時(shí)效性要求下,存在速度慢、效率低等缺陷。邊緣是圖像基本特征之一,邊緣檢測(cè)在圖像處理、機(jī)器視覺、目標(biāo)檢測(cè)與識(shí)別、圖像分割等領(lǐng)域應(yīng)用廣泛[5-8]。其中,Canny算子[6-7,9-10]、Log 算子[11]、Sobel算子[12]等都是對(duì)圖像邊緣進(jìn)行檢測(cè)的微分算子方法,通過(guò)微分檢測(cè)圖像中邊緣灰度值的變化進(jìn)而檢測(cè)出邊緣信息。Canny算子檢測(cè)出的邊緣較細(xì),定位較準(zhǔn)確,但容易受梯度幅值和雙閾值的影響,且不具有自適應(yīng)性;Log算子首先對(duì)圖像進(jìn)行平滑濾波去噪,但濾除噪聲效果越好,圖像損失的細(xì)節(jié)越多,同時(shí)也會(huì)濾除邊緣信息,因此在邊緣信息精度與濾除噪聲之間存在矛盾;Sobel算子通過(guò)計(jì)算像素四鄰域梯度值來(lái)檢測(cè)邊緣信息,可以較好地檢測(cè)低噪聲圖像,但對(duì)于混合復(fù)雜、多噪聲圖像處理效果不佳。OpenCV(Open Source Computer Vision Library)[7,10,13]是 Intel公司開發(fā)的由 C 函數(shù)和部分C++庫(kù)構(gòu)成的開源計(jì)算機(jī)視覺庫(kù),平臺(tái)功能強(qiáng)大且支持Canny算子,具有代碼開源、圖像及計(jì)算機(jī)視覺處理函數(shù)豐富、執(zhí)行效率高、跨平臺(tái)性好等優(yōu)點(diǎn),廣泛應(yīng)用于圖像特征檢測(cè)、物體運(yùn)動(dòng)跟蹤與識(shí)別、醫(yī)學(xué)成像等領(lǐng)域。為此,基于Canny算子建立了一種濾棒數(shù)量檢測(cè)方法,以期提高濾棒數(shù)量統(tǒng)計(jì)精確性,為降低卷煙生產(chǎn)消耗提供數(shù)據(jù)支持。
長(zhǎng)支煙、中支煙和短支煙濾棒樣品,圓周分別為(24.50±0.20)mm、(24.20±0.20)mm 和(22.00±0.20)mm(均由浙江中煙工業(yè)有限責(zé)任公司寧波卷煙廠提供),各隨機(jī)抽取20托盤共60托盤進(jìn)行編號(hào)。
CCD 相 機(jī)(acA4112-8gm-Basler ace,德 國(guó)Basler集團(tuán));鏡頭(Lens Kowa LM12HC F1.4 f12.5mm 1",日本興和集團(tuán));光源(條形白光);筆記本電腦(ThinkPad T480,聯(lián)想集團(tuán)),硬件環(huán)境為:Windows10(64)+Intel(R)Core(TM)i5-8250U CPU@1.60GHz 1.80GHz+8GB RAM。
首先利用Canny算子對(duì)托盤濾棒進(jìn)行邊緣檢測(cè),再利用圖像形態(tài)學(xué)中的膨脹運(yùn)算對(duì)邊緣進(jìn)行處理[14],從而精確定位濾棒位置。Canny算子檢測(cè)圖像邊緣時(shí)分為4步:①使用高斯濾波函數(shù)對(duì)圖像進(jìn)行濾波去噪;②對(duì)去噪后圖像計(jì)算梯度幅值;③在梯度幅值方向上進(jìn)行非極大值抑制;④通過(guò)雙閾值處理實(shí)現(xiàn)邊緣點(diǎn)檢測(cè)及連接[10,15]。
1.3.1 高斯濾波
Canny算子使用的是高斯濾波器,其在圖像處理中去噪性能優(yōu)越,通過(guò)濾波模板與原圖進(jìn)行卷積,對(duì)圖像進(jìn)行平滑處理,二維高斯函數(shù)為:
式中:σ是人為設(shè)置的一個(gè)重要參數(shù),決定了圖像的平滑程度。σ值過(guò)大會(huì)使圖像過(guò)于平滑,丟失有用的邊緣信息;σ值過(guò)小會(huì)降低對(duì)噪聲的抑制效果,出現(xiàn)虛假邊緣信息。
由式(1)可得到其梯度矢量公式:
為提高運(yùn)算速度,對(duì)式(2)中的濾波卷積模板進(jìn)行分解,分別得到x和y方向的一維濾波器:
1.3.2 梯度幅值和方向
利用計(jì)算機(jī)進(jìn)行數(shù)字圖像處理時(shí),通常通過(guò)2×2窗口的一階偏導(dǎo)數(shù)有限差分進(jìn)行計(jì)算,那么圖像I(i,j)在x和y方向的偏導(dǎo)數(shù)分別為:
1.3.3 非極大值抑制
為得到更精細(xì)的圖像邊緣信息,需要對(duì)圖像進(jìn)行梯度方向的非極大值抑制。具體過(guò)程為:遍歷圖像,計(jì)算出每一個(gè)像素點(diǎn)的梯度幅值和方向,若某個(gè)像素點(diǎn)的幅值小于該像素點(diǎn)梯度方向上其他任意兩個(gè)像素幅值中的任意一個(gè),那么該像素點(diǎn)判定為非邊緣點(diǎn),同時(shí)將該點(diǎn)的幅值設(shè)置為0;否則該像素點(diǎn)可能為邊緣點(diǎn)。
1.3.4 雙閾值檢測(cè)和邊緣連接
如果將非極大值抑制圖像中梯度值不為0的像素點(diǎn)連接成邊緣,那么這些邊緣中肯定會(huì)包含大量虛假邊緣。因此,在Canny算子中需要對(duì)非極大值抑制后的圖像進(jìn)行雙閾值處理,以消除虛假邊緣以及間斷邊緣。具體過(guò)程為:分別設(shè)置高低兩個(gè)閾值,對(duì)非極大值抑制圖像的邊緣灰度值進(jìn)行統(tǒng)計(jì)分析,灰度值大于高閾值的像素點(diǎn)全部提取,直接作為選定的邊緣像素點(diǎn),此時(shí)虛假邊緣較少,但間斷點(diǎn)會(huì)較多;將灰度值小于低閾值的像素點(diǎn)作為非邊緣像素點(diǎn),此時(shí)圖像邊緣信息較全面,但也會(huì)包含虛假邊緣。為此,通過(guò)高低閾值分別處理兩幅圖像。利用高閾值將選定的邊緣像素點(diǎn)連接成線,利用低閾值將灰度值處于低閾值與高閾值之間的像素點(diǎn)提取出來(lái);當(dāng)遇到間斷點(diǎn)時(shí),如果提取的像素點(diǎn)與選定的邊緣像素點(diǎn)是相連接的,則認(rèn)為這些像素點(diǎn)也是邊緣。如此往復(fù),直至得到連續(xù)的邊緣。
基于圖像處理技術(shù),利用Python3版本的計(jì)算機(jī)編程語(yǔ)言、OpenCV及其豐富的函數(shù)庫(kù),通過(guò)采用Canny算子對(duì)托盤濾棒進(jìn)行邊緣檢測(cè),并最終檢測(cè)出濾棒數(shù)量。檢測(cè)流程見圖1。
圖1 濾棒數(shù)量檢測(cè)方法流程圖Fig.1 Flow chart of counting method for filter rods
Step1:讀取圖片Img。使用高清相機(jī)拍攝濾棒圖像,利用函數(shù)cv2.imread()讀取圖片。
Step2:Img轉(zhuǎn)灰度圖Gray。利用函數(shù)cv2.cvtColor()實(shí)現(xiàn)圖像Img的灰度化,見圖2。
圖2 濾棒灰度圖Fig.2 Grayscale images of filter rods
Step3:Gray轉(zhuǎn)二值圖Binary。Gray中像素點(diǎn)灰度值高于127的置為255,否則置為0。利用函數(shù)cv2.threshold()實(shí)現(xiàn)圖像二值化,見圖3。Step4:通過(guò)Canny算子對(duì)Gray進(jìn)行邊緣檢測(cè)。利用函數(shù)cv2.Canny()得到濾棒邊緣圖Edges,見圖4。
圖3 濾棒二值圖Fig.3 Binary images of filter rods
圖4 濾棒邊緣圖Fig.4 Edge images of filter rods
Step5:利用Edges進(jìn)行膨脹運(yùn)算得到圖像Dilate。由于一個(gè)托盤中濾棒數(shù)量較多,排列緊密且顏色差異不大,利用Canny算子雖然可以檢測(cè)出濾棒的大致邊緣,但仍會(huì)存在間斷點(diǎn)和虛偽邊緣,因此需要對(duì)這些邊緣進(jìn)行處理。膨脹是圖像形態(tài)學(xué)基本運(yùn)算之一,通過(guò)對(duì)圖像中白色部分(高亮部分)進(jìn)行膨脹,可以擴(kuò)大圖像的高亮區(qū)域。利用函數(shù)cv2.dilate()進(jìn)行膨脹運(yùn)算,見圖5。
圖5 邊緣膨脹圖Fig.5 Images of dilated edges
Step6:利用Binary減去Dilate得到濾棒位置Result_Canny。圖5中的高亮(白色)部分為邊緣膨脹后的結(jié)果,雖已經(jīng)看不出濾棒邊緣形狀,但消除了間斷點(diǎn)和虛偽邊緣,此時(shí)在二值圖Binary中,去除膨脹后邊緣即可得到濾棒大致位置。利用函數(shù)cv2.subtract()得到濾棒位置圖,見圖6。
圖6 濾棒位置圖Fig.6 Images of filter rod positions
Step7:利用Result_Canny進(jìn)行膨脹得到濾棒形狀Result_Canny_Dilate。對(duì)圖6再次進(jìn)行膨脹運(yùn)算,即可恢復(fù)濾棒原始形狀。為了提高濾棒數(shù)量檢測(cè)精度,膨脹后的高亮部分不可粘連在一起,見圖7。
Step8:檢測(cè)Result_Canny_Dilate中每支濾棒的圓心和半徑。圓心數(shù)量Count即為濾棒數(shù)量,利用函數(shù)cv2.findContours()實(shí)現(xiàn)圓心和半徑檢測(cè)。
圖7 濾棒圖Fig.7 Images of filter rods
Step9:通過(guò)檢測(cè)出的圓心和半徑在Img中畫圓得到檢測(cè)結(jié)果Result_Img。利用函數(shù)cv2.circle()得到檢測(cè)結(jié)果,見圖8。
圖8 濾棒檢測(cè)結(jié)果圖Fig.8 Image of detection result of filter rods
由表1可見,長(zhǎng)支煙、中支煙和短支煙濾棒各20托盤,長(zhǎng)支煙濾棒誤檢率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)確率達(dá)到99.27%,平均耗時(shí)3.97 s/托盤,表明該檢測(cè)方法具有較高的準(zhǔn)確性和通用性。根據(jù)表1數(shù)據(jù)計(jì)算可得,長(zhǎng)支煙、中支煙、短支煙濾棒檢測(cè)準(zhǔn)確率標(biāo)準(zhǔn)偏差分別為0.28、0.36、0.42,離散程度較低,表明該方法具有較好的魯棒性。此外,相同數(shù)據(jù)采用經(jīng)驗(yàn)法進(jìn)行統(tǒng)計(jì),長(zhǎng)支煙、中支煙、短支煙濾棒檢測(cè)準(zhǔn)確率分別為98.63%、98.69%和97.67%,平均為98.33%??梢姡捎帽痉椒z測(cè)準(zhǔn)確率可提高0.94百分點(diǎn)。
表1 濾棒數(shù)量檢測(cè)數(shù)據(jù)Tab.1 Detection data of filter rod number
表1(續(xù))
基于Canny算子對(duì)整托盤濾棒進(jìn)行邊緣檢測(cè),再利用膨脹運(yùn)算和濾棒的圓形特性,精確定位濾棒位置,從而檢測(cè)出濾棒數(shù)量。以長(zhǎng)支煙、中支煙和短支煙濾棒樣品為對(duì)象進(jìn)行測(cè)試,結(jié)果表明:該檢測(cè)方法能夠?qū)崿F(xiàn)濾棒數(shù)量的精確統(tǒng)計(jì),準(zhǔn)確率達(dá)到99.27%,且不會(huì)因?yàn)V棒圓周變化而無(wú)法檢測(cè)其邊緣,適用于各種圓周濾棒,具有較好的通用性和魯棒性。在實(shí)際生產(chǎn)中若能使用更高配置的計(jì)算機(jī),將會(huì)進(jìn)一步降低檢測(cè)耗時(shí),提高檢測(cè)效率。