徐小強, 陳 旭, 冒 燕
(武漢理工大學(xué) 自動化學(xué)院, 湖北 武漢 430070)
指針式儀表的示數(shù)讀取主要分為表盤識別、指針提取和示數(shù)計算3個步驟.表盤識別一般使用霍夫圓檢測[1]、橢圓檢測[2-4]和深度學(xué)習(xí)[5-6]等方法;指針提取則普遍采用霍夫直線檢測[1,7-9]、最小二乘法擬合[4,10]和剪影法[11-12]等方法;示數(shù)計算最為常用的是距離法[8,13]和角度法[1,4,9,12,14]兩種.3個步驟中又以指針提取最為關(guān)鍵,目前最有效的算法是霍夫直線檢測,但是進行霍夫直線檢測需要將圖像細化,會消耗大量時間,并且很容易受到背景或其他因素的影響導(dǎo)致精度降低.ZHU J.T.等[4]試圖使用最小二乘法擬合直線代替霍夫直線檢測以提高速度,但最小二乘法擬合直線也很容易受到背景因素的干擾,并且最小二乘法只考慮單一方向上的誤差,仍然會導(dǎo)致讀取結(jié)果的偏差較大.LI P.F.等[15]提出一種8特殊點標注法,首先對模板圖像進行標注,再根據(jù)標注信息在表盤圓環(huán)帶中定位指針位置;該方法對指針的定位精度高,但是其用到的模板圖像需要人為標定.ZHANG Y.Q.等[10]提出一種基于模板匹配和動態(tài)TMLP的方法對指針進行定位,再使用最小二乘法擬合指針偏轉(zhuǎn)角度和儀表示數(shù)的關(guān)系,可以消除同型號儀表中因不同儀表之間的微小差異而引起的誤差,但是算法復(fù)雜度高,計算速度慢.
為解決上述問題,文中擬提出一種基于戴明回歸和感興趣區(qū)域(region of interest,ROI)細化的方法來讀取指針式儀表示數(shù).首先使用mask(掩膜)技術(shù)對圖像處理,選出ROI,在ROI中鎖定指針后取其外接矩形作為進一步縮小的ROI;然后在原圖上鎖定這一小區(qū)域,對此小區(qū)域使用細化算法細化;最后使用戴明回歸對指針所在直線進行擬合,在此過程中利用幀差法消除指針抖動的影響.得到指針直線后獲取斜率,再利用角度法計算出儀表數(shù)值.
文中提出一種基于戴明回歸和ROI細化的指針式儀表示數(shù)讀取技術(shù),適用于指針式儀表示數(shù)的自動讀取.該方法的實現(xiàn)流程如圖1所示.
圖1 示數(shù)讀取流程示意圖
使用攝像頭采集指針式儀表的圖像時,常常包含復(fù)雜的背景信息和噪聲,這會影響指針識別的精度[9],所以在檢測指針之前需要對圖像進行預(yù)處理,消除干擾.ROI的選擇是識別過程中的重要部分,它直接影響指針區(qū)域識別的效果.在擬合指針所在直線的方程之前,需要對指針區(qū)域圖像做細化處理,以增加直線的擬合效果.使用戴明回歸擬合直線并計算直線方程.最后根據(jù)擬合出的直線的斜率計算角度,利用角度法計算出儀表當前的示數(shù).
2.1.1選擇ROI
在獲取的圖像中,不僅有儀表本身所帶的背景圖像,還有儀表所處環(huán)境的背景圖像,這些信息會對指針提取造成影響.利用mask技術(shù)可以將背景變成黑色,進而突出選定的ROI.在指針識別過程中,指針的活動區(qū)域為如圖2所示的綠色環(huán)形帶,在指針活動的區(qū)域內(nèi)選定ROI為如圖2所示的藍色環(huán)形帶.
圖2 指針活動區(qū)域示意圖
2.1.2基于顏色通道的剪影法
提取指針需要用到剪影法,但是普通的剪影法需要獲取儀表的無指針圖像,計算式為
P(i,j)=I(i,j)-N(i,j),
(1)
式中:P(i,j)、I(i,j)、N(i,j)分別表示指針圖像、待識別圖像、無指針圖像的像素值.
改進的剪影法利用指針的顏色信息,將圖像分為R、G、B共3個通道,根據(jù)指針顏色的高區(qū)分度對3個通道進行加減運算即可提取出指針的顏色信息.試驗中使用的儀表指針為紅色,利用改進的剪影法提取指針信息,計算式為
P(i,j)=G(i,j)-R(i,j),
(2)
式中:G(i,j)、R(i,j)分別為原圖像G、R通道的像素值.需要說明的是根據(jù)指針顏色信息的不同,3個顏色通道之間的運算式需要進行相應(yīng)的調(diào)整.
2.1.3二值化和形態(tài)學(xué)操作
利用基于顏色通道的剪影法對選定的ROI處理之后,ROI內(nèi)的像素值分布于0~255,雖然此時儀表的指針和背景具有一定的區(qū)分度,但是還需要利用二值化技術(shù)進一步處理,為二值化選定適合的閾值之后,使ROI內(nèi)像素值設(shè)置為0或255.
形態(tài)學(xué)操作是圖像處理過程中經(jīng)常會用到的方法,其基本運算包括膨脹、腐蝕、開、閉、頂帽和黑帽等.使用膨脹操作可以修復(fù)二值圖像中的小型黑洞,增加二值化圖像的連通性.
儀表的質(zhì)量有好有壞,即使是同一廠家同一批次生產(chǎn)的儀表質(zhì)量也會有差異,而儀表所測量的設(shè)備穩(wěn)定性也不盡相同,再加上一些不可控的外界因素,都會使測量時指針發(fā)生輕微的抖動.在提取指針和計算示數(shù)之前如果不消除此類影響,會導(dǎo)致讀取結(jié)果不穩(wěn)定.
當儀表指針穩(wěn)定在某一刻度不發(fā)生變化,或者只有很輕微的抖動時,可以認為當前儀表的示數(shù)沒有改變,直接使用前一張的結(jié)果,減少計算量.
針對上述問題,對指針圖像做消抖處理.對前一張圖像處理之后,將其二值化圖像保存,與當前張的二值化圖像做按位異或,計算二者之間的差異,若差異小于某一閾值,則說明當前圖像中指針位置穩(wěn)定不變或者僅存在抖動,直接輸出前一張圖像的處理結(jié)果即可.計算式為
(3)
式中:P(i,j)、Pb(i,j)分別表示當前張、前一張的圖像像素值;D表示兩張圖像異或操作之后得到的差異值;⊕表示異或操作.
在消抖的過程中閾值的選擇尤為重要,若選的太大會造成讀數(shù)不靈敏,誤將實際的指針變化判別為抖動,若太小則起不到消抖的效果.文中選取閾值的計算式為
(4)
(5)
式中:Vmax、Vmin分別為量程上限、下限;R是人為選取的最小分辨率,一般選擇為待識別儀表刻度最小分辨率的十分之一;D(k,k+1)表示儀表指針移動k+1個分辨率之后的二值化圖像和移動k個分辨率后的二值化圖像按位異或之后得到的差異值.
排除了抖動的影響,拿到待識別圖像的ROI,需要對ROI圖像做細化處理.細化也稱骨骼化,需要注意4點要求:保留源圖像的連通性;保留端點和孤立點;對稱細化;保證算法各向同性.
常用的細化算法有Zhang快速并行細化算法、Deutch細化算法、Hilditch細化算法和Rosenfeld算法.文中選用Rosenfeld算法細化指針,但稍作修改,在執(zhí)行細化算法之前,將圖像邊界處的像素值全部置零,消除邊界值鄰域點的特殊情況給指針細化帶來的影響.
在Rosenfeld算法中最重要的是連通域的概念,選擇目標點周圍8個鄰域點構(gòu)成8個連通區(qū)域.在Rosenfeld算法中,將刪除后不會改變連通性的目標點稱為8simple點.如圖3a、b所示分別為非8simple點和8simple點.
圖3 目標點分類圖
Rosenfeld算法會刪除是8simple點但不是孤立點(outlier)和端點(endpoint)的像素點.如果目標點周圍8個點的像素值之和為0,則此目標點為孤立點;如果目標點周圍8個點的像素值之和為1,則此目標點為端點.
Rosenfeld算法的迭代過程如下:① 逐個掃描所有像素,如果某像素是上邊界點、下邊界點、左邊界點或者右邊界點,且是8simple點,但不是孤立點和端點,刪除該像素;② 重復(fù)步驟①直到?jīng)]有目標點可被刪除,退出循環(huán).
細化后的指針圖像中白色像素點組成的直線就是指針所在的直線,為擬合出該直線的方程,普遍使用的方法是霍夫直線檢測,但是這種方法要求搜尋的直線經(jīng)過的特征點最多,在實際使用過程中,指針所在直線不一定是經(jīng)過特征點最多的那一條,而是所有的特征點都在指針所在直線的附近.
此時雖然可以使用最小二乘法擬合直線解決這一問題,但是最小二乘法擬合直線只考慮到y(tǒng)方向上的誤差,具有不合理性.
所以文中選擇使用戴明回歸擬合儀表指針所在直線,戴明回歸擬合直線與最小二乘法擬合直線的原理一樣,但是它們需要優(yōu)化的目標函數(shù)不同,可以通過優(yōu)化函數(shù),使得所有特征點到目標直線的斜距離最短.
求出特征點(x,y)的樣本均值為
(6)
求出特征點(x,y)的樣本方差為
(7)
求出x和y的協(xié)方差為
(8)
設(shè)目標直線為
(9)
則利用戴明回歸擬合直線方程時,待優(yōu)化的目標函數(shù)為
(10)
(11)
通過戴明回歸擬合出指針所在直線,即可得到直線斜率,再利用斜率計算指針的偏轉(zhuǎn)角度.此時需要注意的是如果指針的偏轉(zhuǎn)角度大于90°,計算所得的角度會比實際角度滯后半個函數(shù)周期,需要將該角度加上180°.
得到指針偏轉(zhuǎn)角度后,根據(jù)儀表盤刻度情況將其轉(zhuǎn)化為儀表示數(shù).首先根據(jù)先驗知識獲取儀表盤中指針指向最小刻度線和最大刻度時的指針偏轉(zhuǎn)角度θmin和θmax,儀表示數(shù)計算式為
(12)
為了驗證文中方法的可行性,設(shè)計了試驗.試驗硬件裝置包括0~30 V直流電壓表、0~30 V直流電壓源、計算機、USB高清攝像頭、攝像頭支架和試驗臺.首先固定電壓表,將直流電壓源與電壓表連接,通過攝像頭支架將攝像頭固定使攝像頭光軸與電壓表平面垂直,使用計算機控制攝像頭讀取圖像并讀取電壓表示數(shù).計算機安裝Windows10系統(tǒng),使用Python編程.
具體試驗方案如下:① 調(diào)節(jié)直流電壓源輸出恒定電壓值,攝像頭拍攝指針式儀表的圖像,分別使用文中算法和霍夫直線檢測的算法讀取儀表示數(shù),對比測試文中算法的識別精度;② 利用攝像頭讀取1 000張圖像,利用等距抽樣法選取80張圖像,分別使用文中算法和全局細化算法進行處理,計算總時間和處理一張圖像的平均時間,以測試文中算法的速度;③ 利用攝像頭讀取1 000張圖像,選取其中連續(xù)的80張圖像,計算總時間和處理一張圖像的平均時間,與步驟②對比,測試文中提出的方法是否具有防抖動能力.
為測試文中方法讀取電壓值的精度,將直流穩(wěn)壓電源的輸出電壓設(shè)置為5~20 V的16個整數(shù)電壓值,通過攝像頭獲取儀表圖像后,分別利用文中方法和霍夫直線檢測方法對儀表示數(shù)進行讀取.讀取結(jié)果如表1所示,兩種方法的誤差曲線如圖4所示.
圖4 示數(shù)讀取誤差曲線
表1 電壓讀取結(jié)果對比 V
由表1可見,利用文中方法、霍夫直線檢測方法讀取儀表示數(shù)的平均誤差分別為0.133、0.214 V,前者比后者減小了37.85%,可見文中提出指針識別方法的效果明顯優(yōu)于霍夫直線檢測.
為測試文中方法的計算速度,先利用攝像頭讀取1 000張大小為1 920×1 080像素的待識別儀表圖像,再使用等距抽樣法從1 000張圖像中選取80張圖像,利用文中方法(未加入防抖功能)連續(xù)處理選取到的圖像,計算總時間和每張圖像處理的平均時間,并與利用全局細化處理圖像的時間對比,對比結(jié)果如表2所示.
表2 計算時間對比 s
由表2可見,對一張1 920×1 080像素的圖像進行全局細化處理,需要193.375 s,而使用文中的ROI細化算法處理,只需0.658 s.試驗結(jié)果表明,文中方法對每張圖像的平均計算時間較常規(guī)的全局細化算法減少了192.717 s,可見文中方法在計算速度方面有了很大的提升.
為測試文中方法的防抖能力,利用攝像頭讀取1 000張大小為1 920×1 080像素的圖像,選取其中連續(xù)的80張圖像,利用文中方法(加入防抖功能)處理圖像,計算所用時間并與3.3節(jié)中的結(jié)果做對比,對比結(jié)果如表3所示.
表3 是否有防抖功能計算時間對比 s
由表3可見,文中算法加入防抖功能后的單張圖像平均計算時間在未加防抖功能的基礎(chǔ)上又減少了0.050 s,這說明在加入防抖功能之后,文中方法識別出了某幾張圖像是前一幀圖像的抖動產(chǎn)生的,直接顯示了前一幀圖像的處理結(jié)果,因此節(jié)約了計算時間.
文中提出一種基于戴明回歸和ROI細化的指針式儀表讀數(shù)技術(shù),該方法檢測的平均誤差比霍夫直線檢測減小了37.85%,每張圖像的平均計算時間比全局細化算法減少了192.717 s,同時具有防抖動能力.文中提出的方法適用于各種常規(guī)的指針式儀表,但是該方法沒有加入表盤識別部分的內(nèi)容,所以要求待識別儀表與攝像頭位置相對固定,在之后的學(xué)習(xí)研究中,需要對表盤識別部分的內(nèi)容加以完善.