《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于Sobel算法圖像邊緣檢測(cè)的FPGA實(shí)現(xiàn)
基于Sobel算法圖像邊緣檢測(cè)的FPGA實(shí)現(xiàn)
2016年電子技術(shù)應(yīng)用第10期
杜正聰1,寧龍飛2
1.攀枝花學(xué)院 電氣信息工程學(xué)院,四川 攀枝花617000;2.西華大學(xué) 機(jī)械工程學(xué)院,四川 成都610039
摘要: 針對(duì)嵌入式軟件無法滿足數(shù)字圖像實(shí)時(shí)處理速度問題,提出用硬件加速器的思想,通過FPGA實(shí)現(xiàn)Sobel邊緣檢測(cè)算法。通過乒乓操作、并行處理數(shù)據(jù)和流水線設(shè)計(jì),大大提高算法的處理速度。采用模塊的硬件設(shè)計(jì),保證了系統(tǒng)的可移植性和系統(tǒng)的擴(kuò)展性。最后使用Verilog HDL編程實(shí)現(xiàn)算法處理,并用Modelsim和MATLAB進(jìn)行了仿真和驗(yàn)證。
中圖分類號(hào): TN911.73;TP391.7
文獻(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.
Image edge detection based on Sobel algorithm in FPGA implementation
Du Zhengcong1,Ning Longfei2
1.Electrical Information Engineering College,Panzhihua University,Panzhihua 617000,China; 2.School of Mechanical Engineering,Xihua University,Chengdu 610039,China
Abstract: Aiming at the problem that embedded software can′t meet the digital image real-time processing speed,this thesis puts forward the idea of using hardware accelerators, that is, using FPGA hardware to implement Sobel edge detection algorithm. Through Ping-pong operation,parallel processing data and pipeline design, the processing speed of the algorithm is greatly improved. The hardware design of module ensures the portability and scalability of the system. Finally, this thesis applies Verilog HDL programming to realize the algorithm processing and uses Modelsim and MATLAB to make simulation and verification.
Key words : FPGA;Sobel edge detection;hardware accelerators

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]

     ck6-gs1-s1.gif

    把每個(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ì)算公式如下:

     ck6-gs1.gif

    由于開平方和平方函數(shù)都是單調(diào)的,實(shí)際計(jì)算幅度的最大值、最小值與近似以后計(jì)算的最大值、最小值發(fā)生在圖像的同一個(gè)地方。并且,與計(jì)算平方和開平方相比,計(jì)算絕對(duì)值所用的硬件資源少得多。若要找到導(dǎo)數(shù)幅值的最大值和最小值,對(duì)式(1)作如下簡(jiǎn)化:

    ck6-gs2.gif

    需要重復(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)。

ck6-t1.gif

    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í)處理圖。

ck6-t2.gif

    圖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)。

ck6-t3.gif

    以實(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)圖。

ck6-t4.gif

3 系統(tǒng)仿真和結(jié)果分析

    本文采用600×400的灰度圖像作為研究對(duì)象,仿真和驗(yàn)證結(jié)果如圖5所示。

ck6-t5.gif

    通過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.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。