楊 康, 衛(wèi) 敏, 孫 磊
(安徽大學(xué) 電氣與自動(dòng)化學(xué)院,安徽 合肥 230601)
圖像邊緣檢測(cè)是計(jì)算機(jī)視覺、模式識(shí)別等專業(yè)領(lǐng)域極其重要的步驟,其目的是通過算法把圖像的邊緣檢測(cè)出來,為后續(xù)復(fù)雜算法做準(zhǔn)備,對(duì)目標(biāo)識(shí)別、圖像分割等高層次應(yīng)用有很大的影響[1]。常見的邊緣檢測(cè)算子有很多種,比如一階的Roberts算子、Prewitt算子、Sobel算子,二階的有Laplace算子、Log算子、Canny算子[2]。相對(duì)于前幾種邊緣檢測(cè)算子抗干擾性差,對(duì)噪聲敏感,Canny算子對(duì)圖像邊緣檢測(cè)效果更加,因而被廣泛使用,但該算法的雙邊緣閾值需要人為根據(jù)經(jīng)驗(yàn)給定,并且算法在用軟件實(shí)現(xiàn)時(shí),數(shù)據(jù)量大,處理速度較慢,滿足不了實(shí)時(shí)性的要求。
隨著現(xiàn)場(chǎng)可編程門陣列(field programmable gate array,FPGA)技術(shù)的快速發(fā)展,利用FPGA平臺(tái)設(shè)計(jì)的邊緣檢測(cè)系統(tǒng)由于其并行流水線、高速數(shù)據(jù)處理的特點(diǎn)而被廣泛采用[3]。傳統(tǒng)的Canny算法的閾值需要人為給定,自適應(yīng)性較差。本文在Bernsen算法[4]基礎(chǔ)上,利用中值濾波算法求出的中值、最大值、最小值,再結(jié)合加權(quán)平均法自動(dòng)生成高低閾值。最后在FPGA平臺(tái),利用Verilog編程語言進(jìn)行系統(tǒng)設(shè)計(jì)與驗(yàn)證。
由于Canny算法[5]對(duì)噪聲有較強(qiáng)的抗干擾能力,并且邊緣提取更為準(zhǔn)確而被廣泛的使用。Canny算法具體可以分為以下幾個(gè)步驟,首先選用合適的高斯濾波函數(shù),對(duì)圖像進(jìn)行平滑處理,濾除一定的噪聲。然后利用2×2模板梯度算子計(jì)算梯度幅值以及方向,其次對(duì)梯度幅值進(jìn)行非極大值抑制,細(xì)化邊緣,最后利用雙邊緣法,去除偽邊緣,連接有效邊緣。經(jīng)典Canny算法相比前幾個(gè)算法有很好的邊緣提取效果,但仍有其自身的局限性[6]:
1)傳統(tǒng)的Canny算法計(jì)算梯度幅值是利用2×2模板,盡管模板越小,邊緣定位越準(zhǔn)確,但對(duì)噪聲的抗干擾能力較弱,3×3檢測(cè)模板兼顧了檢測(cè)速度與精度,是理想的檢測(cè)模板。
2)傳統(tǒng)的Canny算法采用雙閾值方法連接邊緣,需要人為設(shè)定閾值,閾值設(shè)置過高會(huì)丟失大量邊緣,設(shè)置過低,會(huì)產(chǎn)生許多偽邊緣,不具備自適應(yīng)能力。
針對(duì)傳統(tǒng)算法的不足先進(jìn)行以下改進(jìn),把2×2檢測(cè)模板改為3×3的Sobel檢測(cè)模板。
設(shè)圖像函數(shù)為f(i,j),圖1(a)為目標(biāo)像素點(diǎn)P22的8領(lǐng)域窗口,圖1(b) 和圖1(c)分別為水平方向和垂直方向的梯度算子。
圖1 Sobel梯度算子
水平梯度和垂直梯度公式如下
Gx=(P13+2P23+P33)-(P11+2P21+P31)
(1)
Gy=(P31+2P32+P33)-(P11+2P12+P13)
(2)
梯度幅值為
(3)
梯度方向?yàn)?/p>
θ=arctan(Gx/Gy)
(4)
Bernsen算法是經(jīng)典的局部閾值自適應(yīng)算法,原理是利用矩陣窗口中的像素灰度級(jí)的最大值和最小值的平均值作為窗口中心像素的自適應(yīng)閾值,為了使算法更具代表性和自適應(yīng)性,加入中值濾波算法求得的中值并引入權(quán)值系數(shù)不斷調(diào)整閾值的大小。改進(jìn)后的算法描繪如下:
設(shè)在以目標(biāo)像素點(diǎn)(i,j)為中心的3×3窗口中,窗口中最大像素值為Max(Pij),中值為Med(Pij),最小值為Min(Pij),權(quán)值系數(shù)分別為f1,f2,f3,則圖像像素各點(diǎn)的閾值為
T(i,j)=(f1×Max(Pij)+f2×Med(Pij)+
f3×Min(Pij))/3
(5)
式(5)權(quán)值系數(shù)的范圍大于0小于1,隨著矩形窗口的擴(kuò)大而相應(yīng)的增加。在求得式(5)中的自適應(yīng)閾值后,把它作為Canny算法的高閾值Th,低閾值取其1/2大小,即Tl=0.5Th。
系統(tǒng)由OV7725攝像頭、海力士提供的容量為256 Mb的SDRAM芯片、FPGA控制單元以及VGA顯示器組成。硬件總體結(jié)構(gòu)圖如圖2所示。首先通過IIC接口及數(shù)據(jù)采集模塊,實(shí)現(xiàn)攝像頭對(duì)外界視頻圖像的采集,采集來的圖像數(shù)據(jù)經(jīng)過SDRAM緩存,然后經(jīng)過灰度變換處理模塊,處理后的圖像數(shù)據(jù)一方面經(jīng)過高斯濾波、梯度幅值和方向計(jì)算模塊、非極大值抑制等處理模塊,另一方面同時(shí)進(jìn)行自適應(yīng)閾值處理,為經(jīng)過非極大值后的圖像進(jìn)行雙閾值處理提供實(shí)時(shí)自適應(yīng)閾值做準(zhǔn)備。最后得到的邊緣圖像在VGA顯示器上顯示。其中FPGA控制單元主要對(duì)外部接口芯片及圖像輸入數(shù)據(jù)進(jìn)行控制與處理。
圖2 系統(tǒng)總體結(jié)構(gòu)
I2C接口是由串行時(shí)鐘線和串行數(shù)據(jù)線組成,通過I2C時(shí)序電路的設(shè)計(jì)來完成對(duì)攝像頭中寄存器的配置,最后通過設(shè)計(jì)OV7725的通信時(shí)序,來完成對(duì)圖像數(shù)據(jù)的采集。IIC接口時(shí)序分為寫操作與讀操作兩大部分,圖3給出了寫操作時(shí)序仿真波形,讀操作原理類似。當(dāng)時(shí)鐘信號(hào)為高電平,數(shù)據(jù)線為低電平時(shí),數(shù)據(jù)傳輸開始,首先寫入設(shè)備地址42 H,收到設(shè)備應(yīng)答信號(hào)ACK,開始寫入寄存器地址12 H,再次收到應(yīng)答信號(hào)ACK后,開始寫入8位數(shù)據(jù)80 H,之后進(jìn)行讀操作,由于原理類似,不再做贅述。
圖3 I2C接口寫操作時(shí)序仿真
在圖像處理模塊中,VGA接口模塊是25 MHz的時(shí)鐘域,SDRAM的接口模塊是100 MHz時(shí)鐘域,由于速率的不匹配,會(huì)影響整個(gè)系統(tǒng)的工作性能,為了解決這種跨時(shí)鐘域的問題,引入兩種控制技巧[7]。
1)引入WFIFO和RFIFO兩個(gè)異步FIFO作為圖像數(shù)據(jù)的輸入輸出緩存模塊。當(dāng)一幀640×480的圖像的每個(gè)像素點(diǎn)按順序?qū)懭氲絎FIFO時(shí),WFIFO的數(shù)據(jù)大于或等于256個(gè)時(shí),WFIFO請(qǐng)求寫SDRAM;當(dāng)SDRAM響應(yīng)了寫請(qǐng)求時(shí),從WFIFO中讀取數(shù)據(jù)寫入到SDRAM。同理當(dāng)RFIFO中的數(shù)據(jù)小于256時(shí),給SDRAM發(fā)送讀請(qǐng)求,把從SDRAM中讀出的數(shù)據(jù)寫到RFIFO中,VGA接口模塊在行場(chǎng)信號(hào)到達(dá)有效區(qū)域后,給RFIFO發(fā)送讀請(qǐng)求,讀取圖像數(shù)據(jù)。
2)為了減少圖像拖影等問題利用乒乓操作進(jìn)行Bank切換,以完成數(shù)據(jù)無縫緩存與處理。階段A,WFIFO數(shù)據(jù)寫入Bank0,RFIFO從Bank讀出數(shù)據(jù),等寫完且讀完一幀圖像后,切換Bank;階段B,WFIFO數(shù)據(jù)寫入Bank3,RFIFO從Bank0讀出數(shù)據(jù),等寫完且讀完一幀圖像后,再切換Bank,依次反復(fù)循環(huán)。Bank切換過程如圖4所示。
圖4 Bank切換過程
矩陣窗口的獲取是后續(xù)圖像處理算法中必不可少的一環(huán),傳統(tǒng)的矩陣窗口利用FIFO或RAM作為緩沖器[8],本文通過調(diào)用軟件中的IP核中的2個(gè)移位寄存器來進(jìn)行延遲生成矩陣窗口,由于OV7225攝像頭的分辨率為640×480,移位寄存器中的行緩存深度可以設(shè)置為640。移位的2行與當(dāng)前的圖像數(shù)據(jù)流組成3行數(shù)據(jù),為了使數(shù)據(jù)對(duì)齊即能夠同時(shí)并行輸出,可以每行增加3個(gè)寄存器進(jìn)行延遲,結(jié)構(gòu)如圖5所示,模塊仿真波形圖如圖6所示。由仿真波形可知:3個(gè)時(shí)鐘周期后矩陣窗口形成。
圖5 矩形窗口生成
圖6 矩形窗口仿真
利用FPGA并行處理快速求得所需的中值,運(yùn)算過程如圖7所示。
圖7 自適應(yīng)閾值運(yùn)算結(jié)構(gòu)
利用FPGA并行處理數(shù)據(jù)的特點(diǎn),首先把并行輸入的9個(gè)數(shù)據(jù)分成3組,利用3個(gè)三輸入的比較器進(jìn)行排序,一個(gè)時(shí)鐘周期的并行運(yùn)算后,每個(gè)比較器都輸出相應(yīng)的最大值、中間值、最小值,然后再次利用3個(gè)比較器分別給3個(gè)最大值、3個(gè)中間值、3個(gè)最小值進(jìn)行排序,經(jīng)過1個(gè)時(shí)鐘周期后,把3個(gè)最大值比較器進(jìn)行比較得到的最小值、中間值比較器得到的中間值、最小值比較器得到的最大值再次進(jìn)行比較,總共3個(gè)時(shí)鐘周期得到矩陣窗口中值。由于窗口中的最大值,最小值在第2個(gè)時(shí)鐘周期就已經(jīng)可以得出,為了使數(shù)據(jù)同步,把最大值、最小值分別利用寄存器打一拍。最后利用式(5)加權(quán)平均計(jì)算得到自適應(yīng)閾值,為了計(jì)算方便,這里取f1=f2=f3=0.5。
梯度幅值和方向可以利用式(3)、式(4)精確計(jì)算出來,但開方運(yùn)算和反三角函數(shù)在硬件實(shí)現(xiàn)過程中會(huì)消耗大量邏輯資源,不宜采用,在實(shí)際設(shè)計(jì)中梯度幅值可以近似為水平梯度與垂直梯度的絕對(duì)值的和,即M=|Gx|+|Gy|。對(duì)梯度方向而言,為節(jié)省邏輯開銷,方向可以根據(jù)水平梯度值Gx和垂直梯度值Gy及其二者的絕對(duì)值的比較運(yùn)算具體量化成一定的范圍,運(yùn)算量化準(zhǔn)則如圖8(a)所示。利用中心對(duì)稱原理,只需求得Ⅰ,Ⅱ,Ⅲ,Ⅳ四個(gè)方向即可。圖8(b)是為了進(jìn)行非極大值抑制運(yùn)算做準(zhǔn)備的矩陣窗口領(lǐng)域內(nèi)4方向梯度標(biāo)記圖。
圖8 梯度方向量化示意
當(dāng)運(yùn)算結(jié)果符合8扇區(qū)的Ⅰ區(qū)域時(shí)即為水平方向記為“00”以此類推Ⅱ扇區(qū)對(duì)應(yīng)“10”、 Ⅲ扇區(qū)對(duì)應(yīng)“01”、Ⅳ扇區(qū)對(duì)應(yīng)“11”。
非極大值抑制主要是對(duì)前面計(jì)算的梯度幅值及梯度方向的計(jì)算結(jié)果進(jìn)行開窗運(yùn)算[9],遍歷梯度幅值圖像中的每一個(gè)像素,將矩陣中心的梯度像素值與其同方向的兩個(gè)梯度值作比較,如果當(dāng)前梯度值為最大值,則為邊緣點(diǎn),否則為非邊緣點(diǎn)。硬件實(shí)現(xiàn)過程如圖9所示。
圖9 非極大值抑制硬件實(shí)現(xiàn)
將經(jīng)過非極大值抑制算法輸出的梯度值與前面所求得的高低閾值進(jìn)行比較,若大于高閾值則將其值置為1,所得的圖像記為f1,稱之為強(qiáng)邊緣圖像,小于低閾值則全部置為0,大于低閾值小于高閾值的值置為1,所得的圖像記為f2,稱之為弱邊緣圖像。統(tǒng)計(jì)f1,f2的值,若f1=1,則該點(diǎn)是邊緣點(diǎn),若f1=0并且f2=1,判斷前8領(lǐng)域是否有強(qiáng)邊緣點(diǎn),若有,則該點(diǎn)為邊緣點(diǎn)置為1,否則為非邊緣點(diǎn)置為0。其硬件實(shí)現(xiàn)結(jié)構(gòu)如圖10所示。
圖10 邊緣連接硬件實(shí)現(xiàn)
將本文設(shè)計(jì)的閾值自適應(yīng)邊緣檢測(cè)系統(tǒng)利用Verilog語言編程,Quartus13.1軟件綜合,在Altera公司提供的CycloneⅣ系統(tǒng)芯片EP4CE6F17C8N上實(shí)現(xiàn),圖11(a)為彩色圖像經(jīng)過灰度變換后的灰度圖像,圖11(b)是利用經(jīng)典的Sobel算子、閾值人為給定的檢測(cè)結(jié)果,圖11(c)是傳統(tǒng)的Canny的算子檢測(cè)圖,圖11(d)是利用本文設(shè)計(jì)的自適應(yīng)閾值后的出的結(jié)果,對(duì)比可知經(jīng)典的Sobel算子檢測(cè)邊緣較寬,并且丟失了大量的真實(shí)邊緣,傳統(tǒng)的Canny算子邊緣定位較精確,但也受人為設(shè)定閾值的影響,會(huì)丟失一些邊緣,而且含有一定的偽邊緣。本文設(shè)計(jì)的邊緣檢測(cè)系統(tǒng)能夠彌補(bǔ)前兩種傳統(tǒng)算法的缺點(diǎn),邊緣定位準(zhǔn)確,同時(shí)很好滿足地實(shí)時(shí)性的要求。
圖11 實(shí)驗(yàn)現(xiàn)象
本文利用FPGA并行流水線,高速處理數(shù)據(jù)的能力,設(shè)計(jì)了實(shí)時(shí)性視頻邊緣檢測(cè)系統(tǒng)。相比傳統(tǒng)的Canny算子閾值需要人為給定的情況下,利用中值濾波算法結(jié)合加權(quán)系數(shù)自適應(yīng)給定閾值,邊緣定位準(zhǔn)確、自適應(yīng)性強(qiáng)。本系統(tǒng)在車牌識(shí)別,目標(biāo)追蹤等專業(yè)領(lǐng)域有較強(qiáng)應(yīng)用前景。