孫曉朋侯立群渠懷勝
(華北電力大學自動化系,河北 保定071003)
由于指針式儀表具有結(jié)構(gòu)簡單、可靠性高、價格低的優(yōu)點,其在現(xiàn)代工業(yè)過程中仍被廣泛應(yīng)用。目前,指針式儀表的示值一般采用人工讀取方式,該方法效率低、耗時長、實時性差,且易受讀表人觀察角度、疲勞等因素影響。此外,人工讀數(shù)方法不適用于輻射、高溫等環(huán)境。因此,研究指針式儀表的自動讀數(shù)具有重要意義[1-2]。
近年來,研究者們嘗試利用計算機視覺技術(shù)實現(xiàn)指針表自動讀數(shù)。角度法和距離法是目前最常用的兩種指針表自動讀數(shù)方法。
施瀅等人[3]利用Hough變換檢測儀表中的指針,計算得到儀表圓心和指針方向,再利用角度法讀數(shù)。張軍國等人[4]利用加權(quán)最大類間方差法提取指針表圓弧的位置,極坐標變換后使用距離法讀數(shù)。盛慶華等人[5]研究在霍夫空間計算儀表圓心,使用投影法分割圖像得到指針信息,距離法獲得讀數(shù)。當指針表位置發(fā)生變化時,上述方法需要調(diào)整攝像頭位置并重新標定。這無疑降低了上述方法的便捷性和實用性。近年來,卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)成功應(yīng)用于圖像目標檢測和圖像分割等領(lǐng)域[6-7]。邢浩強[8]、Liu Yang[9]、Zuo Lin[10]等人使用不同的CNN模型完成了指針表定位,并使用角度法實現(xiàn)了指針表自動讀數(shù),簡化了讀數(shù)前設(shè)備安裝與標定過程。為了提高讀數(shù)精度,Lai Haowen等人[11]利用漸進霍夫變換和距離法完成了對不同形狀指針表的讀數(shù)識別。高會軍等人[12]通過逐步確定刻度區(qū)域、刻度線和指針,最后采用距離法,實現(xiàn)了對汽車儀表盤的自動讀數(shù)。
文獻[3,8-10]采用傳統(tǒng)的角度法讀數(shù),首先找到指針表零刻度線和最大刻度線對應(yīng)的角度,再通過角度關(guān)系獲得指針表讀數(shù),其讀數(shù)準確性易受指針表傾斜的影響。文獻[4-5,11-12]采用距離法讀數(shù),該方法假設(shè)指針擬合直線與相鄰刻度線平行,算法本身存在一定誤差[13]。文獻[11-12]提高了自動讀數(shù)的準確度,但讀數(shù)過程相對復(fù)雜。
針對上述指針表自動讀數(shù)方法的不足,本文提出一種基于CNN的漸進式指針表自動讀數(shù)方法。該方法首先利用Faster-RCNN(Faster-Region Convolutional Neural Networks)模型檢測當前視野下指針表目標的包圍框位置,得到目標圖像,簡化讀數(shù)前設(shè)備安裝與標定過程;然后利用SIFT(Scale-Invariant Feature Transform)、RANSAC(Random Sample Consensus)算法和透視變換得到無傾斜、無旋轉(zhuǎn)的圖像,克服指針表傾斜或旋轉(zhuǎn)對自動讀數(shù)的影響;再利用八鄰域法檢測指針表表盤,大津算法(Otsu算法)提取分割閾值,區(qū)域生長法提取指針;最后利用卷積神經(jīng)網(wǎng)絡(luò)識別指針表的大刻度示值得到指針表的粗讀數(shù),利用角度法得到指針表的細讀數(shù),完成高精度自動讀數(shù)。
漸進式指針表自動讀數(shù)系統(tǒng)流程圖如圖1所示。該系統(tǒng)由儀表目標檢測模塊、儀表目標提取與傾斜校正模塊、表盤定位模塊、指針提取模塊、由粗到細漸進式讀數(shù)模塊五部分組成。

圖1 漸進式指針表自動讀數(shù)系統(tǒng)流程圖
Faster-RCNN目標檢測流程圖如圖2所示。首先輸入圖片,使用預(yù)訓(xùn)練過的Alex-Net網(wǎng)絡(luò)提取圖片的底層特征,然后進入?yún)^(qū)域建議網(wǎng)絡(luò)(Region Proposal Network,RPN)。RPN的工作機制是:首先對每一個特征圖編碼成一個256維的特征向量,生成錨框,同時對特征圖做兩個卷積操作,第一個卷積操作的目的是分類出目標和背景,第二個卷積操作的目的是回歸,最后輸出錨框;通過計算預(yù)測錨框與實際錨框交集與并集的比值得到并交比(Intersection over Union,IOU)的值,設(shè)置錨框IOU的閾值,當IOU大于設(shè)定閾值時為前景,IOU小于設(shè)定閾值時為后景;通過非極大值抑制(Non-Maximum Suppression)合并與真值重疊度較高的錨矩形區(qū)域;對所有的錨矩形框按置信度排序;最后對其輸出的感興趣區(qū)域(Region of Interest,ROI)篩選后,判斷錨矩形框?qū)儆谇熬斑€是后景,即是不是指針表;如果分類結(jié)果是指針表,則送入全連接層進行分類和使用邊框回歸微調(diào)錨矩形框坐標,最后輸出錨矩形框目標區(qū)域和指針表的置信度[14]。

