南開來,傅超斌
(杭州電子科技大學(xué) 計算機(jī)學(xué)院,浙江 杭州 310018)
嵌入式實時Canny邊緣檢測
南開來,傅超斌
(杭州電子科技大學(xué) 計算機(jī)學(xué)院,浙江 杭州 310018)
基于傳統(tǒng)Canny算子,提出CY68013+FPGA的嵌入式硬件架構(gòu)下的快速實時邊緣檢測算法。主機(jī)通過CY68013 USB接口芯片高速傳輸圖像數(shù)據(jù),F(xiàn)GPA從USB口采集圖像信息,并使用優(yōu)化的Canny算法實現(xiàn)邊緣提取。該算法針對FPGA的特點進(jìn)行了優(yōu)化,包括用模板替代卷積、適當(dāng)?shù)慕谱儞Q、充分利用FPGA的并行特性等,在保持了Canny算子原有的定位準(zhǔn)確、單邊響應(yīng)和信噪比高等優(yōu)點的基礎(chǔ)上,提高了邊緣提取的計算速度,減小了計算延遲,提高了實時性。
CY68013;FPGA;Canny;嵌入式;邊緣檢測
嵌入式的圖像處理在很多領(lǐng)域都具有重要作用,尤其是邊緣提取,但是現(xiàn)有的設(shè)備普遍計算復(fù)雜,等待時間較長,不具備高速實時檢測圖像邊緣的能力,使得生產(chǎn)效率受到了限制。為此,提出一種全新的嵌入式硬件架構(gòu)CY68013+FPGA,以及針對FPGA優(yōu)化的Canny邊緣檢測算法,其可以充分利用USB2.0 高速接口接收圖像和FGPA的并行特性檢測邊緣,大大提高計算速度和實時性,同時解放主機(jī),分擔(dān)主機(jī)的計算壓力。
主機(jī)通過發(fā)送圖像數(shù)據(jù)到現(xiàn)場可編程邏輯門陣列(Field-Programmable Gate Array, FPGA),F(xiàn)PGA對接收到的圖像進(jìn)行處理。為了提高處理的實時性能,選用了通用串行總線(Universal Serial Bus,USB)接口作為數(shù)據(jù)高速傳輸接口,為了簡化USB協(xié)議的設(shè)計,選用了USB協(xié)議處理芯片CY68013。
1.1CY68013(EZ-USBFX2)
CY68013 (EZ-USB FX2)[1]是Cypress半導(dǎo)體公司的新一代高速USB系列,可以用USB2.0最大數(shù)據(jù)傳輸速率傳輸數(shù)據(jù)。
EZ-USB FX2芯片會自動處理大部分的USB協(xié)議[2],用戶只需操作應(yīng)用層數(shù)據(jù)。芯片一共有4個端點,以及4個緩沖區(qū)用于緩存接收或者發(fā)送的數(shù)據(jù)。
自定義主機(jī)端與FPGA端的通信協(xié)議,主機(jī)端和FPGA端通信數(shù)據(jù)共分4種類型:
(1)主機(jī)端寫FPGA端的寄存器;
(2)主機(jī)端讀取FPGA端的寄存器;
(3)主機(jī)端發(fā)送圖片數(shù)據(jù);
(4)主機(jī)端接收圖片數(shù)據(jù)。
系統(tǒng)的整體模型如圖1所示。配置端點2為命令發(fā)送端點,方向為OUT,對FPGA端的寄存器進(jìn)行讀寫;配置端點4為圖片發(fā)送端點,方向為OUT,負(fù)責(zé)傳輸圖片數(shù)據(jù)到FPGA;配置端點6為命令返回值接收端點,方向為IN,讀取寄存器的值從端點6返回;配置端點8為圖片回傳端點,方向為IN,負(fù)責(zé)將FPGA中處理完成的圖片數(shù)據(jù)發(fā)回給主機(jī)。
圖1 主機(jī)與FPGA數(shù)據(jù)交互示意圖
所有的數(shù)據(jù)傳輸按照如下約定:
(1)發(fā)送命令,其格式表如表1所示。
表1 命令格式表
(2)接收命令:只接收32位寄存器值。
(3)發(fā)送圖片數(shù)據(jù):主機(jī)先通過端點2將待發(fā)送圖片相關(guān)信息寫入對應(yīng)寄存器,再發(fā)送圖片數(shù)據(jù)。發(fā)送的圖片數(shù)據(jù)是原始的灰度數(shù)據(jù)。
(4)接收圖片數(shù)據(jù):與發(fā)送圖片數(shù)據(jù)格式相同。
1.2FPGA端控制讀取和發(fā)送USB數(shù)據(jù)
CY68013的4個端點緩沖區(qū),緩存了主機(jī)發(fā)送給FPGA的數(shù)據(jù),再經(jīng)FPGA發(fā)送給主機(jī)的數(shù)據(jù)。FPGA通過從屬先進(jìn)先出緩沖區(qū)(Slave First-In-First-Out, Slave FIFO)接口的時序信號、握手信號,讀/寫信號和輸出允許信號等,在接收時從CY68013內(nèi)部端點中取出應(yīng)用層的數(shù)據(jù),在發(fā)送時將待發(fā)送數(shù)據(jù)寫入CY68013端點緩沖區(qū)。Slave FIFO硬件連接如圖2所示。
用于控制USB通信的狀態(tài)轉(zhuǎn)換過程如圖3所示。
圖3 FPGA控制Slave FIFO接口的狀態(tài)轉(zhuǎn)換圖
2.1Canny算法的實現(xiàn)框架
Canny算法分5個步驟實現(xiàn),分別為高斯平滑,梯度分量gx、gy的計算,梯度長度平方計算以及方向編碼,非局部最大值抑制,雙閾值處理邊緣連接。FPGA實現(xiàn)Canny算法整體框圖如圖4所示。
圖4 FPGA實現(xiàn)Canny算法整體框圖
2.2高斯平滑去噪
為了減少噪聲對邊緣提取的影響,先對圖像進(jìn)行平滑[3],圖像都是二維的,需要二維的正態(tài)分布,即高斯函數(shù)來做平滑處理。
以中心點為原點,對上述公式進(jìn)行離散采樣,并進(jìn)行規(guī)范化處理和整數(shù)化處理,得到經(jīng)典的3×3高斯平滑模板,如圖5所示。
圖5 3×3高斯平滑模板
圖像的3×3鄰域高斯平滑濾波,需要先生成3×3的數(shù)據(jù)區(qū),這里使用FPGA內(nèi)部資源構(gòu)建了一塊3行圖像寬度的緩沖區(qū)對3×3的像素進(jìn)行加權(quán)平均計算。
2.3計算梯度幅值圖像和角度圖像
2.3.1梯度
凡是邊緣的地方應(yīng)該是灰度變化比較劇烈的地方,而且有一定的方向性要求。其中,梯度向量是描述灰度變化的劇烈程度和變化方向的重要數(shù)學(xué)工具。
梯度向量有一個重要的幾何性質(zhì),它指出了f在位置(x,y)處的最大變化率的方向[4]。
向量的長度表示為M(x,y),即:
它是梯度向量方向變化率的值。
2.3.2梯度分量的離散數(shù)學(xué)近似
由于處理的是數(shù)字量,因此需要求出關(guān)于一點的鄰域上的偏導(dǎo)數(shù)的數(shù)字近似。這里使用3×3模板來達(dá)到處理效果,3×3像素編號如圖6所示。
圖6 3×3模板像素編號
為了使圖像變得更平滑,消除噪聲對于邊緣提取的影響,將中間的系數(shù)取為2,得到圖7所示的模板[4]。
圖7 左右分別為x方向和y方向的偏導(dǎo)模板
其近似偏導(dǎo)數(shù)的簡單的數(shù)字近似由下式給出:
2.3.3FPGA實現(xiàn)梯度幅值和角度計算
整體框圖中,梯度分量計算模塊的作用是為了從圖中求得梯度分量,即gx和gy,根據(jù)上述近似方法以及推導(dǎo)好的近似3×3模板對圖像進(jìn)行整體濾波即可求得。
同樣的,α(x,y)如果按照公式求反三角函數(shù)的話會消耗掉大量的FPGA資源,價值不高,可以采用近似算法,根據(jù)gx和gy的比值關(guān)系以及gx和gy的符號正負(fù),將梯度向量的方向近似地劃分到8個區(qū)域中,如圖8所示。這些區(qū)域以0°、45°、90°、135°為中心角度,每個方向±22.5°。對于整個坐標(biāo)系而言,梯度向量的方向共分為8類,但是對于非局部最大值抑制的實現(xiàn),利用中心對稱原理,只需要4個方向。采用這樣的近似策略,能夠在幾乎不損失精度的情況下,大大減少FPGA的資源消耗。另外方向劃分需要用到除法,在FPGA中除法所需要消耗的資源和時鐘數(shù)遠(yuǎn)遠(yuǎn)大于乘法,為了進(jìn)一步減少資源的消耗,需要將兩者商的比較轉(zhuǎn)換為一個數(shù)與另兩個數(shù)的乘積的比較。
(1)當(dāng)gy (2)當(dāng)gy>gx×tan22.5° 并且gy (3)當(dāng)gy>gx×tan67.5°,則為豎直邊緣,梯度方向為水平,編碼“02”。 (4)當(dāng)gy>gx×tan22.5° 并且gy 梯度方向的編碼如圖9所示。 圖8 梯度方向劃分為8類 圖9 梯度方向的編碼 其中,兩個三角函數(shù)的值可以事先計算出來,可以將不等式兩邊都放大1 024倍,由于1 024為2的冪,乘積運算可以轉(zhuǎn)成移位計算,效率非常高,而且又能等效地保留較多的小數(shù)位數(shù),保證了精確度。 2.4對梯度幅值圖像應(yīng)用非最大值抑制 僅僅得到全局的梯度并不足以確定邊緣,為確定邊緣,必須保留局部梯度最大的點,而抑制非極大值。非局部極大值抑制模塊,首先取出3×3鄰域像素值,即正方形區(qū)域的9個像素值,根據(jù)中心點所劃分的梯度方向,判斷該中心點的像素的梯度長度的平方Msquare是否為該3×3鄰域該梯度方向上的極大值,如果是則保留,如果不是則舍棄。 2.5雙閾值處理及邊緣連接 圖10從上至下從左至右依次是原圖、灰度圖、OpenCV軟件處理結(jié)果和FPGA硬件處理結(jié)果,實驗結(jié)果表明CY68013+FPGA的架構(gòu)可以實時對圖像提取較為精準(zhǔn)的邊緣。 圖10 實驗結(jié)果圖 本文通過USB2.0高速接口進(jìn)行圖像數(shù)據(jù)傳輸,基于對傳統(tǒng)Canny算法的分析,結(jié)合硬件實現(xiàn)的特點對算法進(jìn)行了改進(jìn),并在FPGA上實現(xiàn),實現(xiàn)FPGA接收圖像,經(jīng)Canny邊緣提取然后高速將處理完的圖片傳回主機(jī)。實驗結(jié)果表明在CY68013+FGPA的架構(gòu)下,該算法可以按照預(yù)期實時地提取出圖像的邊緣。 [1] Cypress Semiconductor. EZ-USB technical reference manual[EB/OL].(2014-04-24)[2014-08-06].http://www.cypress.com. [2] 錢峰. EZ-USB FX2單片機(jī)原理、編程及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2006. [3] 王植,賀賽先. 一種基于Canny理論的自適應(yīng)邊緣檢測方法[J].中國圖像圖形學(xué)報,2004,9(8): 957-958. [4] Gonzalez, Woods著. 數(shù)字圖像處理[M].阮秋琦,阮宇智,等譯. 北京:電子工業(yè)出版社, 2011. Embedeed real-time Canny edge detection Nan Kailai, Fu Chaobin (College of Computer, Hangzhou Dianzi University, Hangzhou 310018, China) Based on traditional Canny operator, a high speed and real-time edge detector based on embedded hardware architecture of CY68013 and FPGA is proposed. USB interface chip CY68013 is used to transmit the image data in high speed and FPGA is used to receive the image data from USB and realize edge detection by method of improved Canny algorithm. The proposed algorithm based on traditional Canny algorithm is improved in various aspects, including using the calculated template instead of convolution, appropriate approximate transformation, making full use of the parallel speciality. It not only keeps the advantages of traditional Canny algorithm, such as accurate positioning, unilateral response and high signal to noise ratio, but also speeds up the calculation of edge detection, decreases the latch, increases the real-time property. CY68013; FPGA; Canny; embedded; edge detection TP751 A 10.19358/j.issn.1674- 7720.2017.19.013 南開來,傅超斌.嵌入式實時Canny邊緣檢測[J].微型機(jī)與應(yīng)用,2017,36(19):45-47,51. 2017-03-12) 南開來(1992-),通信作者,男,碩士研究生,主要研究方向:基于可編程邏輯陣列的圖像處理。E-mail:379838266@qq.com。傅超斌(1993-),男,碩士研究生,主要研究方向:LD-VHDL的并行編譯。3 實驗結(jié)果
4 結(jié)論