趙安才,周強(qiáng)
(北京航空航天大學(xué)自動(dòng)化科學(xué)與電氣工程學(xué)院,北京100191)
圖像的邊緣通俗講是指圖像中前景與背景之間的分割界線,這些分割界線是由一系列的像素點(diǎn)構(gòu)成的,且其有一個(gè)共同點(diǎn),即其領(lǐng)域內(nèi)的顏色灰度存在階躍變化。由于其隱含著相當(dāng)一部分的圖像信息,是圖像的分割,乃至更深層次的理解及識(shí)別的重要特征。因而對(duì)圖像邊緣的檢測(cè)提取一直都是計(jì)算機(jī)識(shí)別中非常重要的圖像處理手段,能否準(zhǔn)確、快速進(jìn)行邊緣的提取也將影響高層次圖像處理如理解、識(shí)別的效果和性能。
圖像邊緣檢測(cè)的主要目標(biāo)是要把圖像中的邊界從圖像中分離開(kāi)來(lái),一般是通過(guò)分析邊界部分與其他地方的區(qū)別和特點(diǎn),并運(yùn)用一定的數(shù)學(xué)手段判斷構(gòu)成邊界的像素的位置,進(jìn)而達(dá)到提取的目的。針對(duì)這個(gè)目的,廣大研究者提出開(kāi)發(fā)了很多的算法,這些算法雖然多種多樣,各有側(cè)重點(diǎn),但有個(gè)共同點(diǎn),即都是利用微分運(yùn)算這一數(shù)學(xué)手段實(shí)現(xiàn)的,對(duì)圖像每個(gè)像素點(diǎn)領(lǐng)域內(nèi)顏色灰度進(jìn)行一階或者二階微分運(yùn)算,通過(guò)其變化規(guī)律對(duì)邊緣像素點(diǎn)進(jìn)行定位和提取。比較常見(jiàn)的邊緣檢測(cè)算法有Roberts算法、Sobel算法、Prewitt算法、拉普拉斯算法等[1]。上述這些檢測(cè)算子大多流程較為簡(jiǎn)單,處理速度快,但也存在定位精度不足或者對(duì)干擾敏感的缺點(diǎn),而1986年由John F.Canny提出的Canny邊緣檢測(cè)算法則很好的克服了這些缺點(diǎn),目前已經(jīng)被廣泛采用,成為了圖像邊緣檢測(cè)領(lǐng)域中一種經(jīng)典算法。
在視頻應(yīng)用中,強(qiáng)調(diào)對(duì)信號(hào)的實(shí)時(shí)處理,而且對(duì)實(shí)時(shí)性的要求越來(lái)越高,傳統(tǒng)用軟件實(shí)現(xiàn)算法的方式由于其使用通用處理器的特點(diǎn),對(duì)于復(fù)雜的算法,很難大幅度提高其運(yùn)算速度。隨著FPGA的不斷發(fā)展及其并行處理的優(yōu)勢(shì),人們開(kāi)始嘗試把一些算法移植到FPGA平臺(tái)上,通過(guò)硬件的方式實(shí)現(xiàn)所需的功能,實(shí)際效果也表明這種方式能夠大大加快運(yùn)算的速度,更適合對(duì)實(shí)時(shí)性要求高的應(yīng)用。
Canny算法設(shè)計(jì)有如下特點(diǎn):首先,要最大程度檢測(cè)到圖像的實(shí)際邊緣;其次,檢測(cè)到邊緣的位置要最大程度接近其實(shí)際位置;最后,系統(tǒng)對(duì)偽邊緣的響應(yīng)要盡可能少[2]。
算法的實(shí)施主要有如下4個(gè)步驟:
1)選取合適的高斯濾波函數(shù),對(duì)圖像進(jìn)行平滑處理,以消除采集過(guò)程受到的干擾;
2)利用Sobel梯度模板計(jì)算圖像每個(gè)像素點(diǎn)I(x,y)的梯度。其中,x方向和y方向的偏導(dǎo)數(shù)dx和dy分別為:
則梯度幅值為:
梯度方向?yàn)椋?/p>
3)進(jìn)行非極大值抑制:遍歷圖像,將每個(gè)像素的梯度值和其梯度方向上鄰近兩個(gè)像素的梯度值進(jìn)行比較,若不是最大,則將其剔除[3];
4)雙閾值化處理:選取兩個(gè)閾值—高閾值TH和低閾值TL(一般取TL=0.4TH),對(duì)上一步驟輸出的圖像遍歷,若某像素點(diǎn)的梯度值大于TH則一定是邊緣;若小于TL則一定不是邊緣;若大于TL且又小于TH,則此時(shí)如果該點(diǎn)的8鄰域內(nèi)有梯度值大于TH的邊緣像素,則判定為邊緣,否則就不是邊緣[4-6]。
比較其它邊緣檢測(cè)算法而言,傳統(tǒng)的Canny算法有著更好的檢測(cè)效果,但仍存在不足之處[7],比如邊緣連接中的閾值是提前選取的固定值,當(dāng)外界環(huán)境如光線等發(fā)生變化時(shí),待檢測(cè)圖像也會(huì)發(fā)生變化,此時(shí)閾值就需要重新調(diào)整,因而自適應(yīng)能力較差。因而本文采用了一種新的算法,其針對(duì)性地做了一些改進(jìn)。
在傳統(tǒng)方法中,基于雙閾值的邊緣連接需要針對(duì)特定的圖像提前設(shè)置好對(duì)應(yīng)的閾值,如果待檢測(cè)對(duì)象出現(xiàn)變化或者由于檢測(cè)對(duì)象所處的外界環(huán)境如光線等發(fā)生變化,則又需要重新設(shè)置閾值,顯然這不能很好的滿(mǎn)足自動(dòng)化的需求。本文運(yùn)用OSTU算法(最大類(lèi)間方差法),也稱(chēng)大津法,來(lái)確定適合圖像的閾值,從而能夠很好的解決上述所說(shuō)問(wèn)題。
自從OSTU算法提出之后,就被廣泛應(yīng)用于圖像處理領(lǐng)域,尤其是圖像二值化[8]。其思想同樣適用于邊緣連接閾值的選取。按照最大類(lèi)間方差法的思想,類(lèi)間方差即表征著兩個(gè)類(lèi)之間的差別,并且成正相關(guān)。對(duì)于大小為M×N的圖像I(x,y),令目標(biāo)和背景的分割閾值為T(mén),目標(biāo)包含N0個(gè)像素點(diǎn),所占比例記為ω0,其平均灰度記為μ0;背景包含N1個(gè)像素點(diǎn),所占比例為ω1,其平均灰度為μ1。記μ為圖像的總平均灰度,g為目標(biāo)和背景的類(lèi)間方差[9-10]。則有:
由上述各式整理可得到等價(jià)公式:
每一種可能的閾值T都對(duì)應(yīng)可計(jì)算出g,比較可得g的最大值,此時(shí)對(duì)應(yīng)的閾值T,即為所求。
本文所設(shè)計(jì)的系統(tǒng)以FPGA芯片為核心,輔以外圍電路,一起構(gòu)成了實(shí)時(shí)圖像邊緣檢測(cè)系統(tǒng)。系統(tǒng)硬件部分由OV7670攝像頭模塊、FPGA最小系統(tǒng)、SDRAM模塊電路和顯示器組成。另外在FPGA內(nèi)部通過(guò)編程實(shí)現(xiàn)I2C配置、圖像采集、SDRAM控制、Canny邊緣檢測(cè)、VGA控制等功能單元電路,也是本文所要探討的核心內(nèi)容。系統(tǒng)的總體框圖如圖1所示。
其中I2C配置模塊實(shí)現(xiàn)與攝像頭模塊的通信,并對(duì)其工作方式等進(jìn)行配置[11];圖像采集模塊用于接收攝像頭模塊傳來(lái)的圖像原始數(shù)據(jù),并進(jìn)行相應(yīng)的轉(zhuǎn)換,輸出可供使用的圖像數(shù)據(jù);SDRAM控制模塊實(shí)現(xiàn)將圖像數(shù)據(jù)轉(zhuǎn)存到存儲(chǔ)芯片中的讀寫(xiě)控制[12];邊緣檢測(cè)模塊實(shí)現(xiàn)圖像邊緣的檢測(cè)并輸出相應(yīng)數(shù)據(jù);最后在VGA控制模塊的控制下送往顯示器顯示。
圖1 實(shí)時(shí)視頻邊緣檢測(cè)系統(tǒng)總體框圖
I2C總線包括兩根線:串行數(shù)據(jù)線SDA和串行時(shí)鐘線SCL,主要用于主從機(jī)之間的通信,本文通過(guò)I2C總線寫(xiě)寄存器的方式設(shè)置OV7670攝像頭模塊的工作模式和參數(shù),如圖像格式、分辨率和白平衡等。配置模塊設(shè)計(jì)的基本思路是通過(guò)系統(tǒng)時(shí)鐘分頻得到頻率為10 kHz的時(shí)鐘作為SCL信號(hào)輸出,并將OV7670模塊的設(shè)備地址、子地址和數(shù)據(jù)存儲(chǔ)在位寬為24 bit的寄存器中,最后按照I2C的工作時(shí)序?qū)?shù)據(jù)逐位輸出到SDA上。
攝像頭模塊輸出的數(shù)據(jù)為原始數(shù)據(jù),無(wú)法直接使用,因而需要進(jìn)行必要的轉(zhuǎn)換和篩選。圖像采集單元完成上述的轉(zhuǎn)換和篩選功能,可根據(jù)攝像頭模塊的輸出時(shí)序來(lái)設(shè)計(jì)。一方面接收有效的圖像數(shù)據(jù),并剔除消隱行、開(kāi)始以及結(jié)束標(biāo)志位數(shù)據(jù);另一方面,通過(guò)幀計(jì)數(shù)器控制過(guò)濾攝像頭模塊工作不穩(wěn)定時(shí)期的圖像數(shù)據(jù)。
采集到的圖像數(shù)據(jù)需要轉(zhuǎn)存到SDRAM芯片中,這個(gè)讀寫(xiě)的過(guò)程需要控制模塊來(lái)完成。該模塊包括BANK切換控制,SDRAM讀寫(xiě)控制和FIFO緩存模塊。BANK切換控制是為了實(shí)現(xiàn)“乒乓”操作以解決時(shí)鐘速率不匹配的問(wèn)題,進(jìn)而實(shí)現(xiàn)圖像的實(shí)時(shí)傳輸。
本文通過(guò)verilog語(yǔ)言編程實(shí)現(xiàn)了改進(jìn)Canny算法邊緣檢測(cè)模塊的設(shè)計(jì),圖像數(shù)據(jù)經(jīng)過(guò)處理即可得到相應(yīng)的邊緣數(shù)據(jù)。該部分包括高斯濾波、梯度計(jì)算、非極大值抑制、閾值計(jì)算和邊緣連接等子模塊[13],其總體框圖如圖2所示。下面將分別討論各個(gè)子模塊的設(shè)計(jì)。
圖2 Canny邊緣檢測(cè)模塊的總體框圖
攝像頭采集得到的圖像數(shù)據(jù)往往包含著大量的噪聲,因而需要通過(guò)高斯濾波對(duì)圖像進(jìn)行平滑處理,濾除噪聲。為簡(jiǎn)化設(shè)計(jì),高斯濾波模塊可由開(kāi)窗電路和高斯模板卷積運(yùn)算組成。硬件框圖如圖3所示,高斯模板可選擇3×3或者5×5大小[14],這里我們選擇 3×3的模板,可利用 IP核 ShifRegister(RAM based)對(duì)圖像數(shù)據(jù)進(jìn)行緩存,。模板卷積運(yùn)算可利用IP核ALTMULT_ADD和PARALLEL_ADD來(lái)實(shí)現(xiàn)。
圖3 高斯濾波模塊的硬件框圖
該過(guò)程類(lèi)似于高斯濾波,可通過(guò)模板簡(jiǎn)化設(shè)計(jì),本文選用Sobel梯度算子,但需要X,Y兩個(gè)方向的梯度模板[15],分別計(jì)算兩個(gè)方向的梯度,記為GX,GY,則梯度幅值,梯度方向,通過(guò)上述兩個(gè)公式雖然可以計(jì)算出更為精確的梯度,但鑒于開(kāi)方運(yùn)算和反正切運(yùn)算在實(shí)現(xiàn)時(shí)比較占用硬件資源,同時(shí)會(huì)增加延遲時(shí)間,因而實(shí)際設(shè)計(jì)中可以采用一些簡(jiǎn)化設(shè)計(jì),如梯度幅值G≈|GX|+|GY|;對(duì)于梯度方向而言,由于在進(jìn)行非極大值抑制時(shí),我們僅僅需要確定法向方向在哪一條線上,并不需要確定具體指向哪個(gè)方向[16],因此可以通過(guò)判斷GX和GY以估計(jì)其方向,判別的準(zhǔn)則如圖4所示,整個(gè)坐標(biāo)系共分為八類(lèi),但是利用對(duì)稱(chēng)性的特點(diǎn),只需要Ⅰ~Ⅳ4個(gè)方向即可。
非極大值抑制的目的是把虛假邊緣從響應(yīng)結(jié)果中剔除掉,以達(dá)到最小響應(yīng)的準(zhǔn)則要求,通過(guò)在某個(gè)鄰域內(nèi)把每個(gè)像素點(diǎn)的梯度值和相應(yīng)梯度方向上的鄰近像素點(diǎn)梯度值進(jìn)行比較,根據(jù)是否為局部最大值,來(lái)判斷其是否為邊緣點(diǎn)[17]??梢酝ㄟ^(guò)FIFO緩沖器和3級(jí)D觸發(fā)器截取以當(dāng)前像素為中心的3×3窗口,從而進(jìn)行相應(yīng)的比較。其中開(kāi)窗電路實(shí)現(xiàn)框圖如圖5所示。
圖4 梯度方向判別依據(jù)
圖5 開(kāi)窗電路實(shí)現(xiàn)框圖
在原始的Canny算法中,邊緣連接使用的閾值是提前選取的固定值,本文使用最大類(lèi)間方差法,根據(jù)圖像梯度數(shù)據(jù)自適應(yīng)計(jì)算得到合適的閾值。首先用雙口RAM進(jìn)行圖像梯度直方圖的統(tǒng)計(jì),然后從令分類(lèi)閾值i=0開(kāi)始,循環(huán)統(tǒng)計(jì)ω0,ω1,μ0和μ1,計(jì)算類(lèi)間方差g,并將g為最大時(shí)i的值記錄在某個(gè)寄存器中,待循環(huán)結(jié)束將該值輸出,就是我們所要的閾值T。閾值計(jì)算的流程圖如圖6所示。
圖6 閾值計(jì)算的流程圖
邊緣連接是為解決某些邊緣部分沒(méi)有響應(yīng)而出現(xiàn)的邊緣不連續(xù)的問(wèn)題而提出的,其思路是基于雙閾值實(shí)現(xiàn)的。取上述計(jì)算得到的T值作為高閾值TH,則相應(yīng)的低閾值TL=0.4TH。令該模塊的輸入為圖像g,遍歷g中的每個(gè)像素,將其梯度值分別和閾值TH、TL比較,若高于閾值,則置 1,否則置 0,比較處理后分別得到圖像g1和g2,同時(shí)遍歷圖像g1和g2,如果g1為 1,則判定相應(yīng)點(diǎn)為邊緣點(diǎn),若g1為 0,g2為 1,此時(shí)如果g1的8領(lǐng)域內(nèi)有為1的點(diǎn),則記為邊緣點(diǎn),否則為非邊緣點(diǎn)。需要說(shuō)明一點(diǎn),因?yàn)樾枰鶕?jù)一幅圖像的數(shù)據(jù)才能計(jì)算出閾值,因而,對(duì)當(dāng)前圖像的操作使用前一幅圖像計(jì)算的閾值。硬件實(shí)現(xiàn)原理圖如圖7所示。
圖7 邊緣連接硬件實(shí)現(xiàn)原理圖
圖像邊緣的顯示只有嚴(yán)格按照顯示器的掃描刷新時(shí)序進(jìn)行才行,因而需要有相應(yīng)的控制模塊對(duì)這一過(guò)程進(jìn)行控制。本文中所處理的圖像分辨率為640×480,顯示器的刷新頻率是60 Hz,經(jīng)過(guò)計(jì)算應(yīng)該需要25 MHz的時(shí)鐘頻率配合,可通過(guò)系統(tǒng)時(shí)鐘分頻得到。該模塊的設(shè)計(jì)包括行同步信號(hào)和場(chǎng)同步信號(hào)的產(chǎn)生輸出,同時(shí)根據(jù)時(shí)序把圖像數(shù)據(jù)正確的輸出到R、G、B 3個(gè)通道。
圖8 實(shí)驗(yàn)結(jié)果
本文選擇以Altera EP4CE6F17為核心的FPGA開(kāi)發(fā)板作為平臺(tái),進(jìn)行了系統(tǒng)相關(guān)模塊的編寫(xiě)實(shí)現(xiàn),最終經(jīng)過(guò)采集、處理得到的圖像邊緣能夠?qū)崟r(shí)地在顯示器上顯示。實(shí)驗(yàn)結(jié)果如圖8所示,其中圖(a)為原始灰度圖像,圖(b)為外界光線改變時(shí)的灰度圖像,圖(c)、(d)分別為(a)、(b)經(jīng)過(guò)本系統(tǒng)處理得到的邊緣圖像,由圖(c)、圖(d)不難發(fā)現(xiàn),本文實(shí)現(xiàn)的實(shí)時(shí)邊緣檢測(cè)系統(tǒng),在外界環(huán)境發(fā)生變化時(shí),不需要做出調(diào)整,仍然能夠很好的檢測(cè)到圖像的邊緣,而且能夠在一定程度上抵抗噪聲的干擾。
本文基于改進(jìn)的Canny邊緣檢測(cè)算法在FPGA上設(shè)計(jì)實(shí)現(xiàn)了實(shí)時(shí)視頻邊緣檢測(cè)系統(tǒng),能夠?qū)崟r(shí)準(zhǔn)確的對(duì)圖像的邊緣進(jìn)行提取,同時(shí),相比傳統(tǒng)算法,能夠自適應(yīng)外界光線環(huán)境變化,正確的輸出圖像的邊緣數(shù)據(jù)。本系統(tǒng)在安防監(jiān)控、工業(yè)生產(chǎn)、目標(biāo)追蹤等領(lǐng)域具有一定的應(yīng)用前景。
參考文獻(xiàn):
[1]陳一虎.圖像邊緣檢測(cè)方法綜述[J].寶雞文理學(xué)院學(xué)報(bào):自然科學(xué)版,2013,33(1):16-21.
[2]吉玲,楊亞,付珊珊,等.一種改進(jìn)的Canny邊緣檢測(cè)算法[J].微處理機(jī),2015(1):40-43.
[3]王文濤,朱順安,唐菀.一種自適應(yīng)非極大值抑制邊緣檢測(cè)算法及FPGA設(shè)計(jì)實(shí)現(xiàn)[J].小型微型計(jì)算機(jī)系統(tǒng),2014,35(8):1926-1930.
[4]蘇連成,王東衛(wèi).一種改進(jìn)的Canny邊緣檢測(cè)算子[J].燕山大學(xué)學(xué)報(bào),2012,36(5):413-416.
[5]張帆,彭中偉,蒙水金.基于自適應(yīng)閾值的改進(jìn)Canny邊緣檢測(cè)方法[J].計(jì)算機(jī)應(yīng)用,2012,32(8):2296-2298.
[6]焦圣喜,楊文明,王以純,等.改進(jìn)Canny邊緣檢測(cè)算法研究[J].電子制作,2015(5):40.
[7]潘長(zhǎng)安.圖像邊緣檢測(cè)技術(shù)分析[J].黑龍江科技信息,2015(32):64-65.
[8]劉松濤,殷福亮.基于圖割的圖像分割方法及其新進(jìn)展[J].自動(dòng)化學(xué)報(bào),2012,38(6):911-922.
[9]殷蘇民,朱錦萍,王祖聲,等.基于頂帽變換和最大類(lèi)間方差法的圖像分割方法研究[J].科學(xué)技術(shù)與工程,2014,14(7):60-64.
[10]錢(qián)衛(wèi)星,黃麗亞.二維Otsu自適應(yīng)閾值快速算法的改進(jìn)[J].華僑大學(xué)學(xué)報(bào):自然版,2015,36(4):427-431.
[11]程光偉,李建樂(lè).基于FPGA的視頻采集系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)與數(shù)字工程,2013,41(8):1287-1290.
[12]潘明,陳元枝,李強(qiáng).基于FPGA的圖像采集系統(tǒng)的設(shè)計(jì)[J].國(guó)外電子測(cè)量技術(shù),2012,31(3):58-61.
[13]李平陽(yáng),孫志毅.一種提升Canny算子的自適應(yīng)邊緣檢測(cè)方法[J].太原科技大學(xué)學(xué)報(bào),2013,34(3):171-174.
[14]王福強(qiáng).基于FPGA超分辨率圖像放大算法研究及實(shí)現(xiàn)[D].綿陽(yáng):西南科技大學(xué),2012.
[15]沈德海,侯建,鄂旭.基于改進(jìn)的Sobel算子邊緣檢測(cè)算法[J].計(jì)算機(jī)技術(shù)與發(fā)展,2013(11):22-25.
[16]徐暢.基于FPGA的單目標(biāo)跟蹤系統(tǒng)設(shè)計(jì)[D].南京:南京理工大學(xué),2016.
[17]Wang J,Wang H,Xiang M,et al.Subpixel accuracy central location of circle target based on nonmaximum suppression[J].Chinese Journal of Scientific Instrument,2012,33(7):1460-1468.