文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.10.023
中文引用格式: 杜正聰,寧龍飛. 基于Sobel算法圖像邊緣檢測的FPGA實現[J].電子技術應用,2016,42(10):89-91,95.
英文引用格式: Du Zhengcong,Ning Longfei. Image edge detection based on Sobel algorithm in FPGA implementation[J].Application of Electronic Technique,2016,42(10):89-91,95.
0 引言
圖像的邊緣檢測是數字圖像處理領域的一項關鍵技術,是圖像分割、運動檢測、目標跟蹤、人臉識別等技術的基礎[1]。隨著電子信息技術的高速發展,圖像的邊緣檢測在航天、工業、醫學、軍事等領域有著廣泛的應用和發展[2]。在這些應用中,通常選用ARM和DSP等作為處理器,通過嵌入式軟件來處理信息,但隨著待處理信息量越來越大,算法復雜度越來越高,單核處理器處理速度已不能滿足某些系統的需求。
本文在研究Sobel算法[3]的基礎上,針對嵌入式軟件無法滿足實時數據處理速度的要求,引入硬件加速器的思想,采用RAM+FPGA硬件結構,通過嵌入式軟件提供從機接口,控制加速器進行工作,硬件加速器(FPGA)通過模塊化設計,采用流水線設計和乒乓操作大幅提高實時處理數據速度,實現圖像的邊緣檢測。從機接口一般通過嵌入式軟件讀寫寄存器來完成。
1 邊緣檢測和Sobel算法
邊緣檢測是分析視頻和圖像的重要方法,主要檢測和確定圖像在哪些區域上亮度發生突變,這些亮度突變的區域通常就是物體的邊緣。
以灰度圖像為例,分辨率為M×N的圖像由M×N個像素組成。Sobel 檢測法把中心像素點和離它最近的8個像素點每個乘以一個系數后相加,類似卷積的過程來估計每個像素點x、y方向上的導數值。該系數通常用一個卷積表(Convolution Mask)來表示。分別用于計算x和y方向導數值的Sobel卷積表Dx和Dy如下所示[4]:
把每個像素值分別乘以卷積表中對應的數,再把相乘得到的9個數相加就得到了x方向和y方向的偏導數值Dx和Dy。然后,利用這兩個偏導數值計算中心像素點的導數。
計算公式如下:
由于開平方和平方函數都是單調的,實際計算幅度的最大值、最小值與近似以后計算的最大值、最小值發生在圖像的同一個地方。并且,與計算平方和開平方相比,計算絕對值所用的硬件資源少得多。若要找到導數幅值的最大值和最小值,對式(1)作如下簡化:
需要重復地計算圖像中每個像素位的導數幅值。但是,注意到環繞圖像邊緣的像素點并沒有一個完整的相鄰像素組來計算偏導數和導數,所以要對這些像素進行單獨處理。最簡單的方法就是把圖像中邊緣像素點的導數值|D|設置為0。
2 Sobel邊緣檢測法的硬件實現
2.1 Sobel加速器結構
硬件加速實質上是通過增加運算并行性達到加速的目的,常常采用硬件復制和流水線的方法。
邊緣檢測加速器系統的原理框圖如圖1所示。視頻或圖像數字信號通過 I/O 控制器輸入,保存在存儲器中;在RAM處理器控制下運行的硬件加速器,讀入存儲器中存儲的幀圖像(數據),并進行邊緣檢測算法實現,最后將得到相應的導數圖像寫入存儲器。在實際應用中,選取硬件加速器對時耗大的算法進行加速,大大降低其他處理器(如 DSP、ARM 等)的負擔。
I/O控制器和加速器通過DMA(Direct Memory Access)方式直接發起對內存的訪問而不通過處理器,大大加快訪問內存的速度。為避免多個設備同時訪問內存發生沖突,在系統中引入仲裁器。仲裁器的仲裁策略為:唯一申請者獲得資源。這樣,ARM(CPU)對加速器進行配置,配置待處理數據源地址和目標地址,然后啟動加速器,釋放總線資源;ACC在接收到啟動命令之后,要申請資源,完成算法實現后,用中斷的方式反饋給RAM(CPU),同時釋放資源。
2.2 基于FPGA的硬件加速器
圖像邊緣檢測數據具有數據量大,可并行處理及重復操作等特點,用FPGA可實現硬件并行處理信息;通過流水線設計技術和乒乓操作的架構設計,可以進一步提高實現算法組合邏輯處理速度和系統處理信息的吞吐量,因此FPGA對處理圖像邊緣檢測數據有著天然的優勢。本文采用面向流處理的加速器處理按照順序到達的數據流。
系統基于Altera公司的Cyclone IV系列FPGA,采用從頂向下模塊化設計方法,利用攀巖法建模,具有良好的移植性和系統擴展性。圖2為邊緣檢測實時處理圖。
圖3為硬件加速器模塊設計圖。設計中將系統數據流和控制流分開進行,這樣在設計數據流時就不必在意數據何時輸入何時輸出的問題,而把這些問題轉移到控制流設計階段中去。在控制流設計階段系統地考慮數據流的控制,將使得電路設計更加系統,修改更加方便??刂屏鞯脑O計一般借助于狀態機(FSM)。
以實現分辨率600×400的8 bit灰度圖片為例,系統設計數據總線位寬32 bit,通過總線分時復用,分別從memory取數據,放置32 bit*_row_reg寄存器,為減少產生無效數據,增加硬件設計的復雜性,等待數據分別裝滿*_row_reg寄存器,才開始移位計算Sobel算子結果,這就造成移位時不能寫入數據,寫入數據時不能移位,產生大量的等待時間。本文通過插入*_row移位寄存器,把寫數據和移位分開處理,實現系統的全線流水。
對于Sobel算法單元,為了節約資源和提高處理速度,有些設計采用分布式算法,利用查找表代替乘法器進行乘法運算[5],這樣無法做到對任意隨機數據的處理。本文為避免使用乘法器,通過移位實現乘法運算。數據流水進入產生的無效數據設置為左邊界,數據流水排除的無效數據設置為右邊界,頂行和末行為無效行設置上下邊界。圖4為Sobel算法架構圖。
3 系統仿真和結果分析
本文采用600×400的灰度圖像作為研究對象,仿真和驗證結果如圖5所示。
通過MATLAB將灰度圖片imag1.bmp(任意格式)處理轉換成imag.txt文件,存儲在Memory中,用Verilog實現Sobel算法,Modelsim仿真數據生成data.txt文件,再利用MATLAB將data.txt文件通過門限處理轉換成圖片tes.bmp。用MATLAB直接調用Sobel函數處理初始灰度模式圖片,生成圖片imag2.bmp,比較兩圖片,驗證FPGA處理的正確性。
從仿真結果和實驗所得圖像來看,該設計很好地完成了Sobel算法的邊緣檢測任務,使用RAM+FPGA加速器結構,以50 MHz(實驗仿真使用值)時鐘驅動為例,處理一幅600×400圖像,所需時間為19.2 ms,每秒可處理圖像208幅,滿足實時系統要求,解決單核處理器運算時間長的問題。解放控制單元去實現更復雜的控制和功能。
4 結論
本文基于FPGA引用硬件加速器思想,解決嵌入式軟件無法滿足信息的實時性處理問題,用Verilog編程硬件實現圖像數字信號讀寫、Sobel算法實現,完成圖像邊緣檢測;通過FPGA乒乓操作、并行處理和流水線設計完成數據量大、重復率高的圖像邊緣檢測數據處理,大大提高了系統效率,達到了實時性要求。同時引用模塊化的設計方法,自頂向下利用攀巖法建模,使得設計具有良好的可移植性和系統可擴展性,具有極大的實用價值。
參考文獻
[1] 何俊峰.基于視覺原理的圖像邊緣檢測算子研究[D].武漢:華中科技大學,2006.
[2] Yu Yuanhui,Chang Chinchen.A new edge detection approach based on image context analysis[J].SCI,Image and Vision Computing,2006,24:1090-1102.
[3] 林偉,周劍揚.圖像邊緣檢測高速數字濾波器設計與實現研究[J].現代電子技術,2006(6):26-29.
[4] 吳海彬,何祖恩,李文錦.基于改進Sobel算子的圖像邊緣檢測及其嵌入式實現[J].機床與液壓,2009,37(10):133-136.
[5] 葉敏,周文暉,顧偉康.基于FPGA的實時圖像濾波及邊緣檢測方法[J].傳感技術學報,2007,20(3):623-627.