圖2 Faster-RCNN目標檢測流程圖
目標提取模塊是將Faster R-CNN算法檢測到目標儀表包圍框的坐標區(qū)域提取出來,并將包圍框的大小調(diào)整為300×300。
傾斜校正模塊包括SIFT關(guān)鍵點匹配、RANSAC算法得到透視變換矩陣和透視變換三部分。具體的流程圖如圖3所示。該方法需要人為拍攝一張居中且無傾斜的指針表圖像作為基準圖像;將基準圖像和儀表目標檢測模塊提取出的指針表圖像各自灰度化;通過SIFT算法匹配相關(guān)點,RANSAC算法得到透視變換矩陣;最后通過透視變換實現(xiàn)指針表的自動傾斜校正。

圖3 傾斜校正模塊流程圖
①SIFT關(guān)鍵點匹配算法
由于SIFT算子具有對圖像縮放、旋轉(zhuǎn)甚至仿射變換保持不變的性質(zhì)[15]。本文使用SIFT算子檢測實際圖像和基準圖像的特征點,計算特征點的大小,利用這些信息組成特征點對進行描述,然后匹配特征點。
②RANSAC算法和透視變換
基于歐氏距離的SIFT特征匹配中存在許多誤匹配的點,這些誤匹配點將嚴重影響透視變換模型參數(shù)的解算,因此需要剔除這些誤匹配的點。在這里使用最為常見的RANSAC方法。該算法的原理是利用SIFT算法得到兩幅圖像的匹配點后,隨機從這些匹配點中抽取四個樣本,計算出單應(yīng)性矩陣H,記為模型M;然后計算所有匹配點和模型M之間的投影誤差,若小于設(shè)定的閾值,則加入匹配點中繼續(xù)之前方法運算,不斷和之前的模型做比較,直到找到最佳單應(yīng)性矩陣(透視變換矩陣)。透視變換的本質(zhì)是將圖像投影到一個新的視平面,通過透視變換可以實現(xiàn)指針表的自動傾斜校正。
經(jīng)過目標提取與傾斜校正模塊后,獲得了居中且無傾斜的指針表圖像。然后對表盤進行定位操作,表盤定位模塊由邊緣檢測、邊緣細化、輪廓檢測、計算圓心四部分組成,具體步驟描述如下:
①邊緣檢測
灰度化后,使用邊緣檢測算法尋找指針表邊緣,常用邊緣檢測算子有Roberts算子、Sobel算子、Prewitt算子等,在綜合考慮算法復(fù)雜度和邊緣檢測效果后,本文選用了Sobel算子。
②邊緣細化
邊緣檢測后,輸出圖像的邊緣比較寬,為了方便后續(xù)處理,需要進行邊緣細化。本文采用Zhang[16]細化算法進行邊緣細化。
③輪廓檢測
細化操作后,得到了單個像素點的儀表輪廓,本文采用八鄰域法進行邊界跟蹤,檢測指針表表盤。
④計算圓心
檢測出指針表的表盤后,本文使用改進的Hough變換圓檢測算法[17]計算圓心坐標。
指針提取模塊由Otsu算法[18]計算閾值、區(qū)域生長提取指針兩部分組成,具體步驟描述如下:
①Otsu算法計算閾值
使用Otsu算法求取分割閾值,將該閾值作為區(qū)域生長的相似性質(zhì)判斷準則。
②區(qū)域生長提取指針
指針區(qū)域的提取使用區(qū)域生長法。具體思路是基于灰度圖像,根據(jù)1.3節(jié)④中得到的圓心坐標找到附近灰度值比較小的像素點作為生長種子,以本節(jié)①中的分割閾值作為相似性質(zhì)判斷準則,如果相鄰像素灰度值小于閾值則為指針所在像素,直到?jīng)]有相鄰像素灰度值小于閾值時結(jié)束生長。
該模塊由CNN粗讀數(shù)和角度法細讀數(shù)兩部分組成,具體流程如下所述。
①CNN粗讀數(shù)
由于CNN在圖像分類、圖像語義分割等圖像相關(guān)任務(wù)表現(xiàn)十分優(yōu)秀,所以本文采用CNN用于分類指針表的大刻度。
網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示,表1給出了各層的詳細配置。該網(wǎng)絡(luò)由輸入層、四個卷積層(Conv1、Conv2、Conv3、Conv4)、一個最大池化層(Max pooling)、一個全連接層和一個softmax層組成。每一個卷積層后面都有一個修正線性單元。下面對各層描述如下:

