四川大學電子信息學院 代臨風 鄧洪敏
提出了一種改進的Sobel算子:在傳統Sobel算子的基礎上,使用快速中值濾波濾除系統雜波、加入旋轉模式下的CORDIC(Coordinate Rotation Digital Computer)算法,增加了Sobel算子的模板數,使系統的檢測精度提高、并利用雙濾波器求出局部圖像像素點的均值作為自適應閾值,提高了檢測算法在局部圖像特性上的適應性。最后,將所提算法運用到FPGA處理平臺上,并進行圖像邊緣檢測的驗證。實驗結果表明,該方法提取得到的邊緣更加精細,局部特性更好,抗噪聲能力更強,且由于FPGA的高主頻和并行性,硬件資源的占用率大大降低,系統整體處理時間大大減少。
引言:隨著電子、計算機領域工程技術的迅猛發展,圖像邊緣檢測已經成為圖像處理技術中關鍵的一項。圖像邊緣是圖像的基本特征([1]陸小鋒,張俊豪,陸曉成,等.基于FPGA的圖像分塊實時邊緣檢測系統[J].電視技術,2012,36(21):51-54),圖像的邊緣區域集中著大量的圖像信息,具有不確定性,是圖像中屬性變換最為劇烈的一部分。在許多的工程應用中我們都會用到圖像的邊緣處理作為基礎從而進行之后的更為高級的圖像處理,比如:人臉識別、車牌識別、手寫體識別等。
在研究邊緣檢測算法時,通常采用基于圖像強度的一階或二階導數,根據其變化規律和一定的檢測規則,判定圖像的邊緣。常見的邊緣檢測算子有Robert算子,Sobel算子、Prewitt算子、Laplacian算子、LOG算子、Canny算子等([2]米曾真,謝志江,陳濤,等.重軌圖像增強與邊緣提取的關鍵技術[J].光學精密工程,2012,20(7):1645-1652)。但是導數很容易受到噪聲的影響([5]毛星云,冷雪飛,等.OpenCV3編程入門[M].北京:電子工業出版社),因此必須在邊緣檢測算子中加入濾波器用以抑制噪聲。
在實時圖像處理中,不能出現延遲,對處理速度要求極高,如果運用軟件的方法,實時性往往較差,所以我們利用FPGA主頻高、并行性等特點,將其運用在實時圖像處理的前端處理中,比如:濾波、邊緣提取等。
文獻([3]祁佳,劉紫燕.實時圖像雙邊緣檢測算法及FPGA實現[J].電視技術,2014,38(03):64-65+85)中通過Robert算子和Sobel算子進行雙邊緣檢測方法,這篇文章中作者著重考慮了傳統Sobel算子在精度上面的欠缺,通過兩個算子模板一起檢測的方法,加大了檢測精度。但使用兩種不同的算子模板難免會損壞一些局部圖像上的邊緣特性,且使用固定閾值和經驗閾值,對圖像的邊緣處理不具備普遍適應性。文獻([7]寧賽男,朱明,孫宏海,徐芳.一種改進的Sobel自適應邊緣檢測的FPGA實現[J].液晶與顯示,2014,29(03):395-402)采用4個方向上的梯度模板進行Sobel邊緣檢測,并且加入人眼視覺特性的自適應閾值選取方法,使得在低亮度背景下的圖像邊緣能夠被檢測出來。但就其實驗結果,邊緣的精度相比經典算法沒有明顯的改進,高亮度部分檢測效果甚至更差。
以上兩種方法在傳統Sobel邊緣檢測的基礎得到了一定改進,但都沒有周全的考慮。而綜合考慮邊緣檢測中的干擾因素,本文借鑒并改進文獻([4]李秩博,李小兵,周嫻.基于FPGA的快速中值濾波器設計與實現[J].液晶與顯示,2010,25(2),292-295)中的快速中值濾波進行前端的濾波處理,使用基于旋轉模式下的CORDIC算法進行梯度計算,并利用中值濾波后的算子模板進行均值計算,得出局部閾值,最后實現了高清視頻圖像的實時處理輸出,每一幀分辨率可達1920*1080。該方法精度更高,邊緣更細,并有效的抑制了背景與傳輸噪聲。
中值濾波是一種典型的非線性濾波技術,基本思想是用像素點鄰域灰度值的中值來代替該像素點的灰度值[5],該方法可以很好地去除圖像傳輸過程中的椒鹽噪聲,并且同時能夠不破壞圖像的邊緣細節。
傳統的中值濾波將所選3×3的矩陣中9個值依次進行比較,需要大量的硬件資源和處理時間。由于我們需要提高系統的實時性,這里采用一種快速中值濾波算法([6]李國燕,侯向丹,顧軍華,陸益財,范培培.快速中值濾波算法的改進及其FPGA實現[J].電子技術應用,2013,39(02):137-140),利用FPGA并行特征,采用流水線設計,僅需要3個時鐘周期就可以得到一個3×3矩陣的中值。
快速中值濾波的核心思想是利用并行特征,分成三組進行比較,通過理論分析排除一些不可能為中值的點,以快速得出3×3矩陣的中值。首先我們通過如圖1所示的線性緩沖器得到3×3的滑動窗口:

