藺玉珂,楊敏,賀中屏,曹華,王家麒
(重慶電子工程職業(yè)學院,重慶 401331)
圖像識別是計算機對圖像進行處理、分析和提取信息,并識別到不同模式不同目標或物體的技術(shù),對質(zhì)量較差的圖像也可以進行一系列增強和重建,能夠有效提高圖像質(zhì)量。圖像識別的第一步往往是邊緣識別,即一個區(qū)域的結(jié)束和另一個新區(qū)域的開始,反映圖像特征的不連續(xù)性。
19世紀60年代初至80年代末,圖像邊緣識別理論正處于發(fā)展的黃金時期。20世紀70年代初,Prewitt 和Kirsch開始研究定向邊緣識別技術(shù)。1977年Robinson 還對 Prewitt和 Kirsch 的相關(guān)研究成果進行了總結(jié)和概括。在1980年,Marr 提出了LoG 算法,可以通過引入高斯濾波器來降低對噪聲的影響。1986年,偉大的美國算法物理學家John Canny,提出了后來被稱為Canny 原則的邊緣識別三原則。
呂哲提出了一個經(jīng)過改進的Canny 算法,主要改變了梯度方向檢測方式和連通性。對于高環(huán)境光和低強度邊緣的定向測量,能夠有效地抑制在高環(huán)境光影響下的峰值信噪比,同時邊緣細節(jié)也被保持,但高自動調(diào)節(jié)的閾值會對邊緣細節(jié)測量結(jié)果產(chǎn)生一定的負面影響。因此,羅濤通過對高、低閾值的選取,并提供了一個更完善的高自適應(yīng)閾值Canny測量算法,克服了人為因素引起的測量邊緣損壞和邊緣誤差的問題,但在彩色畫面檢測和試驗的過程中,仍有部分受損的邊緣存在。Deng對傳統(tǒng)的Sobel 算子進行了改進,為圖像的開閉運算引入Sobel 算法,然后分別使用改進的小波變換算法、Sobel 算法、Canny 算法和Prewitt 算法對圖像邊緣進行識別。最后,根據(jù)定義的圖像融合算法,對各種方法得到的圖像邊緣進行融合,得到最終的識別結(jié)果,使得邊緣提取結(jié)果完整,定位精度高。
圖像邊緣是圖像最基本也是最重要的特征,提高圖像識別率主要有兩種方式:一是提高硬件的識別率,二是提高軟件的識別率。目前提高硬件識別率存在許多困難,而后者利用現(xiàn)有技術(shù)可以解決,所以從軟件上來提高識別率的意義較大。
目前,實現(xiàn)圖像邊緣識別的軟件和算法有很多,但學者們?nèi)栽趯ふ腋ㄓ?、更高效的邊緣識別算法。其中最具代表性的四種檢測算法分別是基于形態(tài)學的、基于小波變換和小波包的、基于模糊理論的,以及基于分形幾何的邊緣識別算法。
除上述算法外,還有一些邊緣識別算子的經(jīng)典方法,如Roberts 算子和Sobel 算子、Canny 算子等。Canny 算子利用尋找(,)上的梯度的局部最大值來找到強邊緣,梯度強度也可以由高斯濾波器的微分來估計,使用兩個閾值識別到強邊緣和弱邊緣,并且假設(shè)它們都被連接到強邊緣,這樣就在輸出中只包括弱邊緣。
在獲取原始圖像的數(shù)據(jù)區(qū)域指針后,需要經(jīng)過灰度化、高斯濾波、像素梯度計算等一系列操作之后,最終得到邊緣識別效果圖。
Canny 算法通常處理的圖像往往都是灰度圖像,而在實際應(yīng)用中通常使用彩色畫面,所以一般先進行灰度化,將彩色畫面變成灰度圖像。以RGB 格式的彩圖為例,通常灰度化使用的公式是:
注意,在程序設(shè)計時一般按照圖像格式中RGB的順序,一般是BGR,但MATLAB 等軟件支持把輸入的彩色圖像直接轉(zhuǎn)換為灰度圖像,因而可跳過這個操作。
任何邊緣識別算法在未經(jīng)處理的原始圖片信號上都不能得到很好地處理效果,所以首先是對原始圖片信息與高斯mask 做卷積,得到新的圖像信息與原始圖像形一樣有很細微的模糊度(blurred)。這樣一來,圖像噪聲在經(jīng)過高斯平滑的圖像上就基本沒有影響。
對圖像高斯濾波可以進行去噪,對圖像高斯濾波的實現(xiàn)也可以用一維高斯核分別進行二次加權(quán)的運算實現(xiàn),也就是先一維X向卷積運算,所得的結(jié)果再一維Y向卷積高斯濾波,使用的高斯核可以是有X 和Y 兩維的高斯函數(shù),且兩個維度上標準差一般取相同,形式為:
一維高斯函數(shù):
高斯濾波法,即是即通過在某一尺度上的二維高斯核,與像素進行卷積。因為數(shù)位影像的基本數(shù)據(jù)形式為離散矩陣,所以高斯核就是對連續(xù)高斯函數(shù)的離散化處理,可通過對高斯面體進行離散采樣后的歸一化而得出。所以,邊長為3×3,其標準差為一的高斯核為:
在確定高斯核后,將其與圖像進行離散卷積即可。利用高斯濾波器與圖像進行卷積,以平滑圖像,并消除噪音影響。高斯濾波器的核心位置為×(為奇數(shù))。濾波器核心位為,高斯濾波器核的產(chǎn)生方式為:
經(jīng)過高斯去噪處理過的lena 圖與原圖對比,如圖1所示。
圖1 高斯去噪效果圖
利用Sobel 算子的像素梯度,Sobel 算子中有兩個3×3的矩陣,分別是S和S。前者用于計算圖像方向像素梯度矩陣G,而后者則用于計算圖像方向像素梯度矩陣的G。
其中,為灰度圖像矩陣,且此處的*表示互相關(guān)運算(卷積運算可視為將卷積核旋轉(zhuǎn)180°后的互相關(guān)運算)。需要說明的是,圖像矩陣坐標系原點在左上方,且正方向為從左往右,正方向為下往上。則由以下公式可計算得到梯度強度矩陣G(,)。
使用Sobel 算子的梯度處理lena 圖,沒有加閾值,效果如圖2所示。
圖2 Sobel 算子的梯度處理lena 圖
非極大值抑制是一個邊緣的細化方法,通??煽醋鞑恢挥幸粋€像素寬度,而是多個像素長度的漸變邊緣。正如我們所說,Sobel 算子的邊緣通常既粗又亮,從圖2中的Sobel 結(jié)果就可以知道。但是,梯度彌散圖也是“模糊”的,所以在實際具體操作中,邊緣通常只有一個很精確的節(jié)點之寬,而非極大值抑制可以保持局部的最大梯度值變化并抑制所有其他局部梯度值變化,這也就意味著只保護梯度變化中最尖端的地方。
若在當前點的梯度強度與相同方向上其他點的梯度強度相比最大,則保持在該值。否則,設(shè)置為零。如與當前點垂直上升約九十度,則必須在垂直方向上與其正上方和正下方的圖像進行對比。
非最大像素梯度抑制的目的是消除邊緣識別引起的雜散響應(yīng),即邊緣被“細化”。基本辦法是把當前像素點的梯度強度,和鄰近像素點沿正梯度方向的梯度強度加以對比。如果是最大值(即極值),則保留在該像素的邊緣位置;如果沒有最大值,則會被抑制,不被視為邊緣點。為了更精確的計算,通常在梯度方向上的兩個相鄰像素之間使用線性插值來獲得待比較像素的梯度。
圖3 像素梯度方向線性插值示意圖
像素的鄰接可分成四大區(qū)域,而每個區(qū)域都有左右兩個部分。假設(shè)中心像素在向的梯度強度為(,),方向梯度強度為(,),梯度強度為G(,),則梯度方向所屬的區(qū)域可以根據(jù)(,)或者(,)的正負和來確定。然后,根據(jù)其像素和其像素梯度方向與相鄰點的像素梯度彌散值進行線性插值得出正負梯度方向的兩個梯度強度(,)和(,)。
另外三個區(qū)域的計算方法相同,若G(,)=G(,)=0,說明像素點無像素梯度,則為非邊緣。將梯度角離散化為圓的四個扇區(qū)之一,再使用3×3 窗口進行抑制操作,這些扇區(qū)標記為0 到3,對應(yīng)于3×3 鄰域有著四種可能組合。在每一點,將鄰域的中心像素與沿梯度線的兩個像素進行比較,如果的梯度不大于沿梯度線的兩個相鄰像素的梯度,則令(,)=0。非極大值處理結(jié)果如圖4所示。
圖4 非極大值抑制結(jié)果圖
定義梯度強度的最高閾值與最低閾值,在梯度強度的最低閾值的像素點被抑制,因此也可以看成為邊緣點,在最高閾值之下的每個像素點將被分類為強邊緣,并保持為邊緣點狀態(tài)。而那些介于高閾值與低閾值之間的像素點則被認定為弱邊緣,仍有待進一步處理。通過檢測弱邊緣圖像及其8 個鄰近圖像,能夠通過它和強邊緣的聯(lián)系來確定是否為真實邊緣。一般可以定義,只要鄰域圖像之一為強邊緣圖像,就能夠把弱邊緣保留到強邊緣點,即真實邊緣點。
目前減少“假邊緣”數(shù)量最常用的方法是雙閾值算法,對[,]使用一個閾值,為低于閾值的點分配為零,解決方法就是采用雙閾值算法。雙閾值算法對非最大值的抑制圖像使用高低閾值MinVal 和MaxVal,若2 倍的MinVal 大約等于MaxVal,則即可獲得兩個閾值的邊緣像素MaxVal[,]和MaxVal[,]。因為圖像MaxVal[,]是利用較高的閾值而獲得的,故包含的“假邊緣”相對較小,但存在著不連續(xù)點(非封閉邊緣)。雙閾值方法將邊緣和像素之間從MaxVal[,]中的輪廓連接起來,到達輪廓端點后,雙閾值算法將MaxVal[,]的8 個相鄰點與邊緣輪廓連接起來,得到新邊緣,在MinVal[,]內(nèi)繼續(xù)收集邊緣,直到MaxVal[,]被完整連接。
在MATLAB 環(huán)境下對實現(xiàn)了基于Canny 算子的邊緣檢測,并與MATLAB 內(nèi)置的Canny 邊緣檢測API 進行了對比實驗,如圖5所示,其中“Lena”為計算機視覺領(lǐng)域的常用測試圖片。
圖5 Canny 算子邊緣識別處理Lena 圖
為了達到更好的識別效果,在邊緣識別程序中調(diào)整濾波器參數(shù),在滯后閾值處理中調(diào)整高低閾值。MATLAB 的Canny 邊緣識別API 使用其默認參數(shù),推測的高低閾值可以通過自適應(yīng)算法本身進行計算。從圖5的識別效果可以看出,與API 相比,自己設(shè)計的Canny 識別程序提取了更多的詳細信息,同時也保留了更多的局部噪聲,API 提取的輪廓特征清晰,但局部失真嚴重。將默認的高斯半徑修改為2,閾值保持不變,與原始圖像對比如圖6所示。從實驗過程中可以看出,Canny 算子對濾波參數(shù)的選擇和高低閾值的取值范圍還是比較很敏感,在實際應(yīng)用過程中需要反復(fù)調(diào)試。
圖6 Canny 高斯半徑為2
傳統(tǒng)的Canny 算法在邊緣提取和邊緣增強識別中存在優(yōu)勢,對細小的邊緣識別更清晰。通過優(yōu)化邊緣識別程序中濾波器參數(shù)和滯后閾值處理中的高低閾值參數(shù),對不同強度、不同類型噪聲的圖像進行去噪實驗,通過實驗結(jié)果發(fā)現(xiàn),Canny 算子對參數(shù)取值范圍敏感,可以通過優(yōu)化參數(shù)得到更佳的圖片識別效果。