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