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