文獻標(biāo)識碼: B
文章編號: 0258-7998(2011)08-0026-04
邊緣檢測是圖像處理、計算機視覺的基礎(chǔ)內(nèi)容;是圖像分析與識別的重要環(huán)節(jié);是目標(biāo)檢測、圖像分割所依賴的重要特征。在 PC機上,MATLAB是圖像處理的強大工具,如何將成熟的算法轉(zhuǎn)移到嵌入式系統(tǒng)上實現(xiàn)是急需解決的問題。在實時圖像處理中,用Sobel算子進行物體的邊緣檢測是經(jīng)常用到的算法, 由于對處理速度要求較高且算法處理的數(shù)據(jù)量較大,用一般的軟件實現(xiàn)會比較慢, 無法達到實時系統(tǒng)的要求。而使用FPGA芯片, 用硬件實現(xiàn)對底層的圖像預(yù)處理可提高圖像處理的速度, 滿足系統(tǒng)實時要求。FPGA技術(shù)的關(guān)鍵就是利用強有力的設(shè)計工具以縮短開發(fā)周期,提高器件資源利用率,提供綜合器的選擇(例如在最佳速度和設(shè)計規(guī)模之間做出選擇)。隨著FPGA 芯片技術(shù)的進步, 其價格逐步降低,而性能迅速增強, 這為使用 FPGA 芯片搭建圖像處理平臺提供了可能[1]。
1 Sobel邊緣檢測算法
Sobel算法是一種較成熟的微分邊緣檢測算法,它計算簡單,且能產(chǎn)生較好的檢測效果, 對噪聲具有平滑作用, 可以提供較為精確的邊緣方向信息[2]。
Sobel 邊緣檢測算子使用兩個方向算子(垂直算子和水平算子),如圖1所示。其原理是分別用這兩個算子對圖像進行卷積運算,得到兩個矩陣,再求這兩個矩陣對應(yīng)位置的兩個數(shù)的均方根,得到一個新的矩陣,即為灰度圖像矩陣中各個像素點的梯度值。最后將梯度值與門限T進行比較,當(dāng)梯度值≥T時,規(guī)定該點的灰度值為255,反之為0。
根據(jù)Sobel算子邊緣檢測的原理可得出如圖2所示的Sobel邊緣檢測算法框圖。對一幅圖像進行Sobel邊緣檢測時,首先要利用Sobel算子計算出水平梯度和垂直梯度,這涉及到卷積運算。然后再把兩個方向的梯度結(jié)合起來,這就涉及到均方根運算,最后進行門限處理來判斷圖像邊緣并輸出邊緣檢測結(jié)果,這部分可通過編寫Verilog HDL代碼實現(xiàn)[3]。
2 Sobel 邊緣檢測的硬件實現(xiàn)
Sobel邊緣檢測的硬件實現(xiàn)系統(tǒng)應(yīng)包含梯度計算模塊和門限處理模塊,其中梯度計算模塊可分為圖像行緩沖模塊和卷積計算模塊。此外,各個模塊功能的實現(xiàn)可通過調(diào)用 Quartus II軟件提供的各種宏功能模塊(Megafunctions)來實現(xiàn),如圖3所示。
2.1 圖像行緩沖模塊器
梯度計算模塊主要完成兩個Sobel算子分別與圖像像素矩陣(3×3窗口)的卷積運算。首先要構(gòu)造3×3圖像像素矩陣,要完成這個功能,必須引入一個容量足夠大的存儲單元來緩沖串行輸入的圖像數(shù)據(jù)流, 并把串行圖像數(shù)據(jù)轉(zhuǎn)化為并行的3行圖像數(shù)據(jù),這樣在3個像素時鐘后就可以得到3×3圖像像素矩陣。以往常使用先入先出棧(FIFO)作為圖像數(shù)據(jù)的緩沖器[4],但對 FIFO的讀寫操作較為復(fù)雜。本文通過調(diào)用Quartus II軟件提供的基于RAM移位寄存器宏模塊altshift_taps也能實現(xiàn)同樣功能。
altshift_taps宏模塊是一個可配置的、具有抽頭(Taps)輸出的移位寄存器,每個抽頭在移位寄存器鏈的指定位置輸出數(shù)據(jù)。對MATLAB常用的256×256圖像進行Sobel邊緣檢測,altshift_taps模塊參數(shù)設(shè)置為8 bit輸入/8 bit輸出、3抽頭,相鄰兩個抽頭相距256個寄存器,如圖4所示。其中相鄰兩個抽頭的距離是根據(jù)圖像的大小來設(shè)置的,例如在硬件下載仿真上,TRDB-LTM液晶屏能正常顯示的圖像大小是800×480,此時抽頭距離應(yīng)設(shè)置為800。
2.2 卷積計算模塊
卷積計算模塊是為了得到水平、垂直兩個方向的梯度值,要實現(xiàn)卷積運算需要做大量的乘法和加法運算。如果采用以往分立的D觸發(fā)器和加法器以及乘法器來完成[5],但其結(jié)構(gòu)復(fù)雜。本文通過調(diào)用 Quartus II軟件提供的宏功能模塊中的可編程乘加器 altmult_add和可編程多路并行加法器 parallel_add來實現(xiàn)。
卷積運算的具體實現(xiàn)是垂直算子和水平算子使用并行結(jié)構(gòu),與altshift_taps宏功能模塊輸出的數(shù)據(jù)同時相乘并相加,需用到6個可編程乘加器altmult_add模塊,其參數(shù)設(shè)置如圖5所示,得到的6個數(shù)據(jù)可分為水平和垂直兩組各3個。再將這兩組數(shù)據(jù)分別送往可編程多路并行加法器parallel_add模塊,其參數(shù)設(shè)置如圖6所示,得到兩個數(shù)據(jù)。最后通過調(diào)用浮點平方根altfp_sqrt模塊來計算這兩個數(shù)據(jù)的均方根,即得到3×3 窗口中心點像素的梯度值,該模塊的參數(shù)設(shè)置如圖7所示。該方法可以保證每個周期輸出一個像素點的Sobel 梯度值。此外,所用到的這些模塊可以根據(jù)系統(tǒng)設(shè)計需求靈活選用[6]。
2.3 門限處理模塊
門限處理模塊編寫的Verilog HDL代碼實現(xiàn)如下:
reg [9:0] cnt;
always@(posedge iCLK, negedge iRST_N)
begin
if (!iRST_N)
begin
oDVAL <= 0; cnt<=10'b0;
end
else
begin
if(cnt==10'd768) //3*256=768
begin
oDVAL<=iDVAL; cnt<=10'b0; end
else cnt<=cnt+10'b1;
if (oDVAL)
oDATA<=(Abs_mag< iTHRESHOLD) ? 0 : 1023;
else oDATA <= 0;
end
end
該模塊檢測到的邊緣數(shù)據(jù)需經(jīng)過3行時間的延時才能輸出,如圖8中間線處的時間為15.4 μs,是第769個周期。如果不延時,仿真出來的圖像會出現(xiàn)上下偏移的現(xiàn)象。延時產(chǎn)生的原因是移位寄存器宏功能模塊altshift_taps填充需要的延時和門限處理需要的延時。
3 軟件仿真和分析
為了更加直觀地驗證Sobel 邊緣檢測的FPGA硬件實現(xiàn)效果,本文采用 MATLAB 和 Modelsim 進行混合仿真[7],并與Sobel 邊緣檢測的MATLAB實現(xiàn)進行比較。
3.1 Quartus II編譯
在Quartus II中編譯整個工程,產(chǎn)生Modelsim仿真測試時所需的文件*.vo和*.sdo。本文選用Altera公司的Cyclone II 系列FPGA EP2C70F896C6器件,利用 Quartus II 7.2軟件完成Sobel邊緣檢測的 FPGA系統(tǒng)設(shè)計。圖9給出了該系統(tǒng)所消耗的資源情況,從中可以看出,該系統(tǒng)僅僅占用了芯片1%的邏輯單元,剩余的資源可以用來實現(xiàn)更復(fù)雜的功能。
3.2 Modelsim測試
在Modelsim中編寫測試文件,并存儲檢測到的邊緣數(shù)據(jù)。系統(tǒng)仿真的時鐘信號設(shè)為50 MHz,處理一幅256×256的8 bit圖像, 所需時間為1.3 ms,則每秒可處理圖像為770幅, 達到了實時系統(tǒng)的要求, 解決了普通計算機運算需時長的問題。
3.3 MATLAB處理
最后將Modelsim存儲的數(shù)據(jù)經(jīng)過MATLAB處理,得到邊緣圖像。圖10是閾值為150時lena圖像的仿真情況。
3.4 仿真結(jié)果分析
由圖10可知,(a)是原始圖像,(b)是Sobel 邊緣檢測的MATLAB實現(xiàn),(c)是Sobel 邊緣檢測的FGPA實現(xiàn)。比較(b)和(c)可以看出,在邊緣檢測效果方面,硬件時序仿真結(jié)果和MATLAB處理結(jié)果是一致的。這是因為原始圖像也是采用8 bit定點存儲格式,所以沒有量化精度的損失,即該設(shè)計取得了很好的邊緣檢測效果。
4 Sobel邊緣檢測的FPGA應(yīng)用
4.1 開發(fā)環(huán)境
開發(fā)環(huán)境的硬件驗證平臺是DE2-70開發(fā)板,其目標(biāo)芯片是Altera公司的Cyclone II系列中的 EP2C70-
F896C6N型FPGA器件。該板可外接TRDB-D5M攝像頭和彩色TRDB-LTM 觸摸屏。
4.2 系統(tǒng)結(jié)構(gòu)框架
圖11是整個系統(tǒng)結(jié)構(gòu)框架,其中虛線部分是Altera公司的FPGA。該系統(tǒng)將TRDB-D5M攝像頭采集的圖像數(shù)據(jù)送FPGA板進行處理,并在TRDB-LTM液晶屏上顯示。
4.3 系統(tǒng)仿真結(jié)果
該系統(tǒng)可以調(diào)整曝光值和閾值,選擇是否鏡像,控制顯示的圖像為彩色模式、灰階模式或者Sobel邊緣檢測模式。圖12、圖13的四幅圖像依次為彩色模式、灰階模式和Sobel邊緣檢測模式下當(dāng)閾值分別為3和96時的圖像。
從仿真結(jié)果及實驗所得到的圖像來看, 該系統(tǒng)較好地完成了Sobel 算子邊緣檢測的任務(wù)。實驗結(jié)果表明,使用 FPGA 器件能較為準(zhǔn)確地檢測出有用的邊緣信息,即能較好地完成圖像處理的邊緣檢測工作。
該設(shè)計利用可編程的FPGA模塊完成Sobel 邊緣檢測的硬件設(shè)計。該方法既避免了自己編寫大量程序代碼的繁瑣,又獲得了很好的綜合和實現(xiàn)結(jié)果。在系統(tǒng)構(gòu)建時,各功能模塊具有良好的移植性和系統(tǒng)擴展性。且使用的邏輯門個數(shù)少,占用很少系統(tǒng)資源,可以在FPGA 上完成更多更復(fù)雜的圖像處理工作,為FPGA 單芯片圖像處理系統(tǒng)的實現(xiàn)提供了條件。
參考文獻
[1] 宇野由麻子,大石基之,成英.FPGA產(chǎn)品市場現(xiàn)狀與展望[J].電子設(shè)計應(yīng)用,2004(12):63-72.
[2] SHARIFI M,F(xiàn)ATHY M,MAHMOUDI M T.A classified and comparative study of edge detection algorithms[A].Proceedings of the International Conference on Information Technology:Coding and Computing[C].Iran,2002:117-120.
[3] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,2003.
[4] 官鑫,王黎,高曉蓉,等.圖像邊緣檢測Sobel算法的FPGA仿真與實現(xiàn)[J].現(xiàn)代電子設(shè)計,2009(8):109-111.
[5] 艾揚利,楊兵.基于FPGA的Sobel算子并行計算研究[J].現(xiàn)代電子技術(shù),2005,28(9):50-51.
[6] 李明,趙勛杰,毛偉民.Sobel邊緣檢測的FPGA實現(xiàn)[J]. 現(xiàn)代電子技術(shù),2009,16:44-46.
[7] 杜勇,劉帝英.Matlab在FPGA設(shè)計中的應(yīng)用[J].電子工程師,2007,33(1):9211.