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