劉紫燕
(貴州大學計算機科學與信息學院,貴州貴陽 550025)
實時圖像邊緣檢測的設(shè)計及FPGA實現(xiàn)
劉紫燕
(貴州大學計算機科學與信息學院,貴州貴陽 550025)
傳統(tǒng)Sobel算法實現(xiàn)邊緣檢測是基于靜態(tài)圖像,而在實時圖像處理中,邊緣檢測存在一定的復雜度和難度,文中將FPGA應用于實時圖像邊緣檢測系統(tǒng),從而實現(xiàn)動態(tài)實時圖像的邊緣檢測。通過搭建實驗平臺仿真驗證表明,檢測精度和數(shù)據(jù)處理的運算效率均有所提高。
Sobel算法;邊緣檢測;實時圖像;FPGA
邊緣是圖像最基本的特征。邊緣指圖像局部亮度變化最顯著的部分,即圖像局部特征不連續(xù),表現(xiàn)為圖像灰度級突變、紋理結(jié)構(gòu)突變和彩色變化等。圖像的邊緣信息包含了大部分的圖像特征信息,對圖像分析來說十分重要。邊緣檢測技術(shù)是圖像處理和計算機視覺等領(lǐng)域的一項基本技術(shù),在工業(yè)、航天、醫(yī)學、軍事等領(lǐng)域中有著廣泛應用。如何快速、精確地提取圖像邊緣信息是國內(nèi)外研究的熱點,然而邊緣檢測又是圖像處理中的一個難題。
在實時圖像處理中,實現(xiàn)邊緣檢測算法的計算步驟復雜,對處理速度要求較高,因此,用純軟件方法很難達到要求。然而,F(xiàn)PGA器件對同時可完成的處理任務(wù)幾乎沒有限制,適合高速、并行信號處理,并且FPGA密度高、容量大,有內(nèi)置存儲器、容易實現(xiàn),故FPGA被廣泛用于實時圖像處理系統(tǒng),對邊緣檢測的工程實現(xiàn)以及實現(xiàn)效率和成本具有重要意義。文中設(shè)計了一種基于FPGA的實時圖像邊緣檢測系統(tǒng),利用FPGA對圖像數(shù)據(jù)進行實時處理,從而獲得較高的處理性能。
Sobel算子是圖像邊緣檢測算法中的常用算法,其計算簡便、檢測效果好。采用Sobel算法對圖像進行邊緣檢測時,首先要利用Sobel算子計算出水平梯度和垂直梯度,然后再把兩個方向的梯度結(jié)合起來,最后應用門限處理模塊判斷圖像邊緣并輸出邊緣檢測結(jié)果,其框圖如圖1所示。
圖1 Sobel算子原理框圖
一般情況下,在數(shù)字圖像處理中,每幅圖像都被量化成許多像素。常用的Sobel算子有兩個,一個水平方向的,一個垂直方向的,如圖2所示[1]。
圖2 Sobel算子示意圖
Sobel邊緣檢測算法用3×3的卷積表來存儲一個像素及其相鄰像素用于計算亮度導數(shù)。把這個卷積表逐個像素地移動,最后完全通過一幅圖像。除邊緣像素不可導之外,對于一幅640×480的圖像,這個卷積表將要移動302 964(638×468)次位置。
邊緣檢測首先需要將原始圖像轉(zhuǎn)化為灰度圖像,其中的每一個像素都代表了原始圖像的一個亮度水平:用10位二進制數(shù)據(jù)表示,“0”代表黑色,“1023”代表白色。這就將一幅圖像創(chuàng)建成了一張很清楚的灰度圖像。邊緣信息來源于兩個相鄰像素的亮度變化:如果所有相鄰像素有同樣的亮度,則說明此區(qū)域不是邊緣;相反,如果一些相鄰像素的亮度明顯高于另一些,則說明此區(qū)域為邊緣。測量相鄰像素的亮度關(guān)系就是計算亮度導數(shù)[2]
其中,G為亮度導數(shù),Gx與Gy是Sobel邊緣檢測在X方向與Y方向的Kernel。
通過攝像頭獲得的未處理圖像被轉(zhuǎn)化為一個RGB(Red Green Blue)格式圖像,然后把這個圖像進行二值化處理轉(zhuǎn)為灰度圖像,以獲得進行邊緣提取時需要的圖像強度?;叶葓D像被鏡像后正確地顯示到液晶屏上,并且存儲在SDRAM FIFO(First In First Out)中。以640個像素為寬度,3行數(shù)據(jù)連續(xù)存儲在M4K塊里,一旦數(shù)據(jù)被準備好,就開始進行邊緣檢測。液晶屏控制器連續(xù)刷新屏幕將邊緣檢測的結(jié)果顯示到液晶屏上。基于FPGA的實時圖像邊緣檢測的系統(tǒng)如圖3所示。
圖3 基于FPGA的實時圖像邊緣檢測的系統(tǒng)框圖
(1)灰度圖像。
為進行邊緣檢測,必須將從攝像頭采集來的RGB彩色圖像轉(zhuǎn)換為灰度圖像。在灰度圖像中,綠色需要較高的強度[2]。直接將RGB圖像轉(zhuǎn)換為灰度圖像的表達式。
理論上效果最好、用硬件實現(xiàn)效率最高的是
然而,這樣的處理結(jié)果還不能為邊緣檢測提供足夠的對比度。經(jīng)過反復調(diào)試,發(fā)現(xiàn)在使用的設(shè)備上提高綠色強度的最好方法是
(2)梯度計算。
在用Sobel進行邊緣檢測時,可以用Sobel算子與圖像像素做卷積運算,然后用梯度公式計算圖像像素點梯度。如圖 4 所示,P1、P2、P3、P4、P5、P6、P7、P8、P9為圖像像素點,若對P5點做卷積,雖然是對P5運算,但是必須同時知道 P1、P2、P3、P4、P6、P7、P8、P9的信息,這在C語言中不是問題,因為它們保存在一個數(shù)組內(nèi),只要改變數(shù)組的下標即可得到,但在Verilog HDL中卻做不到。
圖4 具有9個點的亮度導數(shù)計算示意圖
對Gx做運算時,根據(jù)Sobel邊緣檢測算法,P5對Gx的亮度導數(shù)為[2]
可以用Parameter定義來取得X1~X9,但很難獲得 P1~ P9,因為 P1、P2、P3,…,P9是依序傳入的,但Verilog HDL沒有C語言中地址的概念,更沒有二維數(shù)組的概念,為此,設(shè)計了3條Line Buffer做以上運算,如圖5所示。
圖5 具有3條Line Buffer做卷積運算示意圖
設(shè)計的 3條 Line Buffer與 Gx乘加的部分由Megafunction的altmult_add與 parallel_add完成,每條Line Buffer只有3個點的程序來仿真,結(jié)果如圖6所示。從圖6中可以看出,在最后一個pixel:9輸入后,下一個 clock得到的值是1、4、7,再下個 clock是2、5、8,最后一個 clock是9、6、3,也就是 Line0依次得到9、8、7,Line1 得到6、5、4,Line3 得到3、2、1,所以 Line0 必須與 X9、X8、X7做乘加,其余同理,所以:
圖6 具有3條Line Buffer做卷積運算仿真結(jié)果
Mac_3是 Megafunction的 altmult_add,其余的 X1、X2與 Y0、Y1、Y2同理。
(3)圖像數(shù)據(jù)緩沖器。
在圖像的空域濾波中,為得到3×3的方形模板窗,通常使用FIFO(First In First Out)模塊作為圖像數(shù)據(jù)的緩沖器。文中攝像頭采集的圖像被送到SDRAM FIFO中,故需將圖像信息裝載到3個連續(xù)的M4K塊中,這些塊存儲了3行像素以備邊緣檢測計算用,邊緣檢測狀態(tài)機啟動對第一個3×3卷積表進行卷積運算,結(jié)果被送到SDRAM并用液晶屏輸出。接著進行下一個3×3卷積表計算,依次類推,直到最后一個3×3卷積表的計算完成。當計算完成一行后,需要讀取更多由M4K塊組成的行,但是這次僅需要讀取第4個M4K作為第1個M4K,余下第2個M4K的值仍作為第2個M4K,第3個M4K的值仍作為第3個M4K,如此重復,直到計算完整幅圖像,然后繼續(xù)計算下一幀。
為驗證該方法的有效性,文中搭建了驗證平臺并對Sobel邊緣檢測模塊進行驗證。由Matlab產(chǎn)生原始數(shù)據(jù)和期望結(jié)果數(shù)據(jù),并分別存放在original.txt和result.txt兩個文件中。如圖7所示,將原始數(shù)據(jù)讀進test_up_mpdule_Sobel單元,與控制信號一起產(chǎn)生數(shù)據(jù)流。期望結(jié)果數(shù)據(jù)被test_result_module_Sobel讀入。這個模塊將來自Sobel模塊的數(shù)據(jù)與期望數(shù)據(jù)相比,給出相應的測試結(jié)果。
圖7 Sobel測試示意圖
圖8所示為Sobel實時邊緣檢測的仿真時序圖,在每一行的開始,讀數(shù)據(jù)狀態(tài)機從SDRAM中讀取640個像素并寫入3個M4K塊。先用3個時鐘周期來定位M4K中的3×3卷積表,當卷積表更新完成后開始邊緣檢測。需要花4個時鐘周期計算最大的邊緣值。然后,將邊緣檢測結(jié)果存入SRAM中。通常用一個周期決定下一個狀態(tài)。如果像素點少于640個,將從M4K塊中讀取新值組成640個像素。
圖8 Sobel實時邊緣檢測的仿真時序圖
Sobel實時邊緣檢測效果如圖9所示。(a)為原始圖像,(b)為采用Sobel算法進行邊緣提取后的圖像,從系統(tǒng)的運行結(jié)果可以看出,該系統(tǒng)可以對實時圖像進行邊緣檢測運算,并且檢測精度較高。
圖9 實時邊緣檢測效果對比圖
使用Quartus II綜合器對Sobel模塊進行綜合后,得到的綜合報告如圖10所示。由綜合報告可知,Sobel邊緣檢測模塊占用資源相對合理。因此,完全由硬件電路進行數(shù)據(jù)處理算法,并且能在數(shù)據(jù)處理中實現(xiàn)高并行度是FPGA的優(yōu)勢。
圖10 Sobel邊緣檢測綜合報告
用Sobel算法實現(xiàn)基于FPGA的實時圖像邊緣檢測。傳統(tǒng)Sobel算法實現(xiàn)邊緣檢測是基于靜態(tài)圖像的,文中方法是用攝像頭采集連續(xù)的視頻流,在FPGA上用Sobel算法實現(xiàn)實時圖像的邊緣檢測,同時顯示在液晶屏上。傳統(tǒng)的圖像處理系統(tǒng)由于對數(shù)據(jù)進行串行操作,處理一次卷積需要幾十至幾百個指令周期,而利用FPGA硬件資源進行數(shù)據(jù)運算則可以在一個周期內(nèi)得到運算結(jié)果,效率大大提高。
[1]吳海彬,何祖恩,李文錦.基于改進Sobel算子的圖像邊緣檢測及其嵌入式實現(xiàn)[J].2009,37(10):133-136.
[2]張廣軍.視覺測量[M].北京:科學出版社,2008.
[3]谷陸生.基于SoPC的實時邊緣檢測系統(tǒng)研究[J].電子技術(shù)應用,2009(8):47 -48,75.
[4]李明,趙勛杰,毛偉民.Sobel邊緣檢測的FPGA實現(xiàn)[J].現(xiàn)代電子技術(shù),2009,33(16):44 -46.
[5]張志剛.FPGA與SOPC設(shè)計教程-DE2實踐[M].西安:西安電子科技大學出版社,2007.
Edge Detection of Real-Time Image Based on FPGA
LIU Ziyan
(College of Computer Science and Information,Guizhou University,Guiyang 550025,China)
The traditional Sobel algorithm for edge detection is based on static image,and it is difficult to carry out in the process of real-time image processing.We design an edge detection system of real-time image based on FPGA,which can implement the edge detection dynamically,and has high detection accuracy and efficiency.
Sobel algorithm;edge detection;real-time image;FPGA
TP391.41
A
1007-7820(2011)12-001-04
2011-06-16
貴州省自然科學基金資助項目([2011]2193號)
劉紫燕(1977—),女,副教授,碩士生導師。研究方向:無線通信,嵌入式通信,下一代網(wǎng)絡(luò)等。