姚河花,田 玉,才旦多杰,祝小蘭
(青海大學(xué)計算機技術(shù)與應(yīng)用系,青海 西寧 810016)
直線檢測是圖像處理的一個關(guān)鍵步驟,被廣泛應(yīng)用于車道檢查、工業(yè)儀表識別、工業(yè)生產(chǎn)等領(lǐng)域[1-4]。隨著計算機技術(shù)的發(fā)展,利用計算機代替人工完成指針式儀表的讀數(shù)越來越重要。鐘表是計時裝置,同時也是測量和指示時間的精細儀器,在某些生產(chǎn)生活背景下,需要對指針式鐘表進行讀數(shù)。指針式儀表自動讀數(shù)識別常用的算法有差影法[5]、基于區(qū)域生長的方法[6]及基于Hough變換的算法等[7-11]。吳東潞等[7]利用Hough變換的原理提取出表盤上的圓弧特征,李娜等[8]對提取的像素點進行雙閾值Hough變換直線檢測。Hough變換的檢測方法被廣泛應(yīng)用于直線及圓的檢測,該算法具有抗噪聲干擾及對曲線間斷不敏感的特性。本文結(jié)合Hough變換的原理提出一種基于Hough變換的指針式鐘表示數(shù)自動識別方法,通過Hough變換確定表盤位置,繼而完成表盤圖像的切割,利用Hough變換檢測表盤中的直線,從而確定指針的位置,最后根據(jù)指針的傾斜角與圖像空間坐標(biāo)的關(guān)系,進一步確定鐘表的讀數(shù)。
Hough既可以用來檢測圓,也可以檢測直線。Hough變換的基本原理是將空間坐標(biāo)系上的點投影到參數(shù)空間中,通過觀察參數(shù)空間里曲線交點的情況來判斷要提取特征的方程。
在極坐標(biāo)系ρ-θ中,對于平面上的一個點(x,y)來說,通過該點的直線集可表示為ρ=xcosθ+ysinθ,所有(r,θ)連在一起可連成一條正弦曲線。過不同點的正弦曲線若有交點,那么這些點就可連成一條直線。計算過每一個交點的直線數(shù),設(shè)置一個峰值,只要大于該峰值即可判斷這些點構(gòu)成了一條線段,從而得出線段方程(圖1)。
圖1 直角坐標(biāo)到極坐標(biāo)的轉(zhuǎn)換Fig.1 Conversion from rectangular coordinates to polar coordinates
Hough變換檢測圓的基本原理是將圖像空間轉(zhuǎn)換到參數(shù)空間。在圖像空間中,假設(shè)圓心坐標(biāo)為(a,b),半徑為r,則圓的一般方程為:
(x-a)2+(y-b)2=r2
(1)
參數(shù)空間中圓心為(x,y),半徑為r的圓的方程為:
(a-x)2+(b-y)2=r2
(2)
公式(2)將圖像空間的圓轉(zhuǎn)換為參數(shù)空間中的一個圓錐面,即圖像空間中確定的半徑為r的圓,圓周上的所有像素點在參數(shù)空間中對應(yīng)為r相同,a、b不同的一系列圓錐的集合(圖2),則同一圓周上的像素點對應(yīng)于參數(shù)空間中的圓錐面必相交于一點[12]。
圖2 原圖像空間與Hough變換參數(shù)空間對應(yīng)圖Fig.2 Corresponding diagram between the original image space and Hough space
指針式鐘表基于Hough變換的指針式鐘表示數(shù)自動識別算法流程見圖3。
圖3 指針式鐘表示數(shù)自動讀取流程Fig.3 Automatic pointer clock reading process
一般情況下,通過攝像機等采集到的圖像多為彩色圖像,將彩色圖像轉(zhuǎn)換為灰度圖像,可以加快圖像的計算速度,減少計算量。本文采用加權(quán)灰度平均化進行灰度轉(zhuǎn)換[13],計算方法如公式(3):
f(i,j)=0.299*R(i,j)+0.587*G(i,j)+0.114*B(i,j)
(3)
式中:R(i,j)、G(i,j)和B(i,j)分別表示圖像(i,j)處R(紅)、G(綠)和B(藍)3個通道顏色分量對應(yīng)的值。
對灰度化后的圖像進行二值化,二值化的閾值通過最大類間方差(也稱為Otsu法或大律法)算法[14]計算得到,該算法是利用圖像的像素灰度分布直方圖,并在最小二乘法的理論基礎(chǔ)上推導(dǎo)出來的一種自適應(yīng)的閾值,處理效果見圖4。
圖4 原圖與處理圖對比Fig.4 Comparison of original and processing images
邊緣是圖像局部亮度變化最明顯的部分,是圖像分割、特征提取、目標(biāo)識別等領(lǐng)域的重要依據(jù),常用的邊緣檢測算子為Roberts算子、Prewitt算子、Sobel算子和Canny算子等。為了比較上述4種算子的邊緣檢測效果,利用MATLAB工具箱對其進行仿真,仿真實驗結(jié)果見圖5。
圖5 各類表盤邊緣檢測效果對比圖Fig.5 Comparison of edge detection effects of various dials
從仿真結(jié)果可以看出,Canny算子能夠檢測到更多的邊緣信息,對細節(jié)信息保留得更好,但存在較多的冗余邊緣信息。而Prewitt算子和Roberts算子、Sobel算子相比較Roberts算子能夠?qū)υ肼暺鸬狡交饔?,因Sobel算子存在權(quán)重,所以比Prewitt算子的定位精度更高[13]。因此,本文選用Sobel算子進行邊緣檢測。
對使用Sobel算子邊緣檢測后獲得的圖像應(yīng)用Hough變換進行表盤特征提取。用Hough變換檢測出圓的圓心,圓心坐標(biāo)為(c1,c2),半徑為r,I(i,j)為圖像中像素點的灰度值。根據(jù)公式(4)將圖像中大于半徑的部分設(shè)置為白色,只保留Hough變換檢測的圓以內(nèi)的部分,結(jié)果見圖6。
圖6 Hough變換濾除圓盤外效果圖Fig.6 Effects of Hough transform after removing the disc
(4)
提取指針特征是鐘表時刻識別最關(guān)鍵的一步。對于鐘表圖片而言,秒針最長,分針次之,時針最短。利用Hough變換檢測直線的原理,檢測圖片中的直線,檢測到線的同時得到線段的兩個端點,通過端點坐標(biāo)值計算線段的長度,對線段按長度進行排序,最長的直線對應(yīng)秒針,次長的直線為分針,分別計算圓心到第3長、第4長兩條直線的距離(檢測到的直線端點不一定落在圓心處),距離較短的直線對應(yīng)時針,圖7為通過Hough變換檢測指針示意圖。
圖7 指針位置定位圖Fig.7 Pointer position
指針式鐘表讀數(shù)自動識別的核心是確定一個精確度較高且適用性較強的儀表讀數(shù)自動識別的計算方法,本文采用角度法[11-12]實現(xiàn)示數(shù)的自動計算。以Hough變換檢測出的圓心O作為直角坐標(biāo)系的原點建立直角坐標(biāo)系和圖像的空間坐標(biāo)系。MATLAB中默認的圖像空間坐標(biāo)系原點在左上角,x軸水平向下為正方向,y軸水平向右為正方向。在傳統(tǒng)坐標(biāo)系中,x軸水平向右為正方向,y軸水平向上為正方向。而在鐘表圖片中,通常以指針與12點刻度線的夾角作為讀數(shù)依據(jù),為了方便計算,本文以3點方向作為讀數(shù)的基準(zhǔn)方向,所建坐標(biāo)系如圖8所示。
圖8 鐘表指針坐標(biāo)系Fig.8 Coordinate system of clock pointer
從圖8可以看出,坐標(biāo)系將整個表盤分成4個象限。根據(jù)Hough變換檢測直線時得到的端點坐標(biāo)可以計算直線的斜率及傾斜角,假設(shè)直線的端點坐標(biāo)為A(p1x,p1y)、B(p2x,p2y),其中B(p2x,p2y)為兩端點中距離圓心較遠的點,直線斜率及傾斜角的計算公式如下:
(5)
α=arctan (k)
(6)
式中:k為直線在x-y直角坐標(biāo)系的斜率,α為直線與x軸正方向的夾角(α∈[-90°,90°]),則指針與3點刻度線的夾角θ(θ∈[0°,180°])可由公式(7)計算得出。
(7)
當(dāng)B(p2x,p2y)落在X-Y坐標(biāo)系的坐標(biāo)軸上時,θ的取值如公式(8)所示:
(8)
根據(jù)公式(7)得到指針與3點刻度線的夾角θ后,進行讀數(shù)。時針每30°為一個區(qū)間范圍,分針和秒針每6°為一個區(qū)間范圍,讀數(shù)公式如下:
(9)
(10)
(11)
式中:T1、T2、T3分別為秒針、分針、時針的讀數(shù)。
由于標(biāo)準(zhǔn)時間的格式為XX:XX:XX,當(dāng)計算得到T1、T2中的某個值為個位數(shù)時,在前面空位補0。
常見的鐘表主要包括羅馬數(shù)字刻度鐘表、阿拉伯?dāng)?shù)字刻度鐘表及無數(shù)字刻度鐘表。為了驗證各類鐘表的識別準(zhǔn)確性,分別采集以上3類鐘表的圖片構(gòu)成樣本數(shù)據(jù)集。樣本數(shù)據(jù)集共包括3類鐘表圖片200張,其中羅馬數(shù)字刻度鐘表和阿拉伯?dāng)?shù)字刻度鐘表圖片各70張,無數(shù)字刻度鐘表圖片60張。為了方便處理,將采集到的圖片統(tǒng)一歸一化為230×230,選取的鐘表圖片無傾斜、不均勻縮放等情況。
圖9 樣本數(shù)據(jù)集圖片F(xiàn)ig.9 Images of samples
在Window 10[處理器為Intel(R)]Core(TM)i7-8586U CPU 1.8 GHZ,內(nèi)存8 GB系統(tǒng)下使用MATLAB 2016 a對鐘表圖像進行處理。實驗證明,通過Hough變換能夠進行簡單鐘表圖片的基本讀數(shù),選取其中10張圖片進行測試,測試結(jié)果見表1。
表1 指針示數(shù)識別結(jié)果分析Tab.1 Analysis of recognition results of pointer indication
從表1可以看出,指針示數(shù)對阿拉伯?dāng)?shù)字刻度鐘表和無數(shù)字刻度鐘表均能夠較正確地識別,由于只考慮了指針的長度特征,導(dǎo)致部分圖片的秒針和分針容易混淆;羅馬數(shù)字刻度鐘表由于受羅馬數(shù)字刻度的影響,識別率較低。
Hough變換多用于指針式儀表的自動識別[2,7-11],許麗等[15]經(jīng)過分析指針轉(zhuǎn)動和圖像特性,提出了基于Hough變換的指針角度識別;姚洋等[16]對Canny檢測算子進行改進,結(jié)合Hough變換進行儀表圖像的識別。本文首次提出基于Hough變換的指針式鐘表示數(shù)的自動識別算法,借助二值化、邊緣檢測等數(shù)字圖像處理的知識完成指針式鐘表的預(yù)處理,之后應(yīng)用Hough變換檢測圓和直線的原理提取表盤特征和指針,根據(jù)指針的長度和斜率確定指針?biāo)诘奈恢煤拖笙蓿?點方向為基準(zhǔn),確定指針的示數(shù)。實驗證明本文的算法能較準(zhǔn)確地識別鐘表圖片示數(shù),但對于羅馬數(shù)字刻度鐘表、二值針鐘表、表盤光照不均勻及表盤傾斜等情況下的識別效果有待進一步研究。