王 濤,劉思邦
(周口師范學(xué)院 物理與電信工程學(xué)院,河南 周口 466001)
指針儀表由于結(jié)構(gòu)簡單、價格便宜、抗干擾能力強,并且具有防塵、防水、防凍等優(yōu)點,至今被廣泛使用在工業(yè)儀器儀表領(lǐng)域中,而其數(shù)值識別一直是業(yè)界研究的熱點[1-3]. 傳統(tǒng)的儀表數(shù)值主要依靠人工肉眼識別,但由于受儀表數(shù)量較多、所處外界環(huán)境復(fù)雜等因素的影響,人工識別過程枯燥瑣碎并且容易受主觀因素影響,不可避免地會造成讀數(shù)不精確,同時在危險場合下更是無法采用人工進行讀數(shù). 隨著數(shù)字圖像處理技術(shù)和電子技術(shù)的發(fā)展,攝像頭代替人對儀表數(shù)值識別已經(jīng)成為趨勢[4-5],越來越受到業(yè)界學(xué)者的重視,近年來國內(nèi)外學(xué)者對此進行了大量的研究,取得了一系列成果.
國內(nèi)外學(xué)者對儀表數(shù)值識別的研究,目前主要集中在采用基于Hough變換的指針定位提取與識別,但是由于外界復(fù)雜環(huán)境以及指針儀表本身的影響,使得僅使用基于Hough變換的識別算法,具有一定的局限性. 倪剛等[6]提出了一種以表盤半徑和指針的旋轉(zhuǎn)中心作為先驗特征的指針定位算法,該算法基于Canny邊緣算子和Hough直線檢測算法,但是文中計算指針角度的公式采用估計法,誤差較大. 魏琦等[7]結(jié)合數(shù)字圖像處理和人工神經(jīng)網(wǎng)絡(luò)等技術(shù),對指針式儀表示值的自動判讀方法進行了研究,但是沒有考慮到圖像傾斜導(dǎo)致指針讀數(shù)不準確的問題. 施健等[8]先使用圖像減影法大致得到指針輪廓,接著通過處理對指針圖像進行細化,最后利用Hough變換得到指針夾角. 劉玉翠等[9]首先用Retinex算法對待測圖像進行增強處理,然后對增強后的圖像進行閾值處理、Hough變換進而提取到指針,最后用查表法讀取儀表示數(shù),但是需要事先計算出指針刻度值和角度之間的一一對應(yīng)關(guān)系,該方法計算數(shù)據(jù)量大,要求較高. 滕今朝等[10]用雙閾值Hough變換算法,但是僅把位置在指針角度范圍的像素點進行變換,這種方法誤差較大. 李祖賀等[11]提出了用幀差分法和角度法來自動識別指針儀表讀數(shù),同時提出利用區(qū)域極值點確定指針質(zhì)心來解決殘缺指針區(qū)域的質(zhì)心偏移問題,但是沒有考慮指針寬度對指針讀數(shù)的影響.
基于以上分析,針對目前指針儀表數(shù)值識別方法存在的一些不足和缺陷,本文以某型號壓力表為例,提出了一種指針儀表數(shù)值識別方法,圖1是使用彩色CCD攝像頭獲取該壓力表的待測圖像,該方法首先對待測圖像進行預(yù)處理,然后使用Retinex增強算法解決外界光照、霧氣等因素對儀表數(shù)值的影響;接著提出圖像矯正算法,用于將傾斜的待測圖像矯正為標準圖像,便于對其數(shù)值進行識別;最后用像素投影法和基于Hough變換的旋轉(zhuǎn)投影法來識別表盤指針的方向及角度,提高了指針角度識別的速度和精度.該方法不僅保留了目前已有儀表表盤識別算法簡單、精度高和易于實現(xiàn)的優(yōu)點,而且可以有效地解決待測圖像傾斜、不均勻光照、環(huán)境霧氣等因素對數(shù)值識別帶來的影響.
圖1 壓力表的待測圖像
本文提出的儀表數(shù)值識別流程包括5個部分:圖像預(yù)處理、圖像矯正、圖像再處理、指針角度及方向檢測、計算儀表數(shù)值.
1.1.1 灰度化
由于待測圖像是彩色圖像,需要首先將其轉(zhuǎn)化成灰度圖像,本文選擇加權(quán)平均法來進行圖像灰度化處理,加權(quán)平均法是將彩色圖像中每個像素F(x,y)的三個原色光譜分量(紅色:F(x,y)R、綠色:F(x,y)G、藍色:F(x,y)B)以不同的權(quán)值進行加權(quán)平均,然后將得到的像素值作為對應(yīng)灰度圖像在該位置的灰度值G(x,y),其計算方法如式(1)所示:
G(x,y)=0.029 9F(x,y)R+0.587F(x,y)G+0.114F(x,y)B
(1)
灰度化后的圖像如圖2所示:
圖2 灰度圖像
1.1.2 中值濾波
壓力表可能會受到外界環(huán)境因素的影響,使得待測圖像存在噪聲,本文采用中值濾波濾除圖像噪聲,本文選用3×3窗口大小掩膜的中值濾波對待測圖像進行濾波[12].
中值濾波后的圖像如圖3所示:
圖3 中值濾波圖像
1.1.3 圖像增強
壓力表所處的環(huán)境大都惡劣、復(fù)雜,外界環(huán)境因素會對其數(shù)值識別造成影響,例如:外界光照強弱不同、環(huán)境霧氣的影響等,本文采用基于Retinex的增強算法對圖像進行增強處理,使處理后的待測圖像在保留原圖像細節(jié)的基礎(chǔ)上,盡可能的消除噪聲. Retinex理論認為原始圖像S(x,y)是由反射圖像R(x,y)和亮度圖像L(x,y)所構(gòu)成,即三者滿足以下等式[13]:
S(x,y)=R(x,y)*L(x,y)
(2)
則可以通過消除亮度圖像L(x,y)的影響,進而從原始圖像S(x,y)中得到更真實的反射圖像R(x,y),但是目前對亮度圖像L(x,y)還沒有一個確切的定義,只能進行估計,本文采用單尺度的Retinex增強算法來對待測圖像進行增強處理,處理流程如下:
1)對式(2)兩邊取對數(shù),分離出反射圖像R(x,y)和亮度圖像L(x,y):
logS(x,y)=logR(x,y)+logL(x,y)
(3)
2)使用高斯低通濾波器G(x,y)對原始圖像S(x,y)進行低通濾波,得到濾波平滑后的圖像D(x,y):
(4)
D(x,y)=S(x,y)*G(x,y)
(5)
其中:*是卷積算子
3)在對數(shù)域中,用原圖像S(x,y)減去低通濾波后的圖像D(x,y),得到高頻增強的圖像F(x,y):
F(x,y)=logS(x,y)-logD(x,y)
(6)
4)對高頻增強圖像F(x,y)取反對數(shù),得到增強后的反射圖像R(x,y),即為增強后的圖像:
R(x,y)=eF(x,y)
(7)
由于攝像機、儀表在安裝、制造中可能會出現(xiàn)誤差,導(dǎo)致待測圖像出現(xiàn)傾斜,會影響數(shù)值識別,因此需要事先對傾斜的待測圖像進行矯正,使其變?yōu)闃藴蕡D像. 圖像矯正是指按照給定模板圖像的尺寸、角度等屬性對待矯正圖像進行透視變換,本文提出的圖像矯正算法流程如下:
圖4 增強后圖像
步驟1. 提取待測傾斜圖像和模板圖像的Surf(它是數(shù)字圖像中一種穩(wěn)健的局部特征點檢測和描述算法)特征,分別得到對應(yīng)的Surf特征描述子,其中:模板圖像是標準的非傾斜圖像;
步驟2. 用歐氏距離對得到的兩個Surf特征描述子進行匹配,得到匹配的Surf特征描述子點對,匹配的規(guī)則:每個Surf特征點對之間的歐氏距離越短,表示這兩個特征點越匹配;
步驟3. 選取步驟2得到的已配對Surf特征描述子點對中的前10個特征描述子點對作為最優(yōu)描述子,根據(jù)其坐標計算待測傾斜圖像和模板圖像對應(yīng)的變換矩陣;
步驟4. 利用步驟3所得到的變換矩陣對待測傾斜圖像進行透視變換,得到矯正后的標準圖像.
圖5(a)是標準模板圖像,圖5(b)是待測傾斜圖像(為了驗證本文提出算法的可靠性,本文假設(shè)待測傾斜圖像的傾斜角度為90°,實際上一般達不到90°),使用本文提出的矯正算法對傾斜圖像進行矯正,最終結(jié)果如圖5(c)所示,可以看到其與模板圖像幾乎一致,說明本文提出的圖像矯正算法具有較高的精度,可以實現(xiàn)對待測傾斜圖像進行矯正.
(a)模板圖
(b)待測傾斜圖像
(c) 矯正后圖像
圖5圖像矯正
1.3.1 圖像二值化
本文采用Otsu算法(最大類間方差法)對待測圖像進行二值化處理,Otsu能夠自適應(yīng)確定圖像的全局最佳閾值,它假定閾值k把待處理圖像分成兩類,如果此時滿足條件:這兩類的類內(nèi)方差值最小并且類間方差值最大,那么該k值就是要找的最佳閾值,此時二值化后的圖像可以用以下式子表示[14]:
(8)
如果不滿足上述條件,那么就繼續(xù)迭代尋找k值,直至滿足這個條件,使用Otsu算法二值化后的待測圖像如圖6所示:
圖6 二值化圖像
1.3.2 形態(tài)學(xué)處理
本文采用腐蝕和膨脹形態(tài)學(xué)算法對二值化后的待測圖像做進一步處理,以突出指針. 腐蝕算法用于增大二值化圖像中的黑色目標區(qū)域,縮小白色背景區(qū)域;膨脹算法用于增大二值化圖像中的白色背景區(qū)域,縮小黑色目標區(qū)域,進而細化指針區(qū)域,消除小范圍的黑色干擾區(qū)域[15]. 本文首先對二值化后的待測圖像進行膨脹處理,消除微小區(qū)域的黑色噪聲區(qū)域,然后使用腐蝕算法對膨脹后的待測圖像進行處理,進一步突出指針區(qū)域,形態(tài)學(xué)算法處理后的結(jié)果如圖7所示:
(a)形態(tài)學(xué)腐蝕后圖像
(b)形態(tài)學(xué)膨脹后圖像
圖7形態(tài)學(xué)圖像
1.4.1 指針方向的確定
儀表指針大都具有一定長度、頂端細、底端粗的特征,并且指針軸心兩端長度不等,當指針和水平方向平行時,指針在水平方向的投影寬度最大;當指針和水平線垂直時,指針在水平方向的投影寬度最??;當指針處于其他位置時,指針在水平方向的投影寬度介于這二者之間,結(jié)合以上特征,本文提出像素投影法來確定指針方向. 像素投影法的流程如下:首先以指針軸心作為坐標原點建立直角坐標系XOY,如圖8所示,則當指針與X軸重合的時候,指針像素在X軸上的投影范圍最寬,而當指針與Y軸重合的時候,指針像素在X軸上的投影范圍最窄,當指針不與X、Y軸重合時,指針像素在X軸上的投影范圍介于最寬和最窄之間,同時指針零灰度值像素在X軸方向上的投影規(guī)律為:指針頂端部分灰度值為零的像素個數(shù)較少,而指針末端部分灰度值為零的個數(shù)較多,因此根據(jù)以上特征可確定指針的方向.
如果沿著X軸負方向到正方向灰度值為零的像素個數(shù)有逐漸減少的趨勢,如圖8(a)所示,那么此時指針頂端位于Y軸的右側(cè);如果沿著X軸負方向到正方向灰度值為零的個數(shù)有逐漸增加的趨勢,如圖8(b)所示,那么此時指針頂端位于Y軸的左側(cè).
(a)頂端在Y軸右側(cè)
(b)頂端在Y軸左側(cè)
圖8指針方向的識別
1.4.2 指針角度的確定
Hough變換是利用圖像空間和參數(shù)空間之間的關(guān)系,在二值圖像中尋找直線的一種相對快速算法,它將歐式空間中的直角坐標變換為極坐標空間的坐標. 如果將圖像空間看作是歐式空間,則圖像空間中處于同一條直線上的像素點越多,那么在極坐標空間中這些點所對應(yīng)的曲線相交于一點的數(shù)量越多,據(jù)此可以根據(jù)曲線相交于一點的累計量判斷圖像空間中的某些像素是否在同一條直線上[16].
本文采用基于Hough變換的旋轉(zhuǎn)投影法檢測指針角度,處理流程如下:儀表指針的兩個邊緣分別是兩條最長的直線,這兩條直線的傾斜角度分別對應(yīng)待測二值圖像中直線的最大角度和最小角度,首先用Hough直線變換檢測待測圖像中的所有直線,得到所有直線的角度,然后取最大角度和最小角度,記最大角度為:θmax,最小角度為:θmin,令:
θ=(θmin+θmax)/2
(9)
其中:θ為待測圖像指針的預(yù)估角度.
記待測圖像指針的實際角度為:θε,指針從初始位置順時針或者逆時針旋轉(zhuǎn)到Y(jié)軸正方向時所經(jīng)過的角度為:θδ,則有:
a)θ>0°
①如果由像素投影法確定指針頂端位于Y軸的右側(cè)
以一個固定角度逆時針旋轉(zhuǎn)該指針,直至到達Y軸正方向,即此時指針在X軸投影寬度最小,可得:
θε=θδ+90°
(10)
②如果由像素投影法確定指針頂端位于Y軸的左側(cè)
以一個固定角度順時針旋轉(zhuǎn)該指針,直至到達Y軸負方向,即此時指針在X軸投影寬度最小,可得:
θε=θδ+270°
(11)
b)θ<0°
①如果由像素投影法確定指針頂端位于Y軸的右側(cè)
以一個固定角度順時針旋轉(zhuǎn)該指針,直至到達Y軸負方向,即此時指針在X軸投影寬度最小,可得:
θε=θδ+180°
(12)
②如果由像素投影法確定指針頂端位于Y軸的左側(cè)
以一個固定角度順時針旋轉(zhuǎn)該指針,直至到達Y軸正方向,即此時指針在X軸投影寬度最小,可得:
θε=90°-θδ
(13)
c)θ=0°
指針角度θε為:θ.
其中:為了保證精度,該固定角度可取0.01°;假設(shè)指針沿著水平X軸負方向時的角度為0°.
由圖1中儀表表盤的特征得知,其單位刻度對應(yīng)的角度為9°,單位刻度對應(yīng)的數(shù)值為0.05 Mpa,可得儀表刻度值λ與指針角度θε的函數(shù)關(guān)系為:
(14)
式中:λ的單位為Mpa.
本文采用Visual Studio 2013、Opencv 2.4.9作為軟件開發(fā)平臺,C++作為開發(fā)語言對本文提出的指針式儀表識別方法進行驗證,以圖1所示的指針壓力表為測試對象,獲取該壓力表的不同數(shù)值圖像,驗證本文算法的可行性.
根據(jù)圖8,由本文提出的像素投影法可得待測圖像指針頂端方向位于Y軸的左側(cè),且θ>0°,然后由1.4.2節(jié)可確定待測圖像指針角度是θδ+270°,通過旋轉(zhuǎn)投影法算法可確定θδ為63.2°,則待測圖像指針的角度是333.2°,最后由式(14)可得該待測圖像的數(shù)值是:0.148 89 Mpa,而通過人工讀數(shù)得到的數(shù)值是0.15 Mpa,兩者較為接近,且本文精度更高,證明本文提出的識別算法具有較高的精度和準確性.
為了進一步檢測算法的適用性和穩(wěn)定性,本文采集了該壓力表5幅不同數(shù)值的圖像樣本,使用本文提出的識別方法對每幅圖像進行100次實驗,總計500次實驗. 表1為最終的測試結(jié)果,從表中可以看到本文提出的識別方法與人工讀數(shù)之間的平均誤差為0.001 3 Mpa,兩者結(jié)果基本接近,說明本文方法具有較好的精度和穩(wěn)定性.
表1 數(shù)值識別結(jié)果
由于儀表多處于復(fù)雜環(huán)境中,表盤表面可能會有污漬,同時表盤上大都印有文字等(如圖1),這些因素都可能會對指針數(shù)值的識別造成影響. 本實驗中所使用的儀表表盤印有生產(chǎn)廠家、儀表型號等文字符號,而由表1的結(jié)果可知,本文算法對文字干擾具有較強的適用性,而污漬的影響可以認為等同于文字的影響,因此本文算法對污漬干擾也同樣具有較強的穩(wěn)定性. 攝像機、儀表在安裝、制造過程中或攝像機拍攝不標準等因素都可能導(dǎo)致待測圖像出現(xiàn)傾斜,本文提出的圖像矯正算法可以對待測圖像進行矯正,得到標準圖像,進而可以消除圖像傾斜帶來的數(shù)值識別誤差問題.
本文提出了一種指針儀表數(shù)值識別方法,可以對復(fù)雜環(huán)境中儀表的數(shù)值進行識別,該方法包括5個步驟:圖像預(yù)處理、圖像矯正、圖像再處理、指針角度及方向檢測、計算儀表數(shù)值,首先通過預(yù)處理算法對待測圖像進行預(yù)處理;提出了圖像矯正算法,可對傾斜圖像進行矯正,便于正確識別指針數(shù)值;然后對待測圖像進行再處理得到指針區(qū)域;接著根據(jù)儀表指針的特征,提出了像素投影法和基于Hough變換的旋轉(zhuǎn)投影法來確定指針方向及角度,接著給出了儀表數(shù)值和指針角度之間的函數(shù)關(guān)系,得到儀表的數(shù)值,最后通過大量實驗驗證表明本文方法與人工讀數(shù)之間誤差較小,并對外界復(fù)雜因素的干擾具有較好的穩(wěn)定性,同時解決了圖像傾斜導(dǎo)致的數(shù)值識別誤差問題,因此本文的儀表指針數(shù)值精度和準確度具有較高的優(yōu)勢.