表1 CNN具體參數(shù)

圖4 CNN網(wǎng)絡(luò)結(jié)構(gòu)圖
輸入層:將預(yù)先拍攝好的2800張圖片灰度化并將大小改為240×240后作為網(wǎng)絡(luò)的輸入。
卷積層:該網(wǎng)絡(luò)包含4個卷積層(Conv1,Conv2,Conv3,Conv4),每一層卷積跟隨一個修正線性單元,設(shè)置卷積核的步長為1。
池化層:四個卷積層之后,是一個最大池化層,池化層的卷積核大小為2×2、步長為1。選擇最大池化層的原因是它具有平移不變性。
全連接層:全連接層連接所有池化層的輸出,全連接層的卷積核大小是1×1,步長為1。
Softmax層:將全連接層的輸出輸入到softmax函數(shù)中進行多分類,得到對應(yīng)標簽的匹配概率。本文softmax輸出為4×1的向量,表示對應(yīng)四種示值的匹配概率,分類結(jié)果選擇最大概率所對應(yīng)的儀表示值。
該網(wǎng)絡(luò)輸出的是當前指針表圖像中的指針屬于哪一類,即指針表的大刻度值。為了便于后續(xù)描述,將分類結(jié)果命名為R。
②角度法細讀數(shù)
由于1.4節(jié)②中區(qū)域生長法提取的指針較粗,為了更加準確讀數(shù),需要將提取出的指針進行細化,同時去除圓心周圍細小的干擾點。細化后的指針仍不能滿足讀數(shù)需求,所以需要擬合一條和細化后指針重合的直線。本文采用改進的Hough變換直線檢測算法擬合直線[19],通過該算法可以得到指針傾斜角度。
讀數(shù)前需要人為標定大刻度對應(yīng)的傾斜角度θLS,因此將θLS作為已知數(shù)據(jù)。求取精細讀數(shù)的公式如(1)所示,求取最終結(jié)果的公式如(2)所示。

式中:reading為精細讀數(shù)的數(shù)值,θ為當前指針的傾斜角度,θLS為大刻度對應(yīng)的傾斜角度,θ1為相鄰兩個大刻度之間的夾角,θ2為兩個大刻度的差值,result為最終讀數(shù),R為CNN輸出的大刻度值。θ1、θ2、θLS是已知的。當指針位于0.4 MPa~0.8 MPa之間時,計算指針讀數(shù)值的示意圖如圖5所示(式(2)中的“±”,如果θLS<θ,則“+”,反之,則“-”)。

圖5 計算指針讀數(shù)值示意圖
實驗仿真在MATLAB環(huán)境下完成,CPU為Intel Corei5-9300H,內(nèi)存為8G,顯卡為NVIDIA GeForce GTX 1650。儀表目標檢測模塊采用1 230張1.6 MPa量程的壓力表,960張用于訓(xùn)練,270張用于測試,每張圖片的分辨率為800×1 066。使用平均準確率、對數(shù)平均誤檢率兩個指標來評價目標檢測效果。儀表檢測結(jié)果如表2所示,部分儀表檢測效果圖如圖6所示。從表2可以看出Faster RCNN模型用于目標檢測平均準確率為0.88,對數(shù)平均誤檢率為0.1,模型的檢測效果可以滿足日常需求。同時Faster RCNN模型的檢測速度非常快,每張圖片平均檢測時間僅為0.2 s。

圖6 部分儀表檢測效果圖

表2 儀表檢測結(jié)果
部分傾斜校正的效果圖如圖7所示。傾斜校正效果會直接影響后續(xù)的讀數(shù)精度。對多種傾斜情況的測試結(jié)果表明,使用SIFT、RANSAC和透視變換方法能有效地校正圖像傾斜。圖7中間一列的圖片顯示了指針表傾斜90°的情況,校正結(jié)果令人滿意,這是由于SIFT關(guān)鍵點檢測的角度為[-π,π],該方法能夠適應(yīng)旋轉(zhuǎn)、尺度縮放和亮度變化,并不易受視角變化、仿射變換和噪聲的干擾。

圖7 部分傾斜校正效果圖
CNN分類結(jié)果如表3所示。CNN模型分類共有1 900個訓(xùn)練數(shù)據(jù),900個測試數(shù)據(jù),識別準確率為98.12%。準確率不能達到100%的主要原因是當樣本從左右兩側(cè)接近某一刻度線時(如圖8所示),容易產(chǎn)生誤分類。為了提高CNN模型分類的準確率,我們將圖8(a)和圖8(b)兩種情況均分類為刻度線值(0.4 MPa)。然后,比較指針傾斜角度和0.4 MPa刻度線的傾斜角度。如果0.4 MPa刻度線傾角大于指針傾角,則最終讀數(shù)時用0.4 MPa減去指針傾角對應(yīng)的壓力值,反之則加上指針傾角對應(yīng)的壓力值。

