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