《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 基于FPGA的Sobel邊緣檢測應(yīng)用
基于FPGA的Sobel邊緣檢測應(yīng)用
來源:電子技術(shù)應(yīng)用2011年第8期
張麗紅1,,2,凌朝東1,,2
1.華僑大學(xué) 信息科學(xué)與工程學(xué)院,,福建 廈門361021; 2.廈門市專用集成電路系統(tǒng)重點(diǎn)實(shí)驗(yàn)室,福建 廈門 361008
摘要: 針對目前數(shù)字圖像處理速度慢的問題, 提出了一種基于 FPGA器件的 Sobel 邊緣檢測實(shí)現(xiàn)方案,。Sobel 邊緣檢測分別在FPGA和MATLAB上仿真實(shí)現(xiàn),,仿真結(jié)果表明,該方案可以大幅提高Sobel 邊緣檢測的速度,,并且獲得了很好的邊緣檢測效果,。最后列舉了一個基于FPGA器件的Sobel邊緣檢測的應(yīng)用實(shí)例,。
關(guān)鍵詞: FPGA Sobel Matlab 邊緣檢測 DE2-70
中圖分類號: TN911.73;TP391.41
文獻(xiàn)標(biāo)識碼: B
文章編號: 0258-7998(2011)08-0026-04
Application of Sobel edge detection based on FPGA
Zhang Lihong1,,2,,Ling Chaodong1,2
1.College of Information Science & Engineering, Huaqiao University, Xiamen 361021,China,; 2.Key Laboratory of ASIC and System of Xiamen,,Xiamen 361008,China
Abstract: Considering the slow speed of recent digital image processing, a new design scheme of Sobel edge detection based on FPGA device was proposed. Sobel edge detection was respectively implemented on MATLAB and FPGA, Simulation result showed that the scheme can greatly increase the speed of Sobel edge detection and acheive a good effect. Finally, an application example of Sobel edge detection based on FPGA device was given.
Key words : Sobel,;MATLAB,;FPGA;edge detection,;DE2-70


    邊緣檢測是圖像處理,、計算機(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 &mu;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&times;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.

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。