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