圖1 中值濾波矩陣實現結構圖
如圖1所示,本系統采用Xilinx中的線性緩沖模塊得到3×3的矩陣模塊,其中P11~P33為一個中值濾波模板中待檢測的圖像灰度值。利用FPGA的并行性,我們先將3×3矩陣每一行進行比較,分別得到三個最大值(Max),中值(Med),最小值(Min)。根據理論分析,中值的數可能為三行Max中的最小值,Med中的中值,或Min中的最大值,再對這三個值進行比較就可以得到3×3矩陣的中值,整個過程僅僅需要3個時鐘周期,大大改善了系統在前端濾波時的效率問題。其程序運行示意圖如圖2所示:

圖2 快速中值濾波示意圖
Sobel算子常用于邊緣檢測當中,是一個離散的差分算子,經典算法以圖像某點的橫向和縱向與一個奇數模板進行卷積,橫向與縱向計算結果分別為公式(1)和公式(2),其中I為快速中值濾波提取的3×3矩陣。

這里需要利用范數整合所求的梯度值,利用常用的P-范數進行數據整合。若,那么:

求得兩個方向(X方向、Y方向)上的梯度值,此時利用P-范數求出最終的近似梯度值。經典Sobel算法采用P=1的情形,即:

計算出最終近似梯度值G后,將其與某個固定的閾值T進行比較,得出最終的邊緣集合g (x, y):

上述便是經典算法中所運用到的檢測方法,可以明顯看出,該方法存在很大的缺陷:
在X和Y方向上進行了梯度檢測,對水平和垂直方向上的邊緣有較好的檢測效果。但是對其他方向沒有作出相應處理,導致圖像的一些特定角度上的邊緣容易被忽略。
做差分運算,雖然對噪聲有一定的抑制能力,但是先經過算子模板加權,大大降低了抗噪聲能力,并且會導致邊緣信息模糊,影響處理效果[7]。
檢測閾值常常人為設定,不具備普遍適應性,在圖像局部容易造成粗邊緣,在邊緣信息較為密集的區域容易造成模糊。
我們在原算法的基礎上,加入CORDIC旋轉算法,利用空間矢量的旋轉性,得到更多角度的梯度。在FPGA中,我們比較難直接實現正弦和余弦函數,在此利用一種旋轉平移的方法得到任意角度的三角函數值。
由于FPGA的硬件特性,在實現三角函數,反三角函數,對數函數等函數時存在困難。通常使用的方法是利用查找表,將某個運算的輸入與輸出羅列起來,放到ROM中,根據輸入查找輸出。該方法可以有效地避免延時但卻犧牲了大量的硬件資源,是一種用面積換取速度的設計方法,在工程應用中并不可取。
CORDIC算法的幾何原理圖如圖3所示:

圖3 CORDIC幾何原理圖
由圖3所示我們可以推導出以下兩個公式:

同樣,在傳統CORDIC算法的基礎上進行優化。其中θi為第i次的旋轉角度,θi符合條件式(,)。所以需要對幾何原理部分作以下修改。
假設在直角坐標系中有一個點P0(x0, y0),將P0經零點旋轉,旋轉角度為θ,旋轉后所得點Pn(xn, yn),我們由公式(6)、(7)可得到他們的關系:

我們將旋轉角細化過后,由于每次的旋轉角度θi滿足,如果無法控制旋轉方向的話,一定旋轉次數后必將超過θ。在這里設置一個方向標志di,每次旋轉前判斷累計旋轉角度是否已經大于目標角θ,如若大于,則設置di= —1,表示向順時針旋轉。這樣每次的旋轉角度就變成了diθi。我們令旋轉剩余值為zi+1,則有zi+1=zi—diθi。其中z0為θ,旋轉過程中zi+1會逐漸趨近于0,當達到系統需要的精度時,便結束運算。
在旋轉迭代過程中,由(8)式可以看出,每次迭代都會出現cosθi和tanθi。雖然硬件(FPGA)無法執行三角函數,其中我們知道,所以我們可以利用位移操作來替代tanθi。對于cosθi,每次迭代都會產生,我們將其提取出來,即得到,利用Matlab進行仿真,當迭代次數達到一定的門限值過后,將趨近于一個常數。表1為旋轉向量下Matlab仿真得出的數據表:

表1 Matlab仿真數據表
從表1所示我們可以看出,當i=15,即經過16次迭代,cosθi的值無限趨近于1,即θi無限趨近于0,此時我們可以令迭代結束。此時我們所得到的旋轉點已經無限接近于我們的所求點Pn。所以當迭代次數n =16時,以式子(9)成立:
式(9)中已知的量有x0, y0以及θ,通過16次迭代,我們可以得到xn, yn。其中的值由仿真可知約等于0.607253,我們可以將其預先存入系統中。便可以得到旋轉后的坐標。同時我們令,y0= 0,代入(9)式便可以得到:

