高 麗
(山西省計量科學研究院,太原 030032)
指針式儀表由于結構簡單、使用方便、安全可靠、易于維護、價格低廉等優勢,被廣泛應用于生產、生活等各領域[1]。在指針式儀表的校準過程中,采用圖像自動識別技術可以大幅度降低校準人員的工作強度,提高勞動效率,降低人眼識別誤差。但對識別精度要求較高,如果識別失敗或者識別準確度不高,需要人工進行復核,反而會加重校準人員的工作負擔。
由于表盤樣式、背景顏色、指針數量等因素的不同,指針式儀表多種多樣,但其識別流程大體是一致的。主要識別步驟有:儀表區域定位、刻度區域識別、指針檢測、極坐標轉換和計算識別結果等5 步,但識別過程中的細節算法對識別精度有較大的影響。為提高指針式儀表的識別準確度,本文主要針對儀表盤圓心精確定位算法、指針檢測算法、指針刻度精確識別算法等細節,分別進行探討。

圖1 指針儀表識別模塊流程圖Fig.1 Flow chart of pointer meter identification module
圓形表盤中,儀表刻度一般為圓弧形狀,儀表指針穿過圓心。因此,刻度圓弧圓心的精確定位是決定儀表示值能否正確識別的關鍵,圓心定位失誤會影響儀表識別的準確度,甚至造成識別失敗。
對于圓形表盤圓心定位常用的方法是霍夫圓變換,霍夫圓變換是將二維圖像空間中1 個圓轉換為該圓半徑、圓心橫縱坐標所確定的三維參數空間中1 個點的過程。因此,圓周上任意3 點所確定的圓,經霍夫圓變換后在三維參數空間應對應一點。該過程類似于選舉投票過程,圓周上任意3 個點為一選舉人,而這3 個點所確定的圓則為一侯選人(以下稱為候選圓)。遍歷圓周上所有點,任意3 個點所確定的候選圓進行投票。
遍歷結束后,得票數最高點(理論上圓周上任意3 點確定的圓在霍夫(Hough)變換后均對應三維參數空間中的同一點)所確定的圓即為該圓周上絕大多數點所確定的圓(以下稱為當選圓)。即絕大多數點均在該當選圓的圓周上,以此確定該圓。
在圖1 中可以看到,大數量的綠色的圓就是通過霍夫圓變換獲得的結果。霍夫圓檢測的參數調整對于結果的影響很大,檢測階段圓心的累加器閾值越大,判定條件越嚴苛,對于品質不高的儀表照片就可能識別失敗;累加器閾值越小,檢測到的圓就越多。而圖1 中紅色的圓弧才是刻度圓弧,圓弧的圓心與指針重合,是需要精確定位的目標,需要從眾多的綠色圓中選出目標。常見方法是采用置信度和投票的方法實現這一選擇,這種方法對表盤布局和圖片質量要求較高,圖2 中的儀表采用此方法就造成了表盤圓心定位誤差。

圖2 圓心定位失敗的儀表Fig.2 Instrument with center positioning failure

圖3 儀表區域識別Fig.3 Identification of instrument area
本文設計的方法將儀表區域定位和刻度區域識別兩個步驟合并,利用刻度區域為霍夫變換增加了圓心和半徑的范圍限制,實現表盤圓心的精確定位。這是一種形態學處理方法,根據表盤刻度區域的定位,估算對應的圓心和半徑的約束范圍以擬合弧形刻度線,從而完成對表盤圓心的定位。
首先,需要對儀表區域圖像進行灰度化、二值化處理,然后再進行腐蝕,主要是為了刪除文字和其他區域,保留刻度區域。然后,再進行膨脹操作,目的是刻度線能夠連接在一起,形成最大連通域。
圖3 中可以看出,最大的兩個連通域就是儀表的兩個表盤圓弧。使用ROI 裁剪出這兩個最大連通域如圖4 所示。在這一段刻度線所在的圓弧上,可以知道圓弧左右兩端點A 和B 的坐標,根據圓的定理,圓心應該是在這兩端點連成的線段的垂直平分線L2 上,然后通過在一定范圍內枚舉圓的半徑,計算枚舉的圓與這一區域的重疊面積,取最大重疊面積,即可估計圓弧所對應的圓心和半徑。

