文獻(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)作如下簡(jiǎn)化:
需要重復(fù)地計(jì)算圖像中每個(gè)像素位的導(dǎo)數(shù)幅值。但是,注意到環(huán)繞圖像邊緣的像素點(diǎn)并沒有一個(gè)完整的相鄰像素組來計(jì)算偏導(dǎo)數(shù)和導(dǎo)數(shù),所以要對(duì)這些像素進(jìn)行單獨(dú)處理。最簡(jiǎn)單的方法就是把圖像中邊緣像素點(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í)間長(zhǎng)的問題。解放控制單元去實(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.