由(10)式可知,我們便完成了正弦函數和余弦函數的求解。將相關值代入(9)式,便可以得出旋轉平移后的目標值。圖4為ModelSim仿真波形圖:


圖4 CORDIC算法ModelSim仿真波形圖
在通過算法得到我們需要30°,60°,120°,150°的梯度G30,G60,G120,G150后,我們采用文獻[8]、[9]中提到的CORDIC算法的向量模式進行梯度G的平方和開根號運算([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-范數進行最終梯度值G得求解:

在自適應的閾值選擇過程中,結合了中值濾波與均值濾波結合的方法。在求解該值時,我們同樣使用圖1中的線性緩沖器3×3的矩陣,并利用一個時鐘周期將三行像素進行快速排序。我們取三行像素的中值,即Med1,Med2,Med3進行均值運算:

在以前的方法中,單純的采用中值濾波作為產生閾值的方法([10]李余錢,蘇光大.基于FPGA的自適應閾值邊緣檢測的實現[J].儀表技術與傳感器,2016(04):57-59)。該方法在一定程度上根據圖像的局部信息進行濾波處理,但卻仍然無法避免在圖像局部信息差別較大時產生偽邊或無法生成正確的邊緣。此時,我們為了修正該方法的缺陷,在中值濾波的基礎上加入了均值濾波作雙濾波方法的處理。我們選取3×3矩陣的三行進行升序(降序)排序,對每行進行中值濾波方法處理,得到三個中值Med1,Med2,Med3。然后我們加入均值濾波方法求得三個中值的均值mean_value,即式(12)。以此為閾值來表示圖像的局部信息。該方法能夠在以往使用中值濾波的基礎上產生更加精細的邊緣,抗噪聲干擾能力更強,能夠有效的去除偽邊以使最后提取到的邊緣更具有局部特性,并且更加精細。
本系統使用Verilog HDL作為硬件描述語言在ModelSim上實現仿真,并在ISE上實現整個系統的設計,實驗平臺為基于Xilinx的Spartan 6自制電路板。本系統硬件主要以下四個部分組成:圖像采集模塊、圖像傳輸轉換模塊、圖像處理模塊以及圖像顯示模塊。圖像采集模塊是由模擬攝像頭采集通過AV線輸入。通過視頻A/D轉換芯片TW2867將其轉換成一路8位數字信號,此為圖像前端傳輸模塊。經過FPGA核心圖像處理模塊進行濾波、閾值選擇、邊緣檢測等操作后,通過HDMI發送芯片Sil9134合成HDMI傳輸所需的數據,并輸出到HDMI顯示器上。系統結構框圖如圖5所示:

圖5 系統整體結構框圖

圖6 經典算法與改進算法實驗對比圖
我們在驗證該方法的實驗過程中,使用Xilinx的Spartan 6作為系統的主芯片,將改進的算法與傳統算法進行對比驗證,如圖6所示,其中圖6(a)為模擬傳感器采集的原始圖像,圖6(b)為經典Sobel邊緣檢測在Spartan 6芯片中的測試結果,圖6(c)為改進Sobel邊緣檢測在Spartan 6芯片中的測試結果。通過(b)和(c)的比較,我們可以看出改進的Sobel邊緣檢測在細節處的處理,更加精細,對于圖像在特殊角度的處理更加的完備并且局部信息體現更加清晰,有效的濾除了系統中產生的噪聲。該輸出圖像分辨率為1920*1080,實現了實時高清圖像的處理,滿足當前流行的1080P高清圖像處理,并且不受傳感器輸入分辨率的影響。
本文所描述的系統,選擇Xilinx公司的Spartan 6作為目標芯片,通過IES綜合器綜合之后,得到改進的Sobel硬件檢測模塊資源使用情況綜合報告表如表2所示,該設計整體占用資源少,適合于工程開發中資源緊缺的情況。但是該設計由于使用了HDMI接口進行輸出,占用了較多的I/O資源,因HDMI傳輸的強大優勢,所以犧牲I/O資源作為代價也是可以接受的。

表2 改進算法Sobel片上資源占用表
本文采用一種全新的思路進行Sobel邊緣檢測,結合了快速中值濾波和自適應閾值選擇,使整個系統在Spartan 6芯片上能夠成功實現。從實驗結果我們可以看出,該方法取得了更多的邊緣檢測模板,使一些特定細節上的處理相較于傳統方法更為優秀,取得了更為精細的邊緣,抗噪聲能力大大加強。使用更為更為先進的芯片,使得整個系統的傳輸速率和處理精度更高,能夠實時處理1080P的圖像,滿足了現代圖像處理前端任務,為后續圖像處理提供了高速高清的支撐材料。