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