韓曉麗, 李勇超, 袁 媛, 王俊偉
(1.太原科技大學, 山西 太原 030024; 2.太原重工股份有限公司, 山西 太原 030024)
輸送帶作為帶式輸送機的主要承載和牽引部件,其安全可靠的運行能夠保障企業的正常生產需求,極大地提高企業的經濟效益。目前學者們在輸送帶縱向撕裂檢測方面提出很多方法,其中機器視覺技術因具有非接觸、實時、可控制等優點[1]得到了廣泛應用。郭啟皇等[2]設計了一套基于Otsu 算法的輸送帶撕裂檢測系統,可以快速、準確檢測到運行狀態下輸送帶撕裂痕跡;李現國等[3]設計了一種基于線激光和ARM的輸送帶縱向撕裂監控系統,該系統能及時準確檢測出輸送帶縱向撕裂故障,具有實時性好、圖像處理效率高、布線簡便、可遠程監控等優點;徐善永等[4]提出基于序列最小最優化(SMO)算法的紅外圖像檢測方法。SMO 算法不僅預測精度高,而且實時性好,對于皮帶撕裂故障診斷具有良好的實用價值。
當輸送帶圖像有撕裂特征時,通過圖像處理識別,實時發出撕裂報警信息[5]。本文針對帶式輸送機在使用中出現的輸送帶縱向撕裂問題,提出了一種基于機器視覺的雙目視覺檢測方法。該方法首先對采集的圖像進行預處理,再對其進行輪廓檢測和撕裂報警研究系統流程如圖1 所示。

圖1 系統流程
要提取輸送帶的縱向撕裂特征,必須對采集的原始圖片進行預處理,以消除噪聲、增強反差、突出撕裂信息。圖像預處理流程如圖2 所示。

圖2 圖像預處理流程
圖像增強用直方圖均衡化和自適應直方圖均衡化進行處理。直方圖均衡化是將原始圖像從灰度直方圖中的一個比較集中的部分轉移到整體上,先從灰度圖的灰度曲線入手,將其對應的灰度值保存在直方圖中,然后對直方圖進行平滑處理,使像素的灰度值分布更均勻,改善整體對比度,使圖像更清晰。有時,由于原始圖像的直方圖變化太大或者太陡,在均衡化處理后會產生“退化效果”,所以這里就需要引入自適應直方圖均衡函數,其相關代碼如圖3 所示。

圖3 直方圖均衡化相關代碼
這種情況下,使用CreateCLAHE 功能把整個圖片分割成許多塊,對每個數據塊進行直方圖均衡處理,采用反差極限。對于每一個區塊,當直方圖中的bin 超出了反差的上限時,將所有的像素點均勻地分布到其他bins 中,再進行均衡化。不同均衡化結果如圖4 所示。

圖4 不同均衡化效果對比
輸送帶影像中的噪聲影響輸送帶縱向撕裂的分析和識別,必須對其進行過濾。本文利用空間域濾波技術,對中值濾波、均值濾波等方法進行了分析和研究。對不同方法在輸送帶帶上的濾波效果進行了對比,以達到更好的消除噪聲、保存輸送帶縱向撕裂信息的目的。
均值濾波是線性濾波算法,它是將目標像素的一個模板包含在其周邊附近的像素,然后用整個模板中所有像素的平均值取代原始像素值。Python 調用OpenCV 實現均值濾波的核心函數、相關代碼及效果如圖5 所示。

圖5 均值濾波相關代碼及效果
Blur(src,ksize,dst=None,anchor=None,border-Type=None)
中值濾波是將中間像素的矩形鄰近區域作為中間點,采用鄰域平均法對噪聲進行降噪,并對其進行了模糊處理。OpenCV 主要調用函數medianBlur(src,ksize,dst=None),相關代碼及效果如圖6 所示。

圖6 中值濾波過程及效果
很明顯,中值濾波得到的輪廓效果更為清晰。
將“感興趣區”分成若干個子區,在進行分割時這些分塊會形成一個邊界或紋理,從而形成一個物體的特征,然后再對其進行處理,從而實現對物體的識別。
本文先二值化處理,進一步簡化灰度圖像,使圖像中的信息更加純粹,邊緣亮度更加明顯,之后再進行邊緣檢測。
1.3.1 閾值分割
二值化是將一組像素按灰度等級進行分割,這種分割可以根據灰度級別選擇一個或多個閾值。OpenCV 提供了多種不同的閾值方法,這些方法包括以下五種,產生的效果如圖7 所示。

圖7 不同閾值方法的效果圖
·cv2.THRESH_BINARY
·cv2.THRESH_BINARY_INV
·cv2.THRESH_TRUNC
·cv2.THRESH_TOZERO
·cv2.THRESH_TOZERO_INV
1.3.2 邊緣檢測
圖像邊緣提取極大地降低了數據量,同時將可能被視為無關的信息剔除,保持了圖像的重要結構特征。在圖像中,邊界可以看作是一個具有一階導數的像素點,通過求一階導數來確定其邊界。這里,分別用Prewitt 算子、Laplacian 算子、Roberts 算子進行處理,效果如圖8 所示。通過比較,選擇Roberts 算子進行后續的處理。

圖8 算子處理效果
梯度運算即圖像形態學的梯度操作,其實就是由影像的膨脹減去影像的侵蝕,最后我們得到的輪廓更為清晰。梯度運算morphologyEx()函數中的參數是MORPH_GRADIENT,相關代碼及效果如圖9 所示。

圖9 梯度運算相關代碼及處理結果
Python 提供了進行輪廓檢測的函數,即.findContours 函數,返回的參數即為該圖像的輪廓數量,相關代碼如圖10 所示。

圖10 計算輪廓數量相關代碼
輪廓面積是指每個輪廓中所有的像素點圍成的區域的面積,單位為像素,相關代碼如圖11 所示。

圖11 計算輪廓面積相關代碼
由于三個連續的像素點間的連線有可能在同一條線上,所以可以僅輸入一個等值的頂點像素點,相關代碼如圖12 所示。該函數可以對輪廓的長度進行統計,函數返回值為統計長度,以像素為單位,以double 的形式表示。

圖12 計算輪廓周長相關代碼
為了實現撕裂警告彈窗,我們需要引入tkinter庫,Tkinter(亦稱Tk 界面)是Python 的標準接口。Tk是一個輕量級的跨平臺圖形用戶界面(GUI)開發工具,相關代碼如圖13 所示。

圖13 引入tkinter 庫的相關代碼
引入tkinter 庫后,即可實現如下的彈窗效果,相關代碼如圖14 所示。

圖14 實現彈窗效果及相關代碼
本文根據輸送帶縱向撕裂圖像的特點,提出了一種基于機器視覺的雙目識別檢測方法。采用了圖像預處理中的灰度轉換來實現圖像的反差,提高了圖像的清晰度和視覺效果,使得輸送帶撕裂特征更為明顯;利用Roberts 運算符進行圖像分割;最后,利用Python平臺的findContours 函數來完成輪廓的檢測。經過一系列處理使得縱向撕裂圖像的清晰度、辨識度得到了提高,特征更為突出。通過在Python 中引入tkinter庫,最終實現了輸送帶的撕裂報警。該方法能保證對輸送帶縱向撕裂進行實時、可靠地檢測,為輸送機的安全、高效運行提供更好的支持和保障。