姚 洋, 彭道剛, 王志萍
(上海電力大學(xué) 自動化工程學(xué)院, 上海 200090)
指針式儀表(比如溫度表、流量表、濕度表、壓力表等)作為一種結(jié)構(gòu)簡單、成本低、安裝方便且可靠性較高的常用測量儀器,能夠非常直觀地顯示出待測數(shù)據(jù)的變化,因此被廣泛應(yīng)用于工業(yè)生產(chǎn)、國防軍工等領(lǐng)域[1]。如何更加快速、精確地獲取它們的測量數(shù)據(jù)是其應(yīng)用領(lǐng)域中亟需解決的問題[2-6]。
在圖像獲取過程中,拍攝角度、儀表位置、污漬及光照不均勻等因素會導(dǎo)致圖像存在大量噪聲,嚴(yán)重影響儀表讀數(shù)識別精度[7];且圖像邊緣信息是圖像中的關(guān)鍵信息,對物體識別具有重要意義,對目標(biāo)輪廓及區(qū)域內(nèi)相對位置的檢測結(jié)果將直接影響圖像識別精度。因此,邊緣檢測技術(shù)是儀表圖像分析領(lǐng)域研究的重點和難點。
傳統(tǒng)的邊緣檢測算法有Sobel算法、Log算法、Krich算法、Roberts算法等,但其處理效果并不理想[8]。1986年,CANNY J首次提出了Canny邊緣檢測算法(以下簡稱“Canny算法”),能有效彌補(bǔ)其他傳統(tǒng)邊緣檢測算法的不足,因此Canny算法被認(rèn)定為邊緣檢測方法中較好的算法[9]。但其缺點是對噪聲魯棒性低,檢測圖像會多處出現(xiàn)偽邊緣、孤立邊緣點等問題,影響后續(xù)的檢測精度。
為解決以上問題,本文提出了一種改進(jìn)的Canny算法,采用5×5鄰域計算各像素點梯度幅值,并通過自動選擇最佳雙閾值的方法提高邊緣檢測精度,再結(jié)合Hough變換技術(shù)進(jìn)行儀表指針位置定位,得到了較好的應(yīng)用效果。
指針式儀表采用圖像預(yù)處理技術(shù)的目的是為了將表盤區(qū)域從復(fù)雜背景中提取出來,從而更加精確地獲得儀表的讀數(shù)。預(yù)處理技術(shù)主要包括:縮放和變換、灰度化、去噪和平滑、膨脹和腐蝕。在對電廠儀表識別過程中,本文采用的預(yù)處理操作有灰度化、去噪和平滑。
灰度化能夠減少圖像處理過程中CPU的使用頻率,加快計算速度,減少計算時間。設(shè)R代表紅色像素,G代表綠色像素,B代表藍(lán)色像素,將原圖轉(zhuǎn)換為灰度圖的計算公式為
(1)
電廠儀表的圖像噪聲多屬于正態(tài)分布。高斯濾波適用于消除正態(tài)分布噪聲。高斯濾波是對整幅圖像進(jìn)行加權(quán)平均的過程,每一個像素點的值,都由其本身和鄰域內(nèi)的其他像素值經(jīng)過加權(quán)平均后得到,其濾波結(jié)果直接影響邊緣檢測效果以及儀表讀數(shù)識別結(jié)果。
本文以電廠中的壓力表作為測試對象,將復(fù)雜環(huán)境下的壓力表根據(jù)圓形模板匹配進(jìn)行剪切保存,并把保存下來的壓力表轉(zhuǎn)化為灰度圖,再采用高斯濾波去除噪聲。圖1為壓力表提取后的灰度圖和高斯濾波圖。由圖1可知,經(jīng)過高斯濾波,儀表讀數(shù)更加易識別。
圖1 壓力表的灰度圖和高斯濾波圖
傳統(tǒng)Canny算法需要根據(jù)圖像的濾波情況手動輸入全局高低閾值,高低閾值的選定對圖像邊緣處理的效果影響甚大。閾值的選擇需要工程師憑借對圖像處理的理解及經(jīng)驗積累,才能選出大概的高低閾值,且其閾值有可能不是最優(yōu)值。
傳統(tǒng)Canny算法利用2×2鄰域一階偏導(dǎo)的有限差分進(jìn)行圖像平滑后來計算梯度幅值和梯度方向,用x和y分別標(biāo)識橫向和縱向,G[i,j],G[i,j+1],G[i+1,j],G[i+1,j+1]分別代表G[i,j]像素的周圍像素點,則其方向?qū)?yīng)的偏微分公式為
G[i+1,j+1]-G[i+1,j]}
(2)
G[i+1,j+1]-G[i,j+1]}
(3)
梯度幅值公式為
(4)
梯度方向公式為
(5)
對圖1(b)采用傳統(tǒng)Canny算法進(jìn)行邊緣檢測及Hough變換檢測,結(jié)果如圖2所示。
圖2 傳統(tǒng)Canny算法邊緣檢測及Hough變換檢測后的壓力表圖像
由圖2可以看出,由于傳統(tǒng)Canny算法設(shè)置的閾值過低,產(chǎn)生了偽邊緣信息,Hough變換檢測指針時出現(xiàn)5條直線(其中1條極短,縮小后顯示不明顯),影響Hough變換直線檢測和圓檢測的準(zhǔn)確性,產(chǎn)生了誤差。其對應(yīng)的坐標(biāo)和儀表轉(zhuǎn)動軸心的坐標(biāo)顯示在Win32控制臺上,如圖3所示。
圖3 圓心坐標(biāo)和直線坐標(biāo)
圖3中,[173,177]為檢測出的儀表轉(zhuǎn)動軸心點,其他坐標(biāo)為儀表指針檢測的始終點。為保留靠近指針的2條直線,其他3條直線要去除掉,需依次遍歷Hough直線上的所有點,根據(jù)距離圓心最近的直線,保留其中2條直線。
2.2.1 改進(jìn)的梯度幅值計算方法
本文改進(jìn)了傳統(tǒng)Canny算法的濾波器和高低閾值的人工設(shè)置,將傳統(tǒng)的2×2鄰域增加至5×5鄰域。G[i,j],G[i,j+1],G[i,j+2],G[i+1,j],G[i+1,j+1],G[i+1,j+2],G[i+2,j],G[i+2,j+1],G[i+2,j+2]分別代表圖像像素以G[i,j]為中心的鄰域的像素點。通過計算0°,45°,90°,135°等8個方向的一階偏導(dǎo)數(shù)有限差分來確定像素梯度幅值。設(shè)d1,d1是像素中心點G[i,j]與鄰域像素點的差值。算法如下。
x方向偏導(dǎo)數(shù)為
(6)
y方向偏導(dǎo)數(shù)為
(7)
45°方向偏導(dǎo)數(shù)為
(8)
135°方向偏導(dǎo)數(shù)為
(9)
梯度幅值為
(10)
梯度方向為
(11)
采用5×5鄰域的濾波器可以對梯度幅值陣列中的任一像素沿梯度方向進(jìn)行梯度幅值的插值。通過對傳統(tǒng)Canny算法濾波器的改進(jìn)可以檢測梯度幅值的極大值點,從而有效抑制噪聲干擾。
2.2.2 改進(jìn)的自適應(yīng)雙閾值選擇
在電廠儀表巡檢時,電力巡檢機(jī)器人采用自動變焦技術(shù)使儀表圖像變得清晰,并保存清晰圖像。儀表像素部分在圖像像素中所占比例有大小之分:大比例儀表圖像具有邊緣信息少、梯度分布不分散的特點;小比例儀表圖像具有邊緣信息豐富、梯度幅度分布分散的特點。傳統(tǒng)Canny算法中高低閾值是固定不變的,采用傳統(tǒng)Canny算法的巡檢機(jī)器人在電廠環(huán)境中得不到應(yīng)用。根據(jù)電廠環(huán)境的特殊情況,本文對傳統(tǒng)Canny算法進(jìn)行了自適應(yīng)高低閾值的改進(jìn)。
在改進(jìn)自適應(yīng)雙閾值算法中,定義圖像梯度幅度為I[i,j],梯度幅度均值為Iave;Th和Tl分別表示要求的高低閾值;σ表示圖像的標(biāo)準(zhǔn)差,K是它的系數(shù),取值范圍為K∈(1.2,1.6)。將大比例儀表圖像和小比例儀表圖像的自適應(yīng)雙閾值選擇整合為一種算法,該算法過程如下。
(1) 判斷像素梯度幅度I[i,j]是否小于Iave的15%~20%,如果判斷結(jié)果為是,則直接將該像素標(biāo)記為偽邊緣點。
(2) 如果滿足I(i,j)大于Iave的15%~20%,則根據(jù)如下公式可計算出圖像的高低閾值
(12)
(13)
Th=Iave+Kσ
(14)
(15)
當(dāng)儀表圖像檢測邊緣信息時,由于邊緣信息比較豐富且梯度幅度比較分散,所以σ的值會更大。這時應(yīng)該減小K的值,目的是去除更多的偽邊緣信息;反之,若σ值越小,則應(yīng)增大K值。
本文在VS2015軟件搭載OpenCV3.4庫作為算法實現(xiàn)的操作平臺,采用改進(jìn)Canny算法檢測儀表圖像邊緣,并與傳統(tǒng)Canny算法檢測做對比測試。由圖3可以看出,傳統(tǒng)Canny算法檢測的邊緣信息出現(xiàn)偽邊緣,進(jìn)而Hough檢測出來的儀表出現(xiàn)了5條指針的直線邊緣,對儀表識別出現(xiàn)了誤差。
由于發(fā)電廠中的儀表圖像信息的特點是邊緣信息較少,梯度幅度和平均值都較小,所以將K值設(shè)置為1.5。
由式(12)~式(15)可以推導(dǎo)出改進(jìn)自適應(yīng)雙閾值,不需要人為設(shè)置Canny算法的高低閾值。對壓力表的灰度圖采用改進(jìn)Canny算法進(jìn)行邊緣檢測及Hough變換檢測,結(jié)果如圖4所示。
圖4 改進(jìn)Canny算法邊緣檢測及Hough變換檢測后的壓力表圖像
由圖4可以看出,改進(jìn)Canny算法提高了儀表的邊緣檢測精度,使Hough變換檢測直線和圓邊緣更加準(zhǔn)確。改進(jìn)Canny算法自動設(shè)置閾值,且是最優(yōu)閾值與傳統(tǒng)Canny算法相比,縮短了儀表識別算法的運(yùn)行時間。改進(jìn)Canny算法保留了原圖像的邊緣,比傳統(tǒng)方法具有更好的邊緣檢測效果,可應(yīng)用于電力巡檢機(jī)器人平臺。
電廠中的溫度表經(jīng)過改進(jìn)Canny算法邊緣檢測及Hough變換檢測前后的效果圖如圖5所示。由圖5可知,改進(jìn)Canny算法及Hough變換檢測出來的儀表大致一樣,都是由圓輪廓和指針組成。
圖5 改進(jìn)Canny算法邊緣檢測及Hough變換檢測前后的溫度表圖像
在改進(jìn)Canny算法檢測儀表邊緣信息圖像的基礎(chǔ)上,采用Hough變換是進(jìn)行中心特征點提取最直接的算法。該算法根據(jù)數(shù)學(xué)模型上的參數(shù)空間計算累積結(jié)果的最大值,檢測出特定的直線和圓。該過程稱為Hough變換。Hough變換技術(shù)可以有效地抑制圖像中的特征點斷裂現(xiàn)象,同時也有非常好的容錯性和魯棒性。本文采用這種儀表識別算法來進(jìn)行指針位置定位。
指針儀表識別算法主要是采用儀表刻度盤上的最大量程和初始量程之間的角度和指針中心線的角度之間的關(guān)系來計算出指針?biāo)傅膬x表量程讀數(shù)[10]。以Hough圓檢測出的圓心作為直角坐標(biāo)系的原點建立直角坐標(biāo)系和圖像的空間坐標(biāo)系,假設(shè)儀表的最小和最大量程范圍為(Lmin,Lmax),由之前的Hough圓檢測出的圓心為原點O,檢測出的圓心為儀表表盤轉(zhuǎn)動的軸心。
(16)
Δφ與ΔφM可分別表示為
(17)
(18)
根據(jù)式(16)~式(18)可以得出,每個儀表的初始量程和最大量程之間的角度是確定且已知的,檢測出的儀表指針與儀表初量程刻度之間的夾角φ成為得到儀表數(shù)值的關(guān)鍵所在。根據(jù)儀表指針?biāo)惴ㄗ鴺?biāo)系UV和XY之間的關(guān)系,可以由指針與空間坐標(biāo)系形成的夾角θ得出儀表指針和初始量程刻度之間的夾角φ。
壓力表指針?biāo)惴ㄗ鴺?biāo)系如圖6所示。
圖6 壓力表指針?biāo)惴ㄗ鴺?biāo)系
以Hough圓檢測的圓心為中心像素點建立直角坐標(biāo)系,并劃分為4個區(qū)域,表明指針的活動范圍。
儀表指針的活動區(qū)域如圖7所示。
圖7 儀表指針的活動區(qū)域
不同區(qū)域中φ與θ的關(guān)系分析如下。
φ=90°+θ
(19)
φ=90°-θ
(20)
90°-θ=360°-φ
(21)
90°-θ+360°-φ=180°
φ=270°-θ
(22)
通過Hough變換檢測的儀表指針落在哪個區(qū)域,根據(jù)式(19)~式(22)推導(dǎo)出儀表指針與X軸負(fù)方向的夾角φ,再根據(jù)對應(yīng)區(qū)域的公式算出Δφ,最后由式(16)推導(dǎo)出儀表的指針讀數(shù)I。
設(shè)人工讀數(shù)為I0,算法測量值為I,儀表讀數(shù)的識別率為R。儀表讀數(shù)識別率的公式為
(23)
在電廠測試環(huán)境下,考慮表盤污漬、光照和空氣污染等因素影響,測試該算法的可行性和穩(wěn)定性。本文對電廠儀表的50張圖片進(jìn)行了分析,提取了10張圖片作為樣本,分別采用Canny傳統(tǒng)算法、改進(jìn)Canny算法與人工讀數(shù)進(jìn)行比較,結(jié)果如表1所示。根據(jù)式(23)可計算出改進(jìn)Canny算法所得到的儀表讀數(shù)識別率可達(dá)95%。
表1 Canny傳統(tǒng)算法、改進(jìn)Canny算法與人工讀數(shù)識別比較
誤差的主要來源是,在目標(biāo)檢測過程中,表盤的指針和內(nèi)輪廓會發(fā)生變形,導(dǎo)致部分刻度間距拉大或者縮小,以至在判讀刻度過程中,如果指針靠近發(fā)生偏移的刻度,讀數(shù)會偏大或者偏小。另外,在提取儀表讀數(shù)過程中,如果存在較大的干擾光源,會使圖像增強(qiáng)效果變差,無法完全濾除反光影像,導(dǎo)致后續(xù)表盤部分的提取發(fā)生較大的偏差。
本文在對傳統(tǒng)Canny算法檢測邊緣研究的基礎(chǔ)上,提出改進(jìn)Canny算法將改進(jìn)濾波器和改進(jìn)自適應(yīng)閾值選擇算法應(yīng)用于電力巡檢儀表圖像的邊緣檢測中,通過實驗測試得到清晰的邊緣檢測圖像。特別是在不同噪聲環(huán)境下,該算法避免了邊緣信息不足造成的儀表讀數(shù)不精確的問題,提升了儀表讀數(shù)的識別精度。本文中所建立的改進(jìn)Canny算法邊緣檢測及Hough變換檢測方法,經(jīng)實驗測試穩(wěn)定可靠,儀表讀數(shù)識別率可達(dá)95%,與人工讀數(shù)的誤差較小。