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