文獻(xiàn)標(biāo)識碼: B
文章編號: 0258-7998(2011)08-0026-04
邊緣檢測是圖像處理,、計算機(jī)視覺的基礎(chǔ)內(nèi)容;是圖像分析與識別的重要環(huán)節(jié),;是目標(biāo)檢測,、圖像分割所依賴的重要特征。在 PC機(jī)上,,MATLAB是圖像處理的強(qiáng)大工具,,如何將成熟的算法轉(zhuǎn)移到嵌入式系統(tǒng)上實(shí)現(xiàn)是急需解決的問題。在實(shí)時圖像處理中,,用Sobel算子進(jìn)行物體的邊緣檢測是經(jīng)常用到的算法, 由于對處理速度要求較高且算法處理的數(shù)據(jù)量較大,,用一般的軟件實(shí)現(xiàn)會比較慢, 無法達(dá)到實(shí)時系統(tǒng)的要求。而使用FPGA芯片, 用硬件實(shí)現(xiàn)對底層的圖像預(yù)處理可提高圖像處理的速度, 滿足系統(tǒng)實(shí)時要求,。FPGA技術(shù)的關(guān)鍵就是利用強(qiáng)有力的設(shè)計工具以縮短開發(fā)周期,,提高器件資源利用率,提供綜合器的選擇(例如在最佳速度和設(shè)計規(guī)模之間做出選擇),。隨著FPGA 芯片技術(shù)的進(jìn)步, 其價格逐步降低,而性能迅速增強(qiáng), 這為使用 FPGA 芯片搭建圖像處理平臺提供了可能[1],。
1 Sobel邊緣檢測算法
Sobel算法是一種較成熟的微分邊緣檢測算法,它計算簡單,,且能產(chǎn)生較好的檢測效果, 對噪聲具有平滑作用, 可以提供較為精確的邊緣方向信息[2],。
Sobel 邊緣檢測算子使用兩個方向算子(垂直算子和水平算子),如圖1所示,。其原理是分別用這兩個算子對圖像進(jìn)行卷積運(yùn)算,,得到兩個矩陣,再求這兩個矩陣對應(yīng)位置的兩個數(shù)的均方根,,得到一個新的矩陣,,即為灰度圖像矩陣中各個像素點(diǎn)的梯度值。最后將梯度值與門限T進(jìn)行比較,,當(dāng)梯度值≥T時,,規(guī)定該點(diǎn)的灰度值為255,,反之為0。
根據(jù)Sobel算子邊緣檢測的原理可得出如圖2所示的Sobel邊緣檢測算法框圖,。對一幅圖像進(jìn)行Sobel邊緣檢測時,,首先要利用Sobel算子計算出水平梯度和垂直梯度,這涉及到卷積運(yùn)算,。然后再把兩個方向的梯度結(jié)合起來,,這就涉及到均方根運(yùn)算,,最后進(jìn)行門限處理來判斷圖像邊緣并輸出邊緣檢測結(jié)果,,這部分可通過編寫Verilog HDL代碼實(shí)現(xiàn)[3]。
2 Sobel 邊緣檢測的硬件實(shí)現(xiàn)
Sobel邊緣檢測的硬件實(shí)現(xiàn)系統(tǒng)應(yīng)包含梯度計算模塊和門限處理模塊,,其中梯度計算模塊可分為圖像行緩沖模塊和卷積計算模塊,。此外,各個模塊功能的實(shí)現(xiàn)可通過調(diào)用 Quartus II軟件提供的各種宏功能模塊(Megafunctions)來實(shí)現(xiàn),,如圖3所示,。
2.1 圖像行緩沖模塊器
梯度計算模塊主要完成兩個Sobel算子分別與圖像像素矩陣(3×3窗口)的卷積運(yùn)算。首先要構(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也能實(shí)現(xiàn)同樣功能,。
altshift_taps宏模塊是一個可配置的、具有抽頭(Taps)輸出的移位寄存器,,每個抽頭在移位寄存器鏈的指定位置輸出數(shù)據(jù),。對MATLAB常用的256×256圖像進(jìn)行Sobel邊緣檢測,altshift_taps模塊參數(shù)設(shè)置為8 bit輸入/8 bit輸出,、3抽頭,,相鄰兩個抽頭相距256個寄存器,如圖4所示,。其中相鄰兩個抽頭的距離是根據(jù)圖像的大小來設(shè)置的,,例如在硬件下載仿真上,TRDB-LTM液晶屏能正常顯示的圖像大小是800×480,,此時抽頭距離應(yīng)設(shè)置為800,。
2.2 卷積計算模塊
卷積計算模塊是為了得到水平、垂直兩個方向的梯度值,,要實(shí)現(xiàn)卷積運(yùn)算需要做大量的乘法和加法運(yùn)算,。如果采用以往分立的D觸發(fā)器和加法器以及乘法器來完成[5],,但其結(jié)構(gòu)復(fù)雜。本文通過調(diào)用 Quartus II軟件提供的宏功能模塊中的可編程乘加器 altmult_add和可編程多路并行加法器 parallel_add來實(shí)現(xiàn),。
卷積運(yùn)算的具體實(shí)現(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)用浮點(diǎn)平方根altfp_sqrt模塊來計算這兩個數(shù)據(jù)的均方根,,即得到3×3 窗口中心點(diǎn)像素的梯度值,,該模塊的參數(shù)設(shè)置如圖7所示。該方法可以保證每個周期輸出一個像素點(diǎn)的Sobel 梯度值,。此外,,所用到的這些模塊可以根據(jù)系統(tǒng)設(shè)計需求靈活選用[6]。
2.3 門限處理模塊
門限處理模塊編寫的Verilog HDL代碼實(shí)現(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 軟件仿真和分析
為了更加直觀地驗(yàn)證Sobel 邊緣檢測的FPGA硬件實(shí)現(xiàn)效果,,本文采用 MATLAB 和 Modelsim 進(jìn)行混合仿真[7],,并與Sobel 邊緣檢測的MATLAB實(shí)現(xiàn)進(jì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%的邏輯單元,,剩余的資源可以用來實(shí)現(xiàn)更復(fù)雜的功能,。
3.2 Modelsim測試
在Modelsim中編寫測試文件,并存儲檢測到的邊緣數(shù)據(jù),。系統(tǒng)仿真的時鐘信號設(shè)為50 MHz,,處理一幅256×256的8 bit圖像, 所需時間為1.3 ms,則每秒可處理圖像為770幅, 達(dá)到了實(shí)時系統(tǒng)的要求, 解決了普通計算機(jī)運(yùn)算需時長的問題,。
3.3 MATLAB處理
最后將Modelsim存儲的數(shù)據(jù)經(jīng)過MATLAB處理,,得到邊緣圖像,。圖10是閾值為150時lena圖像的仿真情況。
3.4 仿真結(jié)果分析
由圖10可知,,(a)是原始圖像,,(b)是Sobel 邊緣檢測的MATLAB實(shí)現(xiàn),(c)是Sobel 邊緣檢測的FGPA實(shí)現(xiàn),。比較(b)和(c)可以看出,,在邊緣檢測效果方面,硬件時序仿真結(jié)果和MATLAB處理結(jié)果是一致的,。這是因?yàn)樵紙D像也是采用8 bit定點(diǎn)存儲格式,,所以沒有量化精度的損失,即該設(shè)計取得了很好的邊緣檢測效果,。
4 Sobel邊緣檢測的FPGA應(yīng)用
4.1 開發(fā)環(huán)境
開發(fā)環(huán)境的硬件驗(yà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板進(jìn)行處理,,并在TRDB-LTM液晶屏上顯示。
4.3 系統(tǒng)仿真結(jié)果
該系統(tǒng)可以調(diào)整曝光值和閾值,,選擇是否鏡像,,控制顯示的圖像為彩色模式、灰階模式或者Sobel邊緣檢測模式,。圖12,、圖13的四幅圖像依次為彩色模式、灰階模式和Sobel邊緣檢測模式下當(dāng)閾值分別為3和96時的圖像,。
從仿真結(jié)果及實(shí)驗(yàn)所得到的圖像來看, 該系統(tǒng)較好地完成了Sobel 算子邊緣檢測的任務(wù),。實(shí)驗(yàn)結(jié)果表明,使用 FPGA 器件能較為準(zhǔn)確地檢測出有用的邊緣信息,,即能較好地完成圖像處理的邊緣檢測工作,。
該設(shè)計利用可編程的FPGA模塊完成Sobel 邊緣檢測的硬件設(shè)計。該方法既避免了自己編寫大量程序代碼的繁瑣,,又獲得了很好的綜合和實(shí)現(xiàn)結(jié)果,。在系統(tǒng)構(gòu)建時,各功能模塊具有良好的移植性和系統(tǒng)擴(kuò)展性,。且使用的邏輯門個數(shù)少,,占用很少系統(tǒng)資源,可以在FPGA 上完成更多更復(fù)雜的圖像處理工作,,為FPGA 單芯片圖像處理系統(tǒng)的實(shí)現(xiàn)提供了條件,。
參考文獻(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仿真與實(shí)現(xiàn)[J].現(xiàn)代電子設(shè)計,2009(8):109-111.
[5] 艾揚(yáng)利,,楊兵.基于FPGA的Sobel算子并行計算研究[J].現(xiàn)代電子技術(shù),,2005,28(9):50-51.
[6] 李明,,趙勛杰,,毛偉民.Sobel邊緣檢測的FPGA實(shí)現(xiàn)[J]. 現(xiàn)代電子技術(shù),2009,,16:44-46.
[7] 杜勇,,劉帝英.Matlab在FPGA設(shè)計中的應(yīng)用[J].電子工程師,2007,,33(1):9211.