文獻(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等作為處理器,,通過(guò)嵌入式軟件來(lái)處理信息,,但隨著待處理信息量越來(lái)越大,算法復(fù)雜度越來(lái)越高,,單核處理器處理速度已不能滿足某些系統(tǒng)的需求,。
本文在研究Sobel算法[3]的基礎(chǔ)上,針對(duì)嵌入式軟件無(wú)法滿足實(shí)時(shí)數(shù)據(jù)處理速度的要求,,引入硬件加速器的思想,,采用RAM+FPGA硬件結(jié)構(gòu),通過(guò)嵌入式軟件提供從機(jī)接口,,控制加速器進(jìn)行工作,,硬件加速器(FPGA)通過(guò)模塊化設(shè)計(jì),采用流水線設(shè)計(jì)和乒乓操作大幅提高實(shí)時(shí)處理數(shù)據(jù)速度,,實(shí)現(xiàn)圖像的邊緣檢測(cè),。從機(jī)接口一般通過(guò)嵌入式軟件讀寫(xiě)寄存器來(lái)完成。
1 邊緣檢測(cè)和Sobel算法
邊緣檢測(cè)是分析視頻和圖像的重要方法,,主要檢測(cè)和確定圖像在哪些區(qū)域上亮度發(fā)生突變,,這些亮度突變的區(qū)域通常就是物體的邊緣。
以灰度圖像為例,,分辨率為M×N的圖像由M×N個(gè)像素組成,。Sobel 檢測(cè)法把中心像素點(diǎn)和離它最近的8個(gè)像素點(diǎn)每個(gè)乘以一個(gè)系數(shù)后相加,類(lèi)似卷積的過(guò)程來(lái)估計(jì)每個(gè)像素點(diǎn)x,、y方向上的導(dǎo)數(shù)值,。該系數(shù)通常用一個(gè)卷積表(Convolution Mask)來(lái)表示。分別用于計(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ì)算公式如下:
由于開(kāi)平方和平方函數(shù)都是單調(diào)的,,實(shí)際計(jì)算幅度的最大值,、最小值與近似以后計(jì)算的最大值、最小值發(fā)生在圖像的同一個(gè)地方,。并且,,與計(jì)算平方和開(kāi)平方相比,計(jì)算絕對(duì)值所用的硬件資源少得多,。若要找到導(dǎo)數(shù)幅值的最大值和最小值,,對(duì)式(1)作如下簡(jiǎn)化:
需要重復(fù)地計(jì)算圖像中每個(gè)像素位的導(dǎo)數(shù)幅值。但是,,注意到環(huán)繞圖像邊緣的像素點(diǎn)并沒(méi)有一個(gè)完整的相鄰像素組來(lái)計(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ì)上是通過(guò)增加運(yùn)算并行性達(dá)到加速的目的,,常常采用硬件復(fù)制和流水線的方法。
邊緣檢測(cè)加速器系統(tǒng)的原理框圖如圖1所示,。視頻或圖像數(shù)字信號(hào)通過(guò) I/O 控制器輸入,,保存在存儲(chǔ)器中;在RAM處理器控制下運(yùn)行的硬件加速器,,讀入存儲(chǔ)器中存儲(chǔ)的幀圖像(數(shù)據(jù)),,并進(jìn)行邊緣檢測(cè)算法實(shí)現(xiàn),最后將得到相應(yīng)的導(dǎo)數(shù)圖像寫(xiě)入存儲(chǔ)器,。在實(shí)際應(yīng)用中,,選取硬件加速器對(duì)時(shí)耗大的算法進(jìn)行加速,大大降低其他處理器(如 DSP,、ARM 等)的負(fù)擔(dān),。
I/O控制器和加速器通過(guò)DMA(Direct Memory Access)方式直接發(fā)起對(duì)內(nèi)存的訪問(wèn)而不通過(guò)處理器,大大加快訪問(wèn)內(nèi)存的速度,。為避免多個(gè)設(shè)備同時(shí)訪問(wèn)內(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)硬件并行處理信息,;通過(guò)流水線設(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ù)流和控制流分開(kāi)進(jìn)行,,這樣在設(shè)計(jì)數(shù)據(jù)流時(shí)就不必在意數(shù)據(jù)何時(shí)輸入何時(shí)輸出的問(wèn)題,,而把這些問(wèn)題轉(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,,通過(guò)總線分時(shí)復(fù)用,,分別從memory取數(shù)據(jù),放置32 bit*_row_reg寄存器,,為減少產(chǎn)生無(wú)效數(shù)據(jù),,增加硬件設(shè)計(jì)的復(fù)雜性,等待數(shù)據(jù)分別裝滿*_row_reg寄存器,,才開(kāi)始移位計(jì)算Sobel算子結(jié)果,,這就造成移位時(shí)不能寫(xiě)入數(shù)據(jù),寫(xiě)入數(shù)據(jù)時(shí)不能移位,,產(chǎn)生大量的等待時(shí)間,。本文通過(guò)插入*_row移位寄存器,把寫(xiě)數(shù)據(jù)和移位分開(kāi)處理,,實(shí)現(xiàn)系統(tǒng)的全線流水,。
對(duì)于Sobel算法單元,為了節(jié)約資源和提高處理速度,,有些設(shè)計(jì)采用分布式算法,,利用查找表代替乘法器進(jìn)行乘法運(yùn)算[5],,這樣無(wú)法做到對(duì)任意隨機(jī)數(shù)據(jù)的處理。本文為避免使用乘法器,,通過(guò)移位實(shí)現(xiàn)乘法運(yùn)算,。數(shù)據(jù)流水進(jìn)入產(chǎn)生的無(wú)效數(shù)據(jù)設(shè)置為左邊界,數(shù)據(jù)流水排除的無(wú)效數(shù)據(jù)設(shè)置為右邊界,,頂行和末行為無(wú)效行設(shè)置上下邊界,。圖4為Sobel算法架構(gòu)圖。
3 系統(tǒng)仿真和結(jié)果分析
本文采用600×400的灰度圖像作為研究對(duì)象,,仿真和驗(yàn)證結(jié)果如圖5所示,。
通過(guò)MATLAB將灰度圖片imag1.bmp(任意格式)處理轉(zhuǎn)換成imag.txt文件,存儲(chǔ)在Memory中,,用Verilog實(shí)現(xiàn)Sobel算法,,Modelsim仿真數(shù)據(jù)生成data.txt文件,再利用MATLAB將data.txt文件通過(guò)門(mén)限處理轉(zhuǎn)換成圖片tes.bmp,。用MATLAB直接調(diào)用Sobel函數(shù)處理初始灰度模式圖片,,生成圖片imag2.bmp,比較兩圖片,,驗(yàn)證FPGA處理的正確性,。
從仿真結(jié)果和實(shí)驗(yàn)所得圖像來(lái)看,該設(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)的問(wèn)題,。解放控制單元去實(shí)現(xiàn)更復(fù)雜的控制和功能。
4 結(jié)論
本文基于FPGA引用硬件加速器思想,,解決嵌入式軟件無(wú)法滿足信息的實(shí)時(shí)性處理問(wèn)題,,用Verilog編程硬件實(shí)現(xiàn)圖像數(shù)字信號(hào)讀寫(xiě)、Sobel算法實(shí)現(xiàn),,完成圖像邊緣檢測(cè),;通過(guò)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] 何俊峰.基于視覺(jué)原理的圖像邊緣檢測(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.