李芳,沈培,溫娜,劉慧迪,辛鋒
基于Sobel邊緣檢測(cè)算法的FPGA硬件實(shí)現(xiàn)
李芳,沈培,溫娜,劉慧迪,辛鋒
(萍鄉(xiāng)學(xué)院 機(jī)械電子工程學(xué)院,江西 萍鄉(xiāng) 337000)
針對(duì)MATLAB對(duì)數(shù)字圖像實(shí)時(shí)處理速度慢的問(wèn)題,提出采用硬件并行計(jì)算的思想,通過(guò)FPGA硬件實(shí)現(xiàn)Sobel邊緣檢測(cè)算法。首先對(duì)OV5640攝像頭采集到的實(shí)時(shí)圖像進(jìn)行彩色圖像轉(zhuǎn)灰度處理,再對(duì)輸入的灰度圖像進(jìn)行高斯濾波處理,接著對(duì)濾波后的灰度圖像進(jìn)行二值化,再使用Sobel算法對(duì)二值化圖像實(shí)現(xiàn)圖像邊緣檢測(cè),傳送至SDRAM存儲(chǔ)器進(jìn)行緩存,最后通過(guò)VGA實(shí)時(shí)顯示圖像。通過(guò)圖像邊緣檢測(cè)的FPGA硬件處理和MATLAB軟件處理的效果對(duì)比,結(jié)果表明FPGA硬件實(shí)現(xiàn)的邊緣檢測(cè)算法效果更佳。
邊緣檢測(cè);FPGA;MATLAB;VGA顯示
計(jì)算機(jī)視覺(jué)廣泛應(yīng)用于無(wú)人駕駛、醫(yī)療系統(tǒng)以及航空航天系統(tǒng)等場(chǎng)景[1],而邊緣檢測(cè)是計(jì)算機(jī)視覺(jué)中最基本的問(wèn)題。在傳統(tǒng)的圖像邊緣檢測(cè)系統(tǒng)中,大多使用DSP與ARM處理器[2],但當(dāng)前圖像數(shù)據(jù)量不斷增大,運(yùn)用嵌入式軟件處理海量信息速度卻較慢,跟不上計(jì)算機(jī)視覺(jué)的發(fā)展要求。現(xiàn)場(chǎng)可編程邏輯陣列(Field Programmable Gate Array,F(xiàn)PGA)的高速發(fā)展,使得采用FPGA芯片搭建圖像處理硬件平臺(tái)成為圖像處理的發(fā)展趨勢(shì)?;贔PGA設(shè)計(jì)的圖像邊緣檢測(cè)電子系統(tǒng)具有功耗低、抗噪能力較強(qiáng)、可靠性高且圖像的邊緣定位較為精確等優(yōu)點(diǎn)[3]?;诖耍疚脑谘芯縎obel算法[4]的基礎(chǔ)上,針對(duì)軟件對(duì)圖像處理速度慢的問(wèn)題,引入了硬件并行計(jì)算的思想,設(shè)計(jì)了一種基于FPGA的實(shí)時(shí)圖像邊緣檢測(cè)系統(tǒng),該系統(tǒng)集圖像數(shù)據(jù)采集、存儲(chǔ)、算法處理、顯示等功能于一體。該設(shè)計(jì)可以廣泛應(yīng)用于嵌入式設(shè)計(jì)的圖像邊緣檢測(cè)系統(tǒng),具有一定的實(shí)際應(yīng)用價(jià)值。
邊緣檢測(cè)的實(shí)質(zhì)是一種濾波器。物體的邊緣通常都具有變化的像素值以反映物體與背景的差異,或者兩個(gè)物體之間的差異。常用的邊緣檢測(cè)算法一般是以初始圖像的灰度值為參考,比較圖像的每個(gè)像素的某個(gè)區(qū)域內(nèi)灰度值的變化,標(biāo)識(shí)數(shù)字圖像中灰度變化明顯的點(diǎn),在保留圖像重要結(jié)構(gòu)信息的同時(shí),可以剔除認(rèn)為不相關(guān)的信息,并利用邊緣一階或二階導(dǎo)數(shù)的規(guī)律來(lái)檢測(cè)邊緣。
本設(shè)計(jì)主要采用Sobel算子檢測(cè)圖像的水平邊緣與垂直邊緣。Sobel算子是一組用于邊緣檢測(cè)的簡(jiǎn)單高效方向算子,相較于Canny算子在處理灰度漸變或噪聲較多等問(wèn)題上具有較好的效果。且其更注重邊緣檢測(cè)效率,邊緣檢測(cè)的效果更好[5]。Sobel卷積因子Gx和Gy如圖1所示。
圖1 Sobel卷積因子Gx(左)和Gy(右)
x與y分別對(duì)應(yīng)待處理的目標(biāo)圖像在X軸和Y軸方向圖像窗口的梯度,X和Y方向各用一個(gè)卷積因子,兩個(gè)卷積因子組合起來(lái)構(gòu)成一個(gè)梯度算子,其公式如式1所示。
上式中A是目標(biāo)像素點(diǎn)與周?chē)袼攸c(diǎn)構(gòu)成的相應(yīng)3*3的待處理像素塊,假設(shè)目標(biāo)像素點(diǎn)P0與周?chē)袼攸c(diǎn)構(gòu)成的待處理像素塊,如圖2所示。
設(shè)閾值為T(mén),若>T,則將像素點(diǎn)置為黑色;否則,將像素點(diǎn)置為白色。使用Sobel算子根據(jù)像素點(diǎn)上下、左右鄰點(diǎn)灰度的加權(quán)差,在邊緣處達(dá)到極值這一現(xiàn)象來(lái)檢測(cè)邊緣,獲得數(shù)字圖像的一階梯度。Sobel算子對(duì)噪聲具有平滑抑制作用,在邊緣檢測(cè)中可以呈現(xiàn)出較好的效果,同時(shí)隨著數(shù)據(jù)量的減少,呈現(xiàn)出來(lái)的效果將會(huì)更佳,因此,Sobel算子適用于對(duì)精度要求較低的場(chǎng)景中。
圖2 目標(biāo)像素塊
系統(tǒng)主控FPGA芯片為Intel公司Cyclone IV E系列的EP4CE10F1708N型號(hào),OV5640作為CMOS圖像傳感器采集數(shù)字圖像信息,SDRAM作為存儲(chǔ)器緩存圖像數(shù)據(jù),最后通過(guò)GM7123 VGA視頻模塊接FPGA開(kāi)發(fā)板及VGA接口連接至顯示器顯示,圖像邊緣檢測(cè)整個(gè)硬件系統(tǒng)連接圖如圖3所示。
圖3 圖像邊緣檢測(cè)系統(tǒng)硬件圖
系統(tǒng)的軟件設(shè)計(jì)以Altera公司的Quartues II為開(kāi)發(fā)工具,以Verilog HDL硬件描述語(yǔ)言來(lái)進(jìn)行各個(gè)模塊的編程。首先通過(guò)配置接口采用SCCB協(xié)議的CMOS攝像頭OV5640獲取圖像信息,獲取的彩色圖像信息將會(huì)傳送至FPGA中的RGB轉(zhuǎn)灰度模塊進(jìn)行彩色圖像灰度處理。其次,灰度處理后的圖像將接入高斯濾波模塊,通過(guò)高斯濾波可消除數(shù)字化過(guò)程中噪聲對(duì)圖像的影響;消除噪聲后的灰度圖像將通過(guò)單bit模塊轉(zhuǎn)為二值圖像,即像素點(diǎn)矩陣中的每個(gè)像素點(diǎn)的灰度值為0或255[6]。再次,將轉(zhuǎn)換好的二值圖像通過(guò)Sobel算子進(jìn)行邊緣檢測(cè),得出的邊緣信息會(huì)被發(fā)送給圖像緩存模塊,其中設(shè)有兩個(gè)FIFO進(jìn)行乒乓操作來(lái)臨時(shí)緩存讀寫(xiě)數(shù)據(jù),可以解決數(shù)據(jù)的跨時(shí)域問(wèn)題。最后通過(guò)VGA顯示驅(qū)動(dòng)模塊讀取并實(shí)時(shí)顯示FIFO B內(nèi)的完整圖像數(shù)據(jù)[7]。圖像邊緣采集系統(tǒng)框架結(jié)構(gòu)如圖4所示。
在進(jìn)行邊緣檢測(cè)算法之前,首先要將彩色圖像轉(zhuǎn)灰度圖像[8]。OV5640攝像頭采集到的實(shí)時(shí)視頻圖像數(shù)據(jù)是RGB565格式,因此,需要先將RGB565信號(hào)轉(zhuǎn)成灰度圖像,也就是3個(gè)通道(RGB)轉(zhuǎn)換成1個(gè)通道,即RGB轉(zhuǎn)灰度模塊。彩色圖像是指由多種顏色組成的圖像,其中每種顏色都由紅(R)、綠(G)、藍(lán)(B)三基色按比例混合而成,要想顯示一個(gè)像素的顏色需要3個(gè)BYTE數(shù)據(jù)的R、G、B,比例關(guān)系為R:G:B=5:6:5,即R、G、B分別是5、6、5來(lái)表示一個(gè)像素。
灰度圖像是指只有亮度差別,沒(méi)有顏色差別,是表現(xiàn)圖像明暗的關(guān)鍵度量,每個(gè)像素只有一個(gè)采樣顏色的圖像,這類(lèi)圖像通常顯示為從最暗的黑色灰度(0)到最亮的白色灰度(255),共256級(jí)灰度,沒(méi)有彩色信息。其表示效果如圖5所示。
此外,對(duì)大部分計(jì)算機(jī)視覺(jué)應(yīng)用來(lái)說(shuō),圖像的精度不是一個(gè)特別敏感的問(wèn)題,因此,可以通過(guò)將浮點(diǎn)運(yùn)算轉(zhuǎn)換為整數(shù)運(yùn)算、位移操作和降低精度來(lái)減少計(jì)算量,從而優(yōu)化轉(zhuǎn)換速度,通常使用8位精度,彩色圖像RGB565格式轉(zhuǎn)換成灰度圖像精度系數(shù)為8,如公式2所示。
根據(jù)這個(gè)公式,依次讀取每個(gè)像素點(diǎn)的R、G、B值進(jìn)行計(jì)算灰度值,將灰度值賦值給新圖像相應(yīng)位置,所有像素點(diǎn)遍歷一遍后完成轉(zhuǎn)換。使用16位數(shù)據(jù)作為圖片數(shù)據(jù),通過(guò)串口發(fā)送到FPGA開(kāi)發(fā)板,然后通過(guò)算法轉(zhuǎn)換實(shí)現(xiàn)數(shù)據(jù)的處理。彩色圖像灰度處理模塊的FPGA硬件實(shí)現(xiàn)的詳細(xì)端口如圖6所示。
高斯濾波是一種線性平滑濾波,主要依據(jù)高斯函數(shù)形狀選擇權(quán)值,通俗來(lái)說(shuō),就是對(duì)圖像進(jìn)行加權(quán)平均的過(guò)程。每一個(gè)像素點(diǎn)的像素值都是由其本身及領(lǐng)域內(nèi)其他像素值經(jīng)過(guò)加權(quán)平均計(jì)算后得到的結(jié)果。高斯濾波模塊負(fù)責(zé)圖像數(shù)據(jù)的噪聲濾波,消除圖像數(shù)字化時(shí)所混入的噪聲,提取圖片對(duì)象的特征作為圖像識(shí)別的特征模式,高斯濾波3*3算法的模板如下圖7所示。
圖7 高斯模糊3*3算法的模板
模板中間點(diǎn)是當(dāng)前像素點(diǎn),權(quán)值為4,周?chē)?個(gè)像素點(diǎn)的系數(shù)為1和2。在3*3模塊中,將每點(diǎn)的權(quán)值與其像素值相乘后可以得到9個(gè)數(shù)值,對(duì)這9個(gè)數(shù)值進(jìn)行求和操作,最后除以系數(shù)和16,得到的結(jié)果則作為濾波后的像素值。高斯濾波處理模塊的FPGA硬件實(shí)現(xiàn)的詳細(xì)端口如圖8所示。其中,該處理模塊調(diào)用了Quartus II里面的Line Buffer和PARALLEL_ADD的IP核。
圖8 高斯濾波模塊接口信號(hào)
為了做邊緣檢測(cè),需要將高斯濾波處理后的灰度圖像數(shù)據(jù)轉(zhuǎn)換為單bit數(shù)據(jù),也就是進(jìn)行二值化,將圖像轉(zhuǎn)換成二值圖像(Binary image)。二值圖像中的像素點(diǎn)只能取到0或255兩種灰度值,顯示出來(lái)的效果即為黑白圖像。如圖9所示。
圖9 二值化圖示例
二值圖像占據(jù)存儲(chǔ)空間小,每個(gè)像素點(diǎn)只需要占據(jù)1bit,即對(duì)于相同尺寸的圖像,二值圖像保存的信息更少。二值圖像通過(guò)Sobel算子處理得到圖像邊緣,其清晰度則取決于調(diào)節(jié)閾值value。若像素值>value,則取為白色,否則取為黑色。從而實(shí)現(xiàn)圖像的二值化,使整個(gè)圖像呈現(xiàn)黑白效果。二值化處理模塊的FPGA硬件實(shí)現(xiàn)的詳細(xì)端口如圖10所示。
圖10 二值化模塊接口信號(hào)
乒乓操作是一個(gè)經(jīng)常應(yīng)用于數(shù)據(jù)流控制的處理技術(shù),通過(guò)輸入選擇單元和輸出選擇單元,按照節(jié)拍、相互配合地切換,將經(jīng)過(guò)緩沖的數(shù)據(jù)流沒(méi)有停頓地送到數(shù)據(jù)處理單元進(jìn)行運(yùn)算處理。乒乓操作模塊中的數(shù)據(jù)流是不間斷的,即輸入與輸出數(shù)據(jù)流之間沒(méi)有任何停頓。乒乓操作適用于對(duì)輸入數(shù)據(jù)進(jìn)行流水線式處理的場(chǎng)景,滿足數(shù)據(jù)無(wú)縫緩沖與處理等功能需求。乒乓操作流程如圖11所示。
圖11 乒乓操作流程
由圖11所示,設(shè)計(jì)使用兩個(gè)FIFO(FIFO A和FIFO B)以乒乓操作的方式存儲(chǔ)圖像數(shù)據(jù)。分別用于存儲(chǔ)Sobel算法處理模塊傳來(lái)的圖像數(shù)據(jù)和顯示屏讀取數(shù)據(jù),一幀圖片傳輸完成后,讀寫(xiě)區(qū)域交換,這樣能保證在顯示屏顯示時(shí),能夠顯示一張完整的圖像。如果利用同一片存儲(chǔ)區(qū)域來(lái)存儲(chǔ)圖像,當(dāng)前一幀圖像還沒(méi)有讀取顯示完成,下一幀圖像的數(shù)據(jù)就將該區(qū)域覆蓋,那么顯示屏上的畫(huà)面會(huì)出現(xiàn)拖影現(xiàn)象,兩幀圖像會(huì)交疊在一起。
為了驗(yàn)證本文設(shè)計(jì)的彩色圖像邊緣檢測(cè)系統(tǒng),將FPGA硬件實(shí)現(xiàn)的Sobel算法的圖像邊緣檢測(cè)效果與MATLAB對(duì)Sobel算子的軟件處理效果[9–10]進(jìn)行比較,如圖12所示。圖12(a)為萍鄉(xiāng)學(xué)院?;詹噬瓐D;圖12(b)是MATLAB對(duì)Sobel算子的軟件邊緣檢測(cè)效果;圖12(c)是FPGA對(duì)Sobel算子的硬件實(shí)現(xiàn)邊緣檢測(cè)效果。通過(guò)與MATLAB軟件實(shí)現(xiàn)邊緣檢測(cè)效果相比,F(xiàn)PGA硬件實(shí)現(xiàn)獲得了較多的邊緣信息,系統(tǒng)比較穩(wěn)定,圖像更加精細(xì)清晰,視覺(jué)效果更好。
圖12 彩色原圖及經(jīng)過(guò)MATLAB軟件和FPGA硬件實(shí)現(xiàn)對(duì)比圖
本設(shè)計(jì)以FPGA為主控芯片實(shí)現(xiàn)實(shí)時(shí)彩色圖像邊緣檢測(cè),并用Intel公司Cyclone IV E系列開(kāi)發(fā)板和顯示器實(shí)現(xiàn)邊緣檢測(cè)效果。將CMOS圖像傳感器OV5640采集到實(shí)時(shí)視頻彩色圖像數(shù)據(jù),送到FPGA中,通過(guò)SDRAM緩存Sobel算法處理的數(shù)據(jù),再?gòu)腟DRAM中讀取,最后在VGA設(shè)備上實(shí)時(shí)顯示。本設(shè)計(jì)通過(guò)灰度算法以及二值化算法對(duì)彩色圖像進(jìn)行預(yù)處理操作,在實(shí)現(xiàn)圖像顯示的基礎(chǔ)上優(yōu)化了對(duì)彩色圖像的邊緣檢測(cè)的效果。同時(shí)通過(guò)與MATLAB處理的對(duì)比實(shí)驗(yàn)驗(yàn)證了,基于Sobel邊緣檢測(cè)算法的FPGA硬件實(shí)現(xiàn)系統(tǒng)的穩(wěn)定性和實(shí)時(shí)性,解決了傳統(tǒng)方法中的冗雜性問(wèn)題,降低了系統(tǒng)開(kāi)發(fā)成本。
[1] 何俊峰. 基于視覺(jué)原理的圖像邊緣檢測(cè)算子研究[D]. 武漢: 華中科技大學(xué), 2006.
[2] 孫曉杰, 梁義. 基于雙閾值的圖像邊緣實(shí)時(shí)檢測(cè)系統(tǒng)[J]. 儀表技術(shù)與傳感器, 2019(8): 83–86.
[3] 李亞利. 基于FPGA的實(shí)時(shí)彩色圖像邊緣檢測(cè)系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)分析[J]. 電子設(shè)計(jì)工程, 2019, 27(12): 168–172.
[4] 孫敬成, 王正彥, 張斌, 等. 基于FPGA的Sobel邊緣檢測(cè)算法實(shí)現(xiàn)及VGA顯示[J]. 青島大學(xué)學(xué)報(bào): 工程技術(shù)版, 2019, 34(2): 21–26.
[5] 張棋, 賈方秀, 殷婷婷. 基于改進(jìn)Sobel算法的實(shí)時(shí)圖像邊緣檢測(cè)系統(tǒng)設(shè)計(jì)[J]. 儀表技術(shù)與傳感器, 2018(2): 101–108.
[6] 趙堯,董恩增,于曉. 基于改進(jìn)Sobel算子的實(shí)時(shí)邊緣檢測(cè)系統(tǒng)設(shè)計(jì)與FPGA實(shí)現(xiàn)[J].天津理工大學(xué)學(xué)報(bào), 2017, 33(1): 1–5.
[7] 陳虎, 凌朝東, 張浩, 等. 基于FPGA的實(shí)時(shí)彩色圖像邊緣檢測(cè)算法的實(shí)現(xiàn)[J]. 液晶與顯示, 2015, 30(1): 143–150.
[8] 李營(yíng), 呂兆承, 陳帥, 等. 基于FPGA的VGA圖像顯示及控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].淮南師范學(xué)院學(xué)報(bào), 2019, 21(2): 112–115.
[9] 董云峰. 基于MATLAB的圖像邊緣檢測(cè)方法的研究[J]. 大慶師范學(xué)院學(xué)報(bào), 2018, 38(3): 30–32.
[10] 葉惠嬌, 冉全, 成果. FPGA圖像邊緣檢測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2018, 35(12): 238–302.
FPGA Hardware Implementation Based on Sobel Edge Detection Algorithm
LI Fang, SHEN Pei, WEN Na, LIU Hui-di, XIN Feng
(School of Mechanical and Electronic Engineering, Pingxiang University, Pingxiang Jiangxi 337000, China)
To address the problem of slow real-time processing of digital image by MATLAB, the idea of hardware parallel computing is proposed to implement Sobel edge detection algorithm by FPGA hardware. First, the colored real-time image collected by OV5640 camera is transferred into gray, which then processed with Gaussian filter, and binarized after that. The binarized images go for image edge detection with Sobel algorithm, sent to SDRAM memory for caching. Finally, the images display in real-time through the VGA. By comparing the effect of FPGA hardware processing and MATLAB software processing, the result shows that the edge detection algorithm implemented by FPGA hardware is better.
edge detection; FPGA; MATLAB; VGA display
2021-07-02
萍鄉(xiāng)學(xué)院青年科學(xué)基金(2019D0210);江西省高等學(xué)校大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目(S202010895020);江西省教育廳科學(xué)技術(shù)研究項(xiàng)目(GJJ191154)
李芳(1993—),女,江西萍鄉(xiāng)人,助教,碩士,研究方向:圖像處理,F(xiàn)PGA技術(shù)應(yīng)用
TN386
A
2095-9249(2022)03-0083-04
〔責(zé)任編校:陳楠楠〕
萍鄉(xiāng)學(xué)院學(xué)報(bào)2022年3期