謝 偉,姜明明,張 剛,韓苗苗,玄 冉
(山東農(nóng)業(yè)工程學(xué)院機械電子工程學(xué)院,山東 淄博 255000)
指針式儀表存在于生活的各個方面中,儀表的使用壽命是需要關(guān)注的問題。儀表每年都需要檢修,檢修步驟非常煩瑣枯燥,檢修工作量也非常大,而且對精度要求非常高,這無疑增加了工作難度。針對這一現(xiàn)象,筆者設(shè)計出一種基于MATLAB的指針式儀表示數(shù)識別系統(tǒng),它可以高效、準(zhǔn)確地識別儀表的數(shù)值,大大節(jié)省了人力,提高識別的準(zhǔn)確性。
對于表盤定位來說,可以通過顏色來識別表盤,攝像頭采集來的圖片是RGB圖像,RGB圖像是由紅(R)、綠(G)、藍(lán)(B)三個分量組成。指針式儀表表盤背景為白色,儀表外殼為黑色,利用顏色分明這一特點來實現(xiàn)對儀表表盤的定位。對于彩色圖像來說,在R、G、B三分量中,白色(R=G=B=255)對應(yīng)的值都很大,通過設(shè)置閾值來判斷白色區(qū)域。
圖像預(yù)處理可以有效地突出表盤圖像的有用信息,減少無用信息[1],提高對表盤信息提取的準(zhǔn)確性和識別率。又因為表盤簡單,不需要太多的前期操作就能有效地識別出指針。所以只要進(jìn)行圖像灰度化、圖像去噪等操作,就能優(yōu)化對表盤指針的識別。
1.2.1 圖像灰度化
圖像灰度化目的是使計算機更好地識別圖像,去除無用的顏色信息,保留線條和輪廓等有用信息,在RGB格式的圖像中,利用公式:
由于R、G、B三個分量的取值范圍是0~255,所以得出的灰度等級有256級,即能表現(xiàn)出256種灰度顏色[2]。
1.2.2 圖像二值化
灰度化的圖像經(jīng)過處理后變成只有兩個灰度級的圖片,使后面的操作更加方便。但在實際操作過程中,會存在許多雜質(zhì),所以閾值的選擇十分關(guān)鍵。在指針式儀表表盤上,黑白色彩明顯,在選擇閾值時,可以采用平均灰度值法,這種方法在對比度強的圖片中十分有效,比較適合指針式儀表的二值化。二值化后的圖像如圖1所示。
圖1 圖像二值化
1.2.3圖像細(xì)化
由于大多數(shù)指針式儀表的指針都很粗,在進(jìn)行邊緣檢測和Hough變換時指針上會檢測到兩條直線,這樣會使計算不精確,為了更好地進(jìn)行指針識別,通常對圖像進(jìn)行細(xì)化。將圖像的所有對象簡化為線條而不改變圖像本質(zhì)結(jié)構(gòu)的圖像處理過程稱為骨架化,對圖像進(jìn)行細(xì)化有助于突出形狀特點以及減少冗余的信息量[3]。細(xì)化后的圖像如圖2所示。
圖2 細(xì)化后圖像
1.2.4 圖像去噪
圖像去噪能夠減少圖像中的噪聲,可以采用以下兩種方法。
第一種是采用中值濾波的方法。中值濾波是在該像素點本身以及周圍像素點排列后,取它們的中值作為該點的灰度值,這種做法不僅方法簡單,而且在消除圖像噪聲上效果比較顯著。
第二種是采用局部均值濾波的方法。首先,找出圖像數(shù)據(jù)中目標(biāo)像素點以及周圍八個像素點,然后對這九個像素點相加取平均值。得到的值就是計算后該目標(biāo)像素點的灰度值。如果利用這種算法會使邊界變得模糊,針對這一現(xiàn)象,可以選擇對局部進(jìn)行處理,如果目標(biāo)對象局部存在邊界,則不對其進(jìn)行計算。
對圖像進(jìn)行上述處理后,發(fā)現(xiàn)局部均值濾波消除噪聲的能力相對較弱,而中值濾波得到的圖像清晰度高、細(xì)節(jié)處理好。所以本文采用中值濾波的方法進(jìn)行去噪。
眾所周知,對圖像進(jìn)行處理的目的有兩個,第一個是使圖像更能被人眼識別,第二個是使圖像更能被計算機識別。而邊緣檢測就是為了使計算機能更好地識別圖像。邊緣檢測是利用邊緣檢測算子獲取圖像中有用的信息,去除圖像中的無用信息,以極少部分的有用信息,獲取到更細(xì)節(jié)的部分,提高計算機分析圖片的速度。常見的算子有Roberts算子、Sobel算子、Prewitt算子、Laplace算子和Canny算子[4]。這里以MATLAB為媒介,對各算子進(jìn)行儀表表盤的仿真,以確定本研究采用的算子類型。對灰度化和去噪處理后的圖像進(jìn)行邊緣檢測后的結(jié)果,如圖3所示。
圖3 邊緣檢測算子的MATLAB仿真比較
Roberts算子。Roberts算子的算法簡單,運行速度快,對邊緣定位的準(zhǔn)確率較高。雖然Roberts算子對噪聲影響明顯,但前期的去噪處理,已經(jīng)大大降低了噪聲的影響。
Sobel算子。Sobel算子是常用的一階微分算子,它是根據(jù)絕對值來取值的,這種方法對水平方向影響較大,不易確定邊緣像素。但Sobel算子因其耗時短、具有一定的抗噪性、邊緣檢測效果較好而得到廣泛應(yīng)用[5]。
Prewitt算子。Prewitt算子也是一階微分算子,它是加權(quán)平均算子,對圖像處理有一定的限制,會破壞圖像中的有用信息。而且利用此方法提取的圖像不能連續(xù)表達(dá),不利于指針的完整提取。
Laplace算子。Laplace算子是一個二階算子,它對噪聲的敏感性很高,對表盤提取的數(shù)據(jù)完整性高,而且基本無斷點,但由于原始的Laplace算子在邊緣檢測方面還有諸多不足,一般不常用作邊緣檢測。
Canny算子。Canny算子具有較好的邊緣檢測能力,在圖像處理方面運用十分廣泛,而且邊緣檢測的結(jié)果更為細(xì)致,但會使儀表表盤中不重要的因素放大,而且方法復(fù)雜。
綜合比較以上算法,由于采集來的儀表圖片比較簡潔,不需要用太過復(fù)雜的方法,綜合各方面原因,采用Sobel算子進(jìn)行邊緣檢測。
在二維空間中,通常用y=ax+b的形式表示直線,a表示斜率,b表示截距。在MATLAB中,可以引用ρ、θ這兩個參數(shù)來表示直線。
相應(yīng)的直線方程如下:
ρ代表原點到該直線的距離,θ代表直線垂線與x軸夾角。
每一個直線方程對應(yīng)一組(ρ,θ),直線上的每一點,都對應(yīng)著ρ-θ坐標(biāo)系中的一條曲線,取該條直線任意幾點,這條直線所形成的所有曲線都會交于一點,這一點便是這條直線的(ρ,θ)值。如圖4所示。
圖4 共線坐標(biāo)交于一點
把ρ-θ坐標(biāo)進(jìn)行網(wǎng)格化處理,在ρ、θ極值范圍內(nèi),對其進(jìn)行等分,以像素點為網(wǎng)格,利用交點累加器,每一條曲線上的點交于網(wǎng)格記為1,找出相交次數(shù)最多參數(shù)的點,就能找到對應(yīng)x、y平面的直線線段,該線段就是儀表對應(yīng)指針的位置。
Hough變換檢測直線,如果不做處理,所檢測的角度范圍是0°~180°,為了保證指針測量的精度,本文把ρ和θ的精度取為0.5。指針讀數(shù)的關(guān)鍵在于指針與所建坐標(biāo)x正半軸的角度,這個角度在Hough變換中是已知的,所以利用簡單計算得到指針與右水平方向的夾角α,即如圖5所示的角度。
圖5 指針角度圖
然后可以自行設(shè)置量程與指針式儀表的最大角度范圍,根據(jù)量程和角度的換算關(guān)系,算出所得儀表的值。由于不同儀表所對應(yīng)的量程和指針最大偏轉(zhuǎn)角度是不同的,此設(shè)計主要適用于起始指針?biāo)降膬x表,如電流表、電壓表、COSφ表等。使用時根據(jù)儀表種類只需更改界面中的儀表類型,系統(tǒng)就會自動跳轉(zhuǎn)到對應(yīng)的程序,最終計算出指針對應(yīng)的數(shù)值。
利用GUI界面可以直觀地得出計算結(jié)果,使得操作過程清晰易懂。通過此界面可以更方便地處理圖像。按步驟依次操作,首先進(jìn)行表盤區(qū)域識別,準(zhǔn)確找到表盤區(qū)域,然后進(jìn)行區(qū)域二值化、去除噪聲、圖像細(xì)化等操作,找到對應(yīng)的儀表類型,最后利用指針與角度關(guān)系得出相應(yīng)的數(shù)值。設(shè)置的GUI界面,如圖6所示。
圖6 GUI界面窗口
筆者主要圍繞指針式儀表的讀數(shù)進(jìn)行分析計算,通過MATLAB進(jìn)行仿真,對大多數(shù)指針式儀表都適用,極大地提高了檢修效率,降低了檢修的工作量。
由于本設(shè)計是通過分析攝像頭采集來的圖片信息對圖像進(jìn)行處理,圖像分析時對顏色有要求,所以采集圖片時盡量在光照充足的地方進(jìn)行。由于該設(shè)計是利用Hough變換進(jìn)行的,所以傾斜角度不能過大,否則會對后續(xù)讀數(shù)結(jié)果產(chǎn)生影響。