四川大學(xué)電子信息學(xué)院 代臨風(fēng) 鄧洪敏
提出了一種改進(jìn)的Sobel算子:在傳統(tǒng)Sobel算子的基礎(chǔ)上,使用快速中值濾波濾除系統(tǒng)雜波、加入旋轉(zhuǎn)模式下的CORDIC(Coordinate Rotation Digital Computer)算法,增加了Sobel算子的模板數(shù),使系統(tǒng)的檢測(cè)精度提高、并利用雙濾波器求出局部圖像像素點(diǎn)的均值作為自適應(yīng)閾值,提高了檢測(cè)算法在局部圖像特性上的適應(yīng)性。最后,將所提算法運(yùn)用到FPGA處理平臺(tái)上,并進(jìn)行圖像邊緣檢測(cè)的驗(yàn)證。實(shí)驗(yàn)結(jié)果表明,該方法提取得到的邊緣更加精細(xì),局部特性更好,抗噪聲能力更強(qiáng),且由于FPGA的高主頻和并行性,硬件資源的占用率大大降低,系統(tǒng)整體處理時(shí)間大大減少。
引言:隨著電子、計(jì)算機(jī)領(lǐng)域工程技術(shù)的迅猛發(fā)展,圖像邊緣檢測(cè)已經(jīng)成為圖像處理技術(shù)中關(guān)鍵的一項(xiàng)。圖像邊緣是圖像的基本特征([1]陸小鋒,張俊豪,陸曉成,等.基于FPGA的圖像分塊實(shí)時(shí)邊緣檢測(cè)系統(tǒng)[J].電視技術(shù),2012,36(21):51-54),圖像的邊緣區(qū)域集中著大量的圖像信息,具有不確定性,是圖像中屬性變換最為劇烈的一部分。在許多的工程應(yīng)用中我們都會(huì)用到圖像的邊緣處理作為基礎(chǔ)從而進(jìn)行之后的更為高級(jí)的圖像處理,比如:人臉識(shí)別、車牌識(shí)別、手寫體識(shí)別等。
在研究邊緣檢測(cè)算法時(shí),通常采用基于圖像強(qiáng)度的一階或二階導(dǎo)數(shù),根據(jù)其變化規(guī)律和一定的檢測(cè)規(guī)則,判定圖像的邊緣。常見(jiàn)的邊緣檢測(cè)算子有Robert算子,Sobel算子、Prewitt算子、Laplacian算子、LOG算子、Canny算子等([2]米曾真,謝志江,陳濤,等.重軌圖像增強(qiáng)與邊緣提取的關(guān)鍵技術(shù)[J].光學(xué)精密工程,2012,20(7):1645-1652)。但是導(dǎo)數(shù)很容易受到噪聲的影響([5]毛星云,冷雪飛,等.OpenCV3編程入門[M].北京:電子工業(yè)出版社),因此必須在邊緣檢測(cè)算子中加入濾波器用以抑制噪聲。
在實(shí)時(shí)圖像處理中,不能出現(xiàn)延遲,對(duì)處理速度要求極高,如果運(yùn)用軟件的方法,實(shí)時(shí)性往往較差,所以我們利用FPGA主頻高、并行性等特點(diǎn),將其運(yùn)用在實(shí)時(shí)圖像處理的前端處理中,比如:濾波、邊緣提取等。
文獻(xiàn)([3]祁佳,劉紫燕.實(shí)時(shí)圖像雙邊緣檢測(cè)算法及FPGA實(shí)現(xiàn)[J].電視技術(shù),2014,38(03):64-65+85)中通過(guò)Robert算子和Sobel算子進(jìn)行雙邊緣檢測(cè)方法,這篇文章中作者著重考慮了傳統(tǒng)Sobel算子在精度上面的欠缺,通過(guò)兩個(gè)算子模板一起檢測(cè)的方法,加大了檢測(cè)精度。但使用兩種不同的算子模板難免會(huì)損壞一些局部圖像上的邊緣特性,且使用固定閾值和經(jīng)驗(yàn)閾值,對(duì)圖像的邊緣處理不具備普遍適應(yīng)性。文獻(xiàn)([7]寧賽男,朱明,孫宏海,徐芳.一種改進(jìn)的Sobel自適應(yīng)邊緣檢測(cè)的FPGA實(shí)現(xiàn)[J].液晶與顯示,2014,29(03):395-402)采用4個(gè)方向上的梯度模板進(jìn)行Sobel邊緣檢測(cè),并且加入人眼視覺(jué)特性的自適應(yīng)閾值選取方法,使得在低亮度背景下的圖像邊緣能夠被檢測(cè)出來(lái)。但就其實(shí)驗(yàn)結(jié)果,邊緣的精度相比經(jīng)典算法沒(méi)有明顯的改進(jìn),高亮度部分檢測(cè)效果甚至更差。
以上兩種方法在傳統(tǒng)Sobel邊緣檢測(cè)的基礎(chǔ)得到了一定改進(jìn),但都沒(méi)有周全的考慮。而綜合考慮邊緣檢測(cè)中的干擾因素,本文借鑒并改進(jìn)文獻(xiàn)([4]李秩博,李小兵,周嫻.基于FPGA的快速中值濾波器設(shè)計(jì)與實(shí)現(xiàn)[J].液晶與顯示,2010,25(2),292-295)中的快速中值濾波進(jìn)行前端的濾波處理,使用基于旋轉(zhuǎn)模式下的CORDIC算法進(jìn)行梯度計(jì)算,并利用中值濾波后的算子模板進(jìn)行均值計(jì)算,得出局部閾值,最后實(shí)現(xiàn)了高清視頻圖像的實(shí)時(shí)處理輸出,每一幀分辨率可達(dá)1920*1080。該方法精度更高,邊緣更細(xì),并有效的抑制了背景與傳輸噪聲。
中值濾波是一種典型的非線性濾波技術(shù),基本思想是用像素點(diǎn)鄰域灰度值的中值來(lái)代替該像素點(diǎn)的灰度值[5],該方法可以很好地去除圖像傳輸過(guò)程中的椒鹽噪聲,并且同時(shí)能夠不破壞圖像的邊緣細(xì)節(jié)。
傳統(tǒng)的中值濾波將所選3×3的矩陣中9個(gè)值依次進(jìn)行比較,需要大量的硬件資源和處理時(shí)間。由于我們需要提高系統(tǒng)的實(shí)時(shí)性,這里采用一種快速中值濾波算法([6]李國(guó)燕,侯向丹,顧軍華,陸益財(cái),范培培.快速中值濾波算法的改進(jìn)及其FPGA實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2013,39(02):137-140),利用FPGA并行特征,采用流水線設(shè)計(jì),僅需要3個(gè)時(shí)鐘周期就可以得到一個(gè)3×3矩陣的中值。
快速中值濾波的核心思想是利用并行特征,分成三組進(jìn)行比較,通過(guò)理論分析排除一些不可能為中值的點(diǎn),以快速得出3×3矩陣的中值。首先我們通過(guò)如圖1所示的線性緩沖器得到3×3的滑動(dòng)窗口:
圖1 中值濾波矩陣實(shí)現(xiàn)結(jié)構(gòu)圖
如圖1所示,本系統(tǒng)采用Xilinx中的線性緩沖模塊得到3×3的矩陣模塊,其中P11~P33為一個(gè)中值濾波模板中待檢測(cè)的圖像灰度值。利用FPGA的并行性,我們先將3×3矩陣每一行進(jìn)行比較,分別得到三個(gè)最大值(Max),中值(Med),最小值(Min)。根據(jù)理論分析,中值的數(shù)可能為三行Max中的最小值,Med中的中值,或Min中的最大值,再對(duì)這三個(gè)值進(jìn)行比較就可以得到3×3矩陣的中值,整個(gè)過(guò)程僅僅需要3個(gè)時(shí)鐘周期,大大改善了系統(tǒng)在前端濾波時(shí)的效率問(wèn)題。其程序運(yùn)行示意圖如圖2所示:
圖2 快速中值濾波示意圖
Sobel算子常用于邊緣檢測(cè)當(dāng)中,是一個(gè)離散的差分算子,經(jīng)典算法以圖像某點(diǎn)的橫向和縱向與一個(gè)奇數(shù)模板進(jìn)行卷積,橫向與縱向計(jì)算結(jié)果分別為公式(1)和公式(2),其中I為快速中值濾波提取的3×3矩陣。
這里需要利用范數(shù)整合所求的梯度值,利用常用的P-范數(shù)進(jìn)行數(shù)據(jù)整合。若,那么:
求得兩個(gè)方向(X方向、Y方向)上的梯度值,此時(shí)利用P-范數(shù)求出最終的近似梯度值。經(jīng)典Sobel算法采用P=1的情形,即:
計(jì)算出最終近似梯度值G后,將其與某個(gè)固定的閾值T進(jìn)行比較,得出最終的邊緣集合g (x, y):
上述便是經(jīng)典算法中所運(yùn)用到的檢測(cè)方法,可以明顯看出,該方法存在很大的缺陷:
在X和Y方向上進(jìn)行了梯度檢測(cè),對(duì)水平和垂直方向上的邊緣有較好的檢測(cè)效果。但是對(duì)其他方向沒(méi)有作出相應(yīng)處理,導(dǎo)致圖像的一些特定角度上的邊緣容易被忽略。
做差分運(yùn)算,雖然對(duì)噪聲有一定的抑制能力,但是先經(jīng)過(guò)算子模板加權(quán),大大降低了抗噪聲能力,并且會(huì)導(dǎo)致邊緣信息模糊,影響處理效果[7]。
檢測(cè)閾值常常人為設(shè)定,不具備普遍適應(yīng)性,在圖像局部容易造成粗邊緣,在邊緣信息較為密集的區(qū)域容易造成模糊。
我們?cè)谠惴ǖ幕A(chǔ)上,加入CORDIC旋轉(zhuǎn)算法,利用空間矢量的旋轉(zhuǎn)性,得到更多角度的梯度。在FPGA中,我們比較難直接實(shí)現(xiàn)正弦和余弦函數(shù),在此利用一種旋轉(zhuǎn)平移的方法得到任意角度的三角函數(shù)值。
由于FPGA的硬件特性,在實(shí)現(xiàn)三角函數(shù),反三角函數(shù),對(duì)數(shù)函數(shù)等函數(shù)時(shí)存在困難。通常使用的方法是利用查找表,將某個(gè)運(yùn)算的輸入與輸出羅列起來(lái),放到ROM中,根據(jù)輸入查找輸出。該方法可以有效地避免延時(shí)但卻犧牲了大量的硬件資源,是一種用面積換取速度的設(shè)計(jì)方法,在工程應(yīng)用中并不可取。
CORDIC算法的幾何原理圖如圖3所示:
圖3 CORDIC幾何原理圖
由圖3所示我們可以推導(dǎo)出以下兩個(gè)公式:
同樣,在傳統(tǒng)CORDIC算法的基礎(chǔ)上進(jìn)行優(yōu)化。其中θi為第i次的旋轉(zhuǎn)角度,θi符合條件式(,)。所以需要對(duì)幾何原理部分作以下修改。
假設(shè)在直角坐標(biāo)系中有一個(gè)點(diǎn)P0(x0, y0),將P0經(jīng)零點(diǎn)旋轉(zhuǎn),旋轉(zhuǎn)角度為θ,旋轉(zhuǎn)后所得點(diǎn)Pn(xn, yn),我們由公式(6)、(7)可得到他們的關(guān)系:
我們將旋轉(zhuǎn)角細(xì)化過(guò)后,由于每次的旋轉(zhuǎn)角度θi滿足,如果無(wú)法控制旋轉(zhuǎn)方向的話,一定旋轉(zhuǎn)次數(shù)后必將超過(guò)θ。在這里設(shè)置一個(gè)方向標(biāo)志di,每次旋轉(zhuǎn)前判斷累計(jì)旋轉(zhuǎn)角度是否已經(jīng)大于目標(biāo)角θ,如若大于,則設(shè)置di= —1,表示向順時(shí)針旋轉(zhuǎn)。這樣每次的旋轉(zhuǎn)角度就變成了diθi。我們令旋轉(zhuǎn)剩余值為zi+1,則有zi+1=zi—diθi。其中z0為θ,旋轉(zhuǎn)過(guò)程中zi+1會(huì)逐漸趨近于0,當(dāng)達(dá)到系統(tǒng)需要的精度時(shí),便結(jié)束運(yùn)算。
在旋轉(zhuǎn)迭代過(guò)程中,由(8)式可以看出,每次迭代都會(huì)出現(xiàn)cosθi和tanθi。雖然硬件(FPGA)無(wú)法執(zhí)行三角函數(shù),其中我們知道,所以我們可以利用位移操作來(lái)替代tanθi。對(duì)于cosθi,每次迭代都會(huì)產(chǎn)生,我們將其提取出來(lái),即得到,利用Matlab進(jìn)行仿真,當(dāng)?shù)螖?shù)達(dá)到一定的門限值過(guò)后,將趨近于一個(gè)常數(shù)。表1為旋轉(zhuǎn)向量下Matlab仿真得出的數(shù)據(jù)表:
表1 Matlab仿真數(shù)據(jù)表
從表1所示我們可以看出,當(dāng)i=15,即經(jīng)過(guò)16次迭代,cosθi的值無(wú)限趨近于1,即θi無(wú)限趨近于0,此時(shí)我們可以令迭代結(jié)束。此時(shí)我們所得到的旋轉(zhuǎn)點(diǎn)已經(jīng)無(wú)限接近于我們的所求點(diǎn)Pn。所以當(dāng)?shù)螖?shù)n =16時(shí),以式子(9)成立:
式(9)中已知的量有x0, y0以及θ,通過(guò)16次迭代,我們可以得到xn, yn。其中的值由仿真可知約等于0.607253,我們可以將其預(yù)先存入系統(tǒng)中。便可以得到旋轉(zhuǎn)后的坐標(biāo)。同時(shí)我們令,y0= 0,代入(9)式便可以得到:
由(10)式可知,我們便完成了正弦函數(shù)和余弦函數(shù)的求解。將相關(guān)值代入(9)式,便可以得出旋轉(zhuǎn)平移后的目標(biāo)值。圖4為ModelSim仿真波形圖:
圖4 CORDIC算法ModelSim仿真波形圖
在通過(guò)算法得到我們需要30°,60°,120°,150°的梯度G30,G60,G120,G150后,我們采用文獻(xiàn)[8]、[9]中提到的CORDIC算法的向量模式進(jìn)行梯度G的平方和開(kāi)根號(hào)運(yùn)算([8]J.Duprat,J.-Michel.Muller.The CORDIC Algorithm:New Result for Fast VLSI Implementation.Transaction on Computers,42(2):168-178,1993;[9]Pramod K.Meher,J.Valls,Tso-Bing Juang,K.Sridharan,K.Maharatna.50 Years of CORDIC:Algorithms,and Applications.Circuits and Systems I:Regular Papers,IEEE,9:1893-1907,2009),即使用2-范數(shù)進(jìn)行最終梯度值G得求解:
在自適應(yīng)的閾值選擇過(guò)程中,結(jié)合了中值濾波與均值濾波結(jié)合的方法。在求解該值時(shí),我們同樣使用圖1中的線性緩沖器3×3的矩陣,并利用一個(gè)時(shí)鐘周期將三行像素進(jìn)行快速排序。我們?nèi)∪邢袼氐闹兄?,即Med1,Med2,Med3進(jìn)行均值運(yùn)算:
在以前的方法中,單純的采用中值濾波作為產(chǎn)生閾值的方法([10]李余錢,蘇光大.基于FPGA的自適應(yīng)閾值邊緣檢測(cè)的實(shí)現(xiàn)[J].儀表技術(shù)與傳感器,2016(04):57-59)。該方法在一定程度上根據(jù)圖像的局部信息進(jìn)行濾波處理,但卻仍然無(wú)法避免在圖像局部信息差別較大時(shí)產(chǎn)生偽邊或無(wú)法生成正確的邊緣。此時(shí),我們?yōu)榱诵拚摲椒ǖ娜毕?,在中值濾波的基礎(chǔ)上加入了均值濾波作雙濾波方法的處理。我們選取3×3矩陣的三行進(jìn)行升序(降序)排序,對(duì)每行進(jìn)行中值濾波方法處理,得到三個(gè)中值Med1,Med2,Med3。然后我們加入均值濾波方法求得三個(gè)中值的均值mean_value,即式(12)。以此為閾值來(lái)表示圖像的局部信息。該方法能夠在以往使用中值濾波的基礎(chǔ)上產(chǎn)生更加精細(xì)的邊緣,抗噪聲干擾能力更強(qiáng),能夠有效的去除偽邊以使最后提取到的邊緣更具有局部特性,并且更加精細(xì)。
本系統(tǒng)使用Verilog HDL作為硬件描述語(yǔ)言在ModelSim上實(shí)現(xiàn)仿真,并在ISE上實(shí)現(xiàn)整個(gè)系統(tǒng)的設(shè)計(jì),實(shí)驗(yàn)平臺(tái)為基于Xilinx的Spartan 6自制電路板。本系統(tǒng)硬件主要以下四個(gè)部分組成:圖像采集模塊、圖像傳輸轉(zhuǎn)換模塊、圖像處理模塊以及圖像顯示模塊。圖像采集模塊是由模擬攝像頭采集通過(guò)AV線輸入。通過(guò)視頻A/D轉(zhuǎn)換芯片TW2867將其轉(zhuǎn)換成一路8位數(shù)字信號(hào),此為圖像前端傳輸模塊。經(jīng)過(guò)FPGA核心圖像處理模塊進(jìn)行濾波、閾值選擇、邊緣檢測(cè)等操作后,通過(guò)HDMI發(fā)送芯片Sil9134合成HDMI傳輸所需的數(shù)據(jù),并輸出到HDMI顯示器上。系統(tǒng)結(jié)構(gòu)框圖如圖5所示:
圖5 系統(tǒng)整體結(jié)構(gòu)框圖
圖6 經(jīng)典算法與改進(jìn)算法實(shí)驗(yàn)對(duì)比圖
我們?cè)隍?yàn)證該方法的實(shí)驗(yàn)過(guò)程中,使用Xilinx的Spartan 6作為系統(tǒng)的主芯片,將改進(jìn)的算法與傳統(tǒng)算法進(jìn)行對(duì)比驗(yàn)證,如圖6所示,其中圖6(a)為模擬傳感器采集的原始圖像,圖6(b)為經(jīng)典Sobel邊緣檢測(cè)在Spartan 6芯片中的測(cè)試結(jié)果,圖6(c)為改進(jìn)Sobel邊緣檢測(cè)在Spartan 6芯片中的測(cè)試結(jié)果。通過(guò)(b)和(c)的比較,我們可以看出改進(jìn)的Sobel邊緣檢測(cè)在細(xì)節(jié)處的處理,更加精細(xì),對(duì)于圖像在特殊角度的處理更加的完備并且局部信息體現(xiàn)更加清晰,有效的濾除了系統(tǒng)中產(chǎn)生的噪聲。該輸出圖像分辨率為1920*1080,實(shí)現(xiàn)了實(shí)時(shí)高清圖像的處理,滿足當(dāng)前流行的1080P高清圖像處理,并且不受傳感器輸入分辨率的影響。
本文所描述的系統(tǒng),選擇Xilinx公司的Spartan 6作為目標(biāo)芯片,通過(guò)IES綜合器綜合之后,得到改進(jìn)的Sobel硬件檢測(cè)模塊資源使用情況綜合報(bào)告表如表2所示,該設(shè)計(jì)整體占用資源少,適合于工程開(kāi)發(fā)中資源緊缺的情況。但是該設(shè)計(jì)由于使用了HDMI接口進(jìn)行輸出,占用了較多的I/O資源,因HDMI傳輸?shù)膹?qiáng)大優(yōu)勢(shì),所以犧牲I/O資源作為代價(jià)也是可以接受的。
表2 改進(jìn)算法Sobel片上資源占用表
本文采用一種全新的思路進(jìn)行Sobel邊緣檢測(cè),結(jié)合了快速中值濾波和自適應(yīng)閾值選擇,使整個(gè)系統(tǒng)在Spartan 6芯片上能夠成功實(shí)現(xiàn)。從實(shí)驗(yàn)結(jié)果我們可以看出,該方法取得了更多的邊緣檢測(cè)模板,使一些特定細(xì)節(jié)上的處理相較于傳統(tǒng)方法更為優(yōu)秀,取得了更為精細(xì)的邊緣,抗噪聲能力大大加強(qiáng)。使用更為更為先進(jìn)的芯片,使得整個(gè)系統(tǒng)的傳輸速率和處理精度更高,能夠?qū)崟r(shí)處理1080P的圖像,滿足了現(xiàn)代圖像處理前端任務(wù),為后續(xù)圖像處理提供了高速高清的支撐材料。