沈云青,熊衛華,黃為民,許 偉
(浙江理工大學 機械與自動控制學院,浙江 杭州 310018)
指針式儀表具有結構簡單、維護方便,成本低廉、讀數直觀等特點,在各個工業領域都具有廣泛的應用。在國內發電廠變電站等電力系統部門,指針式儀表由于其優良的抗電磁干擾能力應用也十分廣泛,然而目前這種儀表的讀數記錄工作大部分仍采取人工巡檢的方式[1-2],不僅效率低下,造成人力物力資源浪費,而且也容易出錯,著實難以滿足實際生產工作的需要[3]。近年來,國內外學者對指針式儀表識別做了大量研究,取得了一定的成果。
目前指針式儀表的讀數識別主要有兩個途徑,通過深度學習的方法進行指針識別讀數,以及通過圖像處理的方法進行指針識別讀數。近年來深度學習在機器視覺方向迅速發展[4],也涌現出了許多基于此的儀表識別方法。例如,賀嘉琪[5]使用MASKR2CNN神經網絡模型對指針式儀表盤進行識別和定位,再利用形態學方法處理圖像達到指針識別的效果;邢浩強等[6]使用卷積神經網絡來檢測儀表位置,再使用圖像處理方法確定指針讀數;徐發兵等[7]使用卷積神經網絡和改進的場景文本檢測器(EAST)算法對儀表進行檢測讀數,對復雜背景下的儀表識別具有較高的準確率。國外學者Girshick[8]在RCNN的基礎上使用Fast R-CNN[9]進行目標識別,提高了算法的精度,但是識別速度還達不到即時指針識別的要求。使用深度學習的方法對儀表進行檢測,需要進行大量的樣本訓練,且常僅用于定位儀表,指針讀數的識別大部分仍采用基于圖像處理的方法。
用圖像處理的方式實現儀表識別如今也有許多方法。對于一些圓形儀表的識別,國外學者[10-11]采用了Hough直線檢測的方法實現指針識別,但是識別準確率并不理想。何智杰等[12]提出了中心投影分析實現自動讀數的方法,一定程度上提高了傳統方法讀數的速度和精度。李偉等[13]提出了改進的傳統中心投影法確定讀數,但對于原圖質量要求較高。李治瑋等[14]提出了一種基于最大灰度相減法的識別方法,思想創新,但算法仍需要進一步優化提高準確率。張文杰等[15]使用了一種針對環境光影響的儀表讀數算法,能夠較好地克服環境光影響實現儀表讀數,但是算法流程復雜,運行速度較慢,難以移植到實際應用中。
在已有成果的基礎上,該文提出了一種基于模板匹配以及Hough圓形檢測的方法,算法流程簡潔,且模板匹配法與圓形檢測相結合提高了儀表識別的準確率,圖像預處理后,使用旋轉虛擬直線法對指針也有較高的識別率。
針對圓形儀表的識別,該文通過模板匹配和Hough圓形檢測相結合的方法定位表盤,經過灰度化和直方圖均衡化的預處理后,使用K-means方法二值化,再使用旋轉虛擬直線法確定角度,算法流程如圖1所示。
算法主要流程包括圖像預處理、表盤定位和指針角度獲取三個步驟。其中,預處理包括圖像的灰度化、局部直方圖均衡化和K-means二值化,其中灰度化和均衡化后的圖像用于表盤定位,二值化后的圖像用于后續指針識別及角度獲取。表盤定位采用了模板匹配和Hough圓檢測相結合的方法,通過兩次模板匹配定位出儀表盤的大致位置,再通過圓形檢測標記出儀表圓心。指針角度獲取包括通過旋轉虛擬直線法模擬指針落點,通過角度計算出表盤讀數。