圖4 估計圓心Fig.4 Estimating the center of a circle
由于這兩個數值是對圖像進行膨脹處理之后的結果,可能不夠精確,將其作為約束條件與霍夫圓變換結合,可實現儀表盤圓心的精確定位。
霍夫變換還可以識別圖像中的直線。歐式空間中一條直線上的點在霍夫參數空間中為一條正弦曲線;歐式空間中同一條直線上的多個點在霍夫參數空間中為1 個正弦曲線簇且曲線簇相交于一點,稱此點為峰值點。而霍夫參數空間下的峰值點,則對應了歐式空間下的一條直線。 霍夫變換提取的指針直線存在著指針形狀不規則,出現偏離指針線的情況。
借助精準的圓心定位,克服了指針擬合偏差問題。本文的指針檢測方法是采用枚舉的方式,如圖6 所示。通過圓心向外延伸構造一條線段,將線段順時針在一定夾角范圍內進行旋轉,旋轉過程中計算線段與刻度線的相交面積比,即重疊區域像素點個數與旋轉線段的像素點個數的比值,取最大值對應的線段為最終刻度線所在的線段。
圖6 的儀表中有兩根指針,這是一種常見情況。因此,需要先檢測大指針,然后將大指針刪除,再檢測小指針,以防止大指針干擾小指針的識別。為避免大小指針重合的極端情況,本文設定一個針對這個指針的相交面積比值的最低閾值,在計算相交面積比值的時候,如果所有角度完成之后發現沒有超過這個閾值的角度,則認為這個指針與大指針重疊了,這時候將大指針還原回去重新尋找正確的指針旋轉角即可。

圖5 箭頭所指為指針擬合直線產生偏差Fig.5 The arrow indicates the deviation of the pointer fitting line

圖6 指針檢測過程圖Fig.6 Pointer detection process diagram
在圓心和指針的精確定位之后,就可以識別指針刻度了。為了精確識別指針刻度,需要通過極坐標系轉換,將儀表表盤區域進行清晰展現。將直角坐標系的圓心與極坐標系的圓心一一對應,圓弧儀表盤圓弧可以通過極坐標變換到極坐標系的一條直線上,實現由圓形到直線的轉換。為提高儀表盤清晰度,本文進行了相應的處理:把刻度區域圖長寬放大8 倍,由于是canny 邊緣檢測后的圖片,所以放大對圖片沒有很大的影響,但是極坐標轉換后的圖片刻度變得很清晰。
在獲得刻度區域之后,采用橫向投影的方式將數字和刻度線區域分離。
實現指針式儀表圖像的自動識別讀數算法,按基本原理分可以歸結為兩大類:角度法和距離法。
施健等提出了一種指針式化工儀表的遠程抄表設計方法,首先利用減影法獲得指針位置,其次利用霍夫變換獲得指針擬合直線的夾角,該方法受光照的影響較大。
董保同提出了一種距離法,即通過計算指針擬合直線和相鄰刻度線的距離得到指針的數值,此類方法對于表盤內部無干擾因素的儀表有較好的識別效果,但對于表盤內部存在字符或其他干擾因素的情況下識別效率較低。

圖7 極坐標轉換效果圖Fig.7 Polar coordinate conversion effect
有兩種方式進行指針位置的確定,一種是采用縱向投影法之后尋找最大值坐標和兩端點的坐標,另一種是縱向投影之后尋找極大值和最大值,計算最大值是在第幾個極大值位置處,即可得到最后的結果。
縱向投影法,維護一個x 坐標的數組,掃描圖像每一列,累積這一列中所有非0 像素點的個數,計入數組對應列的橫坐標處。方法一是在統計完投影結果之后,可以記錄首尾兩邊的橫坐標x1,x2,以及上一步驟首尾的數字num1,num2,然后再記錄投影數組中的最大值橫坐標x0(也就是指針處的橫坐標),然后根據公式(1)得到最后結果。

圖8 兩種結果計算方法Fig.8 Two calculation methods of results

另一個方法是在統計完投影結果之后,尋找圖像中的極大值和極小值點,將極大值認為是每一根刻度線,記錄下最大值處為第幾根刻度線。刻度線總數N,指針在第n個刻度線處,兩端點數字num1,num2,則最后結果通過公式(2)可以得到。

兩種結果計算方法對比如圖8 所示,第一種方法最后結果會精確一些。這是由于第二種方法極大值極小值的檢測很容易丟失一兩條刻度線,而且指針在兩根刻度線中間時誤差比較大。
經過測試實驗驗證,以上識別算法在筆者承擔的壓力式溫度計自動校準系統科研項目中(進行了為期半年的測試,取得數據200 組,山西省回國留學人員科研資助項目,項目編號:2016-134),識別率達到95%,對光線及角度的適應大大加強,能作為正式的算法寫入識別程序中。