沈云青,熊衛(wèi)華,黃為民,許 偉
(浙江理工大學(xué) 機(jī)械與自動(dòng)控制學(xué)院,浙江 杭州 310018)
指針式儀表具有結(jié)構(gòu)簡(jiǎn)單、維護(hù)方便,成本低廉、讀數(shù)直觀等特點(diǎn),在各個(gè)工業(yè)領(lǐng)域都具有廣泛的應(yīng)用。在國(guó)內(nèi)發(fā)電廠變電站等電力系統(tǒng)部門,指針式儀表由于其優(yōu)良的抗電磁干擾能力應(yīng)用也十分廣泛,然而目前這種儀表的讀數(shù)記錄工作大部分仍采取人工巡檢的方式[1-2],不僅效率低下,造成人力物力資源浪費(fèi),而且也容易出錯(cuò),著實(shí)難以滿足實(shí)際生產(chǎn)工作的需要[3]。近年來(lái),國(guó)內(nèi)外學(xué)者對(duì)指針式儀表識(shí)別做了大量研究,取得了一定的成果。
目前指針式儀表的讀數(shù)識(shí)別主要有兩個(gè)途徑,通過(guò)深度學(xué)習(xí)的方法進(jìn)行指針識(shí)別讀數(shù),以及通過(guò)圖像處理的方法進(jìn)行指針識(shí)別讀數(shù)。近年來(lái)深度學(xué)習(xí)在機(jī)器視覺(jué)方向迅速發(fā)展[4],也涌現(xiàn)出了許多基于此的儀表識(shí)別方法。例如,賀嘉琪[5]使用MASKR2CNN神經(jīng)網(wǎng)絡(luò)模型對(duì)指針式儀表盤進(jìn)行識(shí)別和定位,再利用形態(tài)學(xué)方法處理圖像達(dá)到指針識(shí)別的效果;邢浩強(qiáng)等[6]使用卷積神經(jīng)網(wǎng)絡(luò)來(lái)檢測(cè)儀表位置,再使用圖像處理方法確定指針讀數(shù);徐發(fā)兵等[7]使用卷積神經(jīng)網(wǎng)絡(luò)和改進(jìn)的場(chǎng)景文本檢測(cè)器(EAST)算法對(duì)儀表進(jìn)行檢測(cè)讀數(shù),對(duì)復(fù)雜背景下的儀表識(shí)別具有較高的準(zhǔn)確率。國(guó)外學(xué)者Girshick[8]在RCNN的基礎(chǔ)上使用Fast R-CNN[9]進(jìn)行目標(biāo)識(shí)別,提高了算法的精度,但是識(shí)別速度還達(dá)不到即時(shí)指針識(shí)別的要求。使用深度學(xué)習(xí)的方法對(duì)儀表進(jìn)行檢測(cè),需要進(jìn)行大量的樣本訓(xùn)練,且常僅用于定位儀表,指針讀數(shù)的識(shí)別大部分仍采用基于圖像處理的方法。
用圖像處理的方式實(shí)現(xiàn)儀表識(shí)別如今也有許多方法。對(duì)于一些圓形儀表的識(shí)別,國(guó)外學(xué)者[10-11]采用了Hough直線檢測(cè)的方法實(shí)現(xiàn)指針識(shí)別,但是識(shí)別準(zhǔn)確率并不理想。何智杰等[12]提出了中心投影分析實(shí)現(xiàn)自動(dòng)讀數(shù)的方法,一定程度上提高了傳統(tǒng)方法讀數(shù)的速度和精度。李偉等[13]提出了改進(jìn)的傳統(tǒng)中心投影法確定讀數(shù),但對(duì)于原圖質(zhì)量要求較高。李治瑋等[14]提出了一種基于最大灰度相減法的識(shí)別方法,思想創(chuàng)新,但算法仍需要進(jìn)一步優(yōu)化提高準(zhǔn)確率。張文杰等[15]使用了一種針對(duì)環(huán)境光影響的儀表讀數(shù)算法,能夠較好地克服環(huán)境光影響實(shí)現(xiàn)儀表讀數(shù),但是算法流程復(fù)雜,運(yùn)行速度較慢,難以移植到實(shí)際應(yīng)用中。
在已有成果的基礎(chǔ)上,該文提出了一種基于模板匹配以及Hough圓形檢測(cè)的方法,算法流程簡(jiǎn)潔,且模板匹配法與圓形檢測(cè)相結(jié)合提高了儀表識(shí)別的準(zhǔn)確率,圖像預(yù)處理后,使用旋轉(zhuǎn)虛擬直線法對(duì)指針也有較高的識(shí)別率。
針對(duì)圓形儀表的識(shí)別,該文通過(guò)模板匹配和Hough圓形檢測(cè)相結(jié)合的方法定位表盤,經(jīng)過(guò)灰度化和直方圖均衡化的預(yù)處理后,使用K-means方法二值化,再使用旋轉(zhuǎn)虛擬直線法確定角度,算法流程如圖1所示。
算法主要流程包括圖像預(yù)處理、表盤定位和指針角度獲取三個(gè)步驟。其中,預(yù)處理包括圖像的灰度化、局部直方圖均衡化和K-means二值化,其中灰度化和均衡化后的圖像用于表盤定位,二值化后的圖像用于后續(xù)指針識(shí)別及角度獲取。表盤定位采用了模板匹配和Hough圓檢測(cè)相結(jié)合的方法,通過(guò)兩次模板匹配定位出儀表盤的大致位置,再通過(guò)圓形檢測(cè)標(biāo)記出儀表圓心。指針角度獲取包括通過(guò)旋轉(zhuǎn)虛擬直線法模擬指針落點(diǎn),通過(guò)角度計(jì)算出表盤讀數(shù)。
圖1 算法流程
實(shí)驗(yàn)中攝像頭采集的圖像為彩色RGB圖像,有紅綠藍(lán)三個(gè)通道分別占據(jù)8位[16]。為了提高后續(xù)圖像處理算法的效率,將圖像灰度化能夠不錯(cuò)地保留圖中元素細(xì)節(jié),去除不必要的顏色信息。灰度化的方法用式(1)實(shí)現(xiàn)。
Y=0.212 6*R+0.715 2*G+0.072 2*B
(1)
這些儀表圖片在獲取時(shí)往往會(huì)由于光線原因,導(dǎo)致圖片整體偏亮或者偏暗,轉(zhuǎn)化為灰度圖后無(wú)法區(qū)分出清晰的表盤輪廓,主要原因是圖像對(duì)比度不夠,因此引入了局部直方圖均衡化,用于增加對(duì)比度,區(qū)分出表盤輪廓。直方圖均衡化的基本思想為將圖像中原來(lái)較為集中的灰度分布,通過(guò)映射函數(shù)F(x)使灰度區(qū)間在全部范圍內(nèi)均勻分布,而局部直方均衡化則是以圖像中每個(gè)像素的鄰域中的灰度分布為基礎(chǔ)設(shè)計(jì)變換函數(shù)F(x),使圖像在局部調(diào)整對(duì)比度獲得更好的均衡化效果。圖2為灰度圖和局部直方圖均衡化后的圖片。
圖2 灰度圖和均衡化圖
二值化前的原始圖像為采集到的彩色圖像,使用了K-means方法對(duì)圖像進(jìn)行二值化處理。K-means二值化方法的實(shí)現(xiàn)步驟如下:
(1)從所有像素中隨機(jī)選取2個(gè)點(diǎn)μ1,μ2作為初始的聚類中心點(diǎn)。
(2)計(jì)算每個(gè)像素與這些聚類中心點(diǎn)的距離,并根據(jù)最小距離重新對(duì)相應(yīng)點(diǎn)進(jìn)行類的劃分,其中對(duì)每一個(gè)點(diǎn)xi按距離分類公式(2)分類:
(2)
(3)按式(3)重新計(jì)算出新的兩個(gè)聚類中心點(diǎn):
(3)
(4)重復(fù)(2)和(3)直到聚類中心不再變化。
通過(guò)以上步驟,K-means方法將圖像分成了兩類。之后在1 000個(gè)顏色樣本中隨機(jī)選擇,建立64個(gè)類,建立壓縮調(diào)色板(compressed palette),每個(gè)類都可能是調(diào)色板中的一種顏色。將原始圖片的每個(gè)像素分配到調(diào)色板中的每一個(gè)類中,再將K-means的類分配結(jié)果通過(guò)壓縮調(diào)色板分類創(chuàng)建壓縮后的新圖片。以壓縮調(diào)色板的最大值與最小值求得的平均為閾值,將所有像素重新著色成黑色和白色就得到了最終二值化后的圖片,圖3為K-means二值化之后的儀表圖像。
圖3 K-means二值化
表盤定位采用了模板匹配法,模板匹配法是在一幅大圖像中,尋找小模板的一種方法。其原理是將模板圖片遍歷大圖片的每一個(gè)位置,并比較每個(gè)位置與模板圖片的相似程度,當(dāng)相似程度達(dá)到一定閾值時(shí),就認(rèn)為與模板匹配。
在實(shí)際場(chǎng)景中一次模板匹配定位儀表的位置還不夠準(zhǔn)確,因此在實(shí)際算法中采用了兩次模板匹配,第一次匹配找到儀表的位置,第二次匹配找到儀表中表盤的位置,來(lái)提高表盤定位的準(zhǔn)確度,圖4為兩次模板匹配結(jié)果。
圖4 兩次模板匹配
其中圖像與模板的相似程度采用相關(guān)系數(shù)匹配法公式(4)來(lái)描述。
(4)
其中,R表示相似程度,T表示模板圖像,I表示匹配圖像,w、h表示模板圖像的寬和高。
通過(guò)模板匹配已經(jīng)基本定位了表盤位置,霍夫圓形檢測(cè)通過(guò)霍夫梯度法,將圓形表盤從二值化后的圖中分割出來(lái)并確定圓心,作為后續(xù)旋轉(zhuǎn)虛擬直線法的圓心。
3.2.1 Canny邊緣檢測(cè)原理
霍夫梯度法的第一步是邊緣檢測(cè),該文采取了Canny邊緣檢測(cè),其原理如下:
(1)使用高斯濾波器卷積對(duì)圖像進(jìn)行降噪,卷積核半徑太小對(duì)圖像的降噪效果不理想,卷積核半徑太大會(huì)使圖像失去太多邊緣細(xì)節(jié),因此該文采用了3*3的高斯內(nèi)核來(lái)降噪。
(2)使用Sobel算子計(jì)算梯度的幅值和方向,Sobel算子運(yùn)用了一對(duì)3*3的卷積陣列Gx和Gy來(lái)計(jì)算梯度的幅值和方向,如式(5)和式(6)所示:
(5)
(6)
(3)通過(guò)非極大值抑制的方法過(guò)濾不是邊緣的點(diǎn),使邊緣銳化成一個(gè)像素。因?yàn)檫吘壪袼卦谔荻确较蛏系姆凳亲畲蟮模手灰獙⑵溆喾亲畲蠓档南袼鼗叶戎登辶?,就能達(dá)到過(guò)濾和銳化的效果。
(4)使用設(shè)定上下閾值的方法判斷邊緣,設(shè)定上閾值為maxV,下閾值為minV,如果像素的梯度幅值超過(guò)maxV則該像素被標(biāo)記為邊緣像素,如果像素的梯度幅值低于minV則該像素被排除,如果像素幅值在maxV和minV之間,則判斷與該像素相連的像素是否只有一個(gè)像素高于maxV,如果是則認(rèn)為該像素是邊緣像素。最終邊緣檢測(cè)效果如圖5所示。
圖5 邊緣檢測(cè)效果
3.2.2 Hough梯度法原理
霍夫梯度法檢測(cè)圓形表盤分為兩步,第一步為標(biāo)記圓心,第二步為估計(jì)半徑。
第一步標(biāo)記圓心時(shí)首先對(duì)灰度圖做Canny邊緣檢測(cè),獲得圖像的邊緣二值圖,同時(shí)通過(guò)Sobel算子計(jì)算出像素的領(lǐng)域梯度值。之后遍歷二值圖中邊緣點(diǎn),并沿著梯度方向畫出切線的垂線,將該垂線經(jīng)過(guò)的所有像素點(diǎn)對(duì)累加器Nx,y進(jìn)行累加。最大的Nx,y將被標(biāo)記成圓心,圖6為垂線交點(diǎn)標(biāo)記圓心示意圖。
圖6 標(biāo)記圓心
第二步計(jì)算邊緣二值圖中所有邊緣點(diǎn)與圓心的距離d,將d按從小到大的順序排序選取閾值,找出最有可能的半徑。建立累加數(shù)組T(r),將邊緣圖的所有邊緣點(diǎn)進(jìn)行累加,即T(d)=T(d)+1。選取最大的T(r)即為所要找的圓半徑。
圖7為霍夫梯度法處理后的圓心標(biāo)示及圓檢測(cè)效果圖。
Hough圓形檢測(cè)已經(jīng)標(biāo)示出表盤的位置以及表盤圓心,接下來(lái)使用旋轉(zhuǎn)虛擬直線法來(lái)進(jìn)行指針識(shí)別和角度計(jì)算。
圖7 圓檢測(cè)效果
從K-means二值化的圖中可以看出,表盤中間區(qū)域由于鏤空設(shè)計(jì),存在大片黑色區(qū)域與指針重合,干擾指針識(shí)別,因此在進(jìn)行旋轉(zhuǎn)虛擬直線的擬合前,將中間黑色區(qū)域在預(yù)處理中去除,只留下指針露出來(lái)的部分作為后續(xù)旋轉(zhuǎn)虛擬直線的擬合對(duì)象,如圖8所示。
圖8 旋轉(zhuǎn)虛擬直線法
旋轉(zhuǎn)虛擬直線法的原理是模擬一根虛擬的指針在表盤上旋轉(zhuǎn),如圖中黑線所示,每到一個(gè)位置就計(jì)算黑線與背景表盤黑色像素的重合點(diǎn)數(shù),重合點(diǎn)數(shù)最高處就是指針?biāo)谖恢?。表盤上有其他數(shù)字標(biāo)志等可能干擾判斷,經(jīng)過(guò)實(shí)驗(yàn)測(cè)試,對(duì)指針位置判斷影響甚微,仍然可以達(dá)到指針識(shí)別的效果。
虛擬直線采用極坐標(biāo)的形式表示,如式(7)和式(8)。
x=rcosθ
(7)
y=rsinθ
(8)
當(dāng)虛擬直線和指針重合時(shí)返回角度θ,通過(guò)角度和表盤刻度的對(duì)應(yīng)關(guān)系計(jì)算出刻度值。
采用文中算法,在Python和OpenCV視覺(jué)庫(kù)實(shí)現(xiàn),對(duì)實(shí)驗(yàn)室采集到的實(shí)驗(yàn)圖像進(jìn)行了算法驗(yàn)證,經(jīng)過(guò)實(shí)驗(yàn),所有測(cè)試圖像通過(guò)模板匹配和Hough圓檢測(cè)都能夠準(zhǔn)確定位到儀表盤,指針識(shí)別也達(dá)到了較高準(zhǔn)確率,算法運(yùn)行速度也比較快。表1是其中十組實(shí)驗(yàn)室測(cè)試圖片的實(shí)驗(yàn)結(jié)果。
表1 實(shí)驗(yàn)結(jié)果記錄
實(shí)驗(yàn)結(jié)果表明,十組測(cè)試圖片的角度平均測(cè)量誤差為0.1°,其最大偏差值在3°(約一小格刻度)以內(nèi),與人工讀數(shù)的誤差接近,因此該誤差基本滿足儀表指針讀數(shù)的精度要求。在部分測(cè)試圖片中出現(xiàn)過(guò)指針角度讀取出現(xiàn)大幅度偏差的情況,并未在上表中列出,研究后發(fā)現(xiàn)是由于環(huán)境光的影響,導(dǎo)致Hough圓檢測(cè)效果不理想,無(wú)法準(zhǔn)確定位圓心和表盤輪廓,導(dǎo)致旋轉(zhuǎn)虛擬直線時(shí)圓心出現(xiàn)偏差,讀數(shù)出現(xiàn)錯(cuò)誤。如果需要進(jìn)一步克服環(huán)境光的影響,需要改進(jìn)表盤定位和圓心定位算法。
在Python和OpenCV平臺(tái)下,使用模板匹配法和Hough圓檢測(cè)相結(jié)合的方法實(shí)現(xiàn)了表盤定位和指針識(shí)別,表盤定位基本成功,指針識(shí)別效果在環(huán)境光較好的條件下比較理想,指針讀數(shù)功能基本實(shí)現(xiàn),算法效率高,運(yùn)行速度較快。后續(xù)也可移植到嵌入式系統(tǒng)中,具有一定的實(shí)際應(yīng)用價(jià)值。