圖1 算法流程
實驗中攝像頭采集的圖像為彩色RGB圖像,有紅綠藍三個通道分別占據8位[16]。為了提高后續圖像處理算法的效率,將圖像灰度化能夠不錯地保留圖中元素細節,去除不必要的顏色信息。灰度化的方法用式(1)實現。
Y=0.212 6*R+0.715 2*G+0.072 2*B
(1)
這些儀表圖片在獲取時往往會由于光線原因,導致圖片整體偏亮或者偏暗,轉化為灰度圖后無法區分出清晰的表盤輪廓,主要原因是圖像對比度不夠,因此引入了局部直方圖均衡化,用于增加對比度,區分出表盤輪廓。直方圖均衡化的基本思想為將圖像中原來較為集中的灰度分布,通過映射函數F(x)使灰度區間在全部范圍內均勻分布,而局部直方均衡化則是以圖像中每個像素的鄰域中的灰度分布為基礎設計變換函數F(x),使圖像在局部調整對比度獲得更好的均衡化效果。圖2為灰度圖和局部直方圖均衡化后的圖片。

圖2 灰度圖和均衡化圖
二值化前的原始圖像為采集到的彩色圖像,使用了K-means方法對圖像進行二值化處理。K-means二值化方法的實現步驟如下:
(1)從所有像素中隨機選取2個點μ1,μ2作為初始的聚類中心點。
(2)計算每個像素與這些聚類中心點的距離,并根據最小距離重新對相應點進行類的劃分,其中對每一個點xi按距離分類公式(2)分類:
(2)
(3)按式(3)重新計算出新的兩個聚類中心點:
(3)
(4)重復(2)和(3)直到聚類中心不再變化。
通過以上步驟,K-means方法將圖像分成了兩類。之后在1 000個顏色樣本中隨機選擇,建立64個類,建立壓縮調色板(compressed palette),每個類都可能是調色板中的一種顏色。將原始圖片的每個像素分配到調色板中的每一個類中,再將K-means的類分配結果通過壓縮調色板分類創建壓縮后的新圖片。以壓縮調色板的最大值與最小值求得的平均為閾值,將所有像素重新著色成黑色和白色就得到了最終二值化后的圖片,圖3為K-means二值化之后的儀表圖像。

圖3 K-means二值化
表盤定位采用了模板匹配法,模板匹配法是在一幅大圖像中,尋找小模板的一種方法。其原理是將模板圖片遍歷大圖片的每一個位置,并比較每個位置與模板圖片的相似程度,當相似程度達到一定閾值時,就認為與模板匹配。
在實際場景中一次模板匹配定位儀表的位置還不夠準確,因此在實際算法中采用了兩次模板匹配,第一次匹配找到儀表的位置,第二次匹配找到儀表中表盤的位置,來提高表盤定位的準確度,圖4為兩次模板匹配結果。

圖4 兩次模板匹配
其中圖像與模板的相似程度采用相關系數匹配法公式(4)來描述。
(4)
其中,R表示相似程度,T表示模板圖像,I表示匹配圖像,w、h表示模板圖像的寬和高。
通過模板匹配已經基本定位了表盤位置,霍夫圓形檢測通過霍夫梯度法,將圓形表盤從二值化后的圖中分割出來并確定圓心,作為后續旋轉虛擬直線法的圓心。
3.2.1 Canny邊緣檢測原理
霍夫梯度法的第一步是邊緣檢測,該文采取了Canny邊緣檢測,其原理如下:
(1)使用高斯濾波器卷積對圖像進行降噪,卷積核半徑太小對圖像的降噪效果不理想,卷積核半徑太大會使圖像失去太多邊緣細節,因此該文采用了3*3的高斯內核來降噪。
(2)使用Sobel算子計算梯度的幅值和方向,Sobel算子運用了一對3*3的卷積陣列Gx和Gy來計算梯度的幅值和方向,如式(5)和式(6)所示:

(5)