表3 指針表分類結(jié)果

圖8 CNN誤分類示意圖
本節(jié)包括無干擾環(huán)境下指針表讀數(shù)識別結(jié)果分析、有干擾環(huán)境下讀數(shù)識別結(jié)果分析、不同指針表讀數(shù)識別結(jié)果分析、現(xiàn)場環(huán)境下指針表讀數(shù)識別結(jié)果分析。
①無干擾環(huán)境下指針表讀數(shù)識別
無干擾環(huán)境下指針表圖像的處理過程如圖9所示,部分識別結(jié)果見表4。

圖9 無干擾情況下指針表圖像的處理過程

表4 無干擾環(huán)境下部分指針表的識別結(jié)果
由表4可見,最大引用誤差為0.34%,該誤差值對本實驗中所用壓力表(1.6級)是可以接受的。
②有干擾環(huán)境下指針表讀數(shù)識別
在實際工作環(huán)境中,指針表讀數(shù)可能會受光斑、傾斜、污點和較暗光線等因素干擾。為了測試本文算法的穩(wěn)定性,我們在實驗室條件下模擬了真實環(huán)境中可能存在的干擾,并進行了實驗。有干擾環(huán)境下指針表圖像的處理過程如圖10所示,部分讀數(shù)結(jié)果見表5。

圖10 有干擾情況下指針表圖像的處理過程

表5 有干擾情況下部分指針表的識別結(jié)果
由表5可以看出,最大引用誤差為0.39%。實驗表明,該方法在一定干擾情況下仍有較好性能。對比無干擾情況,干擾環(huán)境下該方法的識別誤差有所增加,其中污點和光線較暗環(huán)境下的讀數(shù)誤差較大。
③不同指針表的讀數(shù)識別
為了評估算法的泛化能力,選擇了四種不同的指針表進行識別。不同指針表圖像的處理過程如圖11所示,部分識別結(jié)果見表6。

圖11 不同指針表圖像的處理過程

表6 不同指針表部分識別結(jié)果
由表6可見,最大引用誤差為0.4%。實驗表明,本文所提出的方法能準確識別不同指針表。
④現(xiàn)場環(huán)境下指針表的讀數(shù)識別
為了評估算法對工業(yè)現(xiàn)場指針表的讀數(shù)識別能力,我們對取自工業(yè)現(xiàn)場的四幅指針表圖像進行了讀數(shù)識別。現(xiàn)場環(huán)境下指針表圖像的處理過程如圖12所示,識別結(jié)果見表7。

圖12 現(xiàn)場環(huán)境下指針表圖像的處理過程

表7 現(xiàn)場環(huán)境下指針表圖像的識別結(jié)果
由表7可以看出,現(xiàn)場環(huán)境下指針表圖像識別的最大引用誤差為0.66%。該值雖比無干擾和有干擾環(huán)境下的最大引用誤差略有增加,但仍能滿足實際應(yīng)用要求。
為了評估本文所提方法的準確性,我們與文獻[3]的角度法和文獻[5]的距離法進行了比較。比較結(jié)果如表8所示。本文方法在實驗室和工業(yè)現(xiàn)場讀數(shù)環(huán)境下的最大引用誤差分別為0.4%和0.66%。文獻[3]在實驗室環(huán)境下的最大引用誤差為0.98%,文獻[5]在實驗室環(huán)境下的平均引用誤差為0.8%。可見,本文所提方法的讀數(shù)準確性優(yōu)于文獻[3]和文獻[5]。

表8 不同讀數(shù)方法比較
為了提高指針表自動讀數(shù)方法的準確性,簡化讀數(shù)前設(shè)備安裝與標定過程,本文提出了一種基于CNN的漸進式指針表自動讀數(shù)方法。該方法首先利用Faster-RCNN檢測當前視野下指針表目標,然后利用SIFT、RANSAC算法和透視變換解決指針表傾斜和旋轉(zhuǎn)問題,再利用八鄰域法檢測指針表表盤,利用區(qū)域生長法提取指針,最后利用CNN識別指針表的大刻度示值得到指針表的粗讀數(shù),利用角度法得到指針表的細讀數(shù),完成自動讀數(shù)過程。本文利用所提方法對不同指針表和多種干擾因素下的指針表進行了讀數(shù)實驗。實驗結(jié)果表明,本文所提出的方法具有較好的準確性與抗干擾能力,讀數(shù)最大誤差不高于0.7%。