(6)
(3)通過非極大值抑制的方法過濾不是邊緣的點,使邊緣銳化成一個像素。因為邊緣像素在梯度方向上的幅值是最大的,故只要將其余非最大幅值的像素灰度值清零,就能達到過濾和銳化的效果。
(4)使用設定上下閾值的方法判斷邊緣,設定上閾值為maxV,下閾值為minV,如果像素的梯度幅值超過maxV則該像素被標記為邊緣像素,如果像素的梯度幅值低于minV則該像素被排除,如果像素幅值在maxV和minV之間,則判斷與該像素相連的像素是否只有一個像素高于maxV,如果是則認為該像素是邊緣像素。最終邊緣檢測效果如圖5所示。

圖5 邊緣檢測效果
3.2.2 Hough梯度法原理
霍夫梯度法檢測圓形表盤分為兩步,第一步為標記圓心,第二步為估計半徑。
第一步標記圓心時首先對灰度圖做Canny邊緣檢測,獲得圖像的邊緣二值圖,同時通過Sobel算子計算出像素的領域梯度值。之后遍歷二值圖中邊緣點,并沿著梯度方向畫出切線的垂線,將該垂線經過的所有像素點對累加器Nx,y進行累加。最大的Nx,y將被標記成圓心,圖6為垂線交點標記圓心示意圖。

圖6 標記圓心
第二步計算邊緣二值圖中所有邊緣點與圓心的距離d,將d按從小到大的順序排序選取閾值,找出最有可能的半徑。建立累加數組T(r),將邊緣圖的所有邊緣點進行累加,即T(d)=T(d)+1。選取最大的T(r)即為所要找的圓半徑。
圖7為霍夫梯度法處理后的圓心標示及圓檢測效果圖。
Hough圓形檢測已經標示出表盤的位置以及表盤圓心,接下來使用旋轉虛擬直線法來進行指針識別和角度計算。

圖7 圓檢測效果
從K-means二值化的圖中可以看出,表盤中間區域由于鏤空設計,存在大片黑色區域與指針重合,干擾指針識別,因此在進行旋轉虛擬直線的擬合前,將中間黑色區域在預處理中去除,只留下指針露出來的部分作為后續旋轉虛擬直線的擬合對象,如圖8所示。

圖8 旋轉虛擬直線法
旋轉虛擬直線法的原理是模擬一根虛擬的指針在表盤上旋轉,如圖中黑線所示,每到一個位置就計算黑線與背景表盤黑色像素的重合點數,重合點數最高處就是指針所在位置。表盤上有其他數字標志等可能干擾判斷,經過實驗測試,對指針位置判斷影響甚微,仍然可以達到指針識別的效果。
虛擬直線采用極坐標的形式表示,如式(7)和式(8)。
x=rcosθ
(7)
y=rsinθ
(8)
當虛擬直線和指針重合時返回角度θ,通過角度和表盤刻度的對應關系計算出刻度值。
采用文中算法,在Python和OpenCV視覺庫實現,對實驗室采集到的實驗圖像進行了算法驗證,經過實驗,所有測試圖像通過模板匹配和Hough圓檢測都能夠準確定位到儀表盤,指針識別也達到了較高準確率,算法運行速度也比較快。表1是其中十組實驗室測試圖片的實驗結果。

表1 實驗結果記錄
實驗結果表明,十組測試圖片的角度平均測量誤差為0.1°,其最大偏差值在3°(約一小格刻度)以內,與人工讀數的誤差接近,因此該誤差基本滿足儀表指針讀數的精度要求。在部分測試圖片中出現過指針角度讀取出現大幅度偏差的情況,并未在上表中列出,研究后發現是由于環境光的影響,導致Hough圓檢測效果不理想,無法準確定位圓心和表盤輪廓,導致旋轉虛擬直線時圓心出現偏差,讀數出現錯誤。如果需要進一步克服環境光的影響,需要改進表盤定位和圓心定位算法。
在Python和OpenCV平臺下,使用模板匹配法和Hough圓檢測相結合的方法實現了表盤定位和指針識別,表盤定位基本成功,指針識別效果在環境光較好的條件下比較理想,指針讀數功能基本實現,算法效率高,運行速度較快。后續也可移植到嵌入式系統中,具有一定的實際應用價值。