基于FPGA的圖像邊緣檢測(cè)
引言
圖像邊緣檢測(cè)是圖像處理的一項(xiàng)基本技術(shù),在工業(yè)、醫(yī)學(xué)、航天和軍事等領(lǐng)域有著廣泛的應(yīng)用。圖像處理的速度一直是一個(gè)難題。雖然DSP具備指令流水線特性和很高的處理速度,但其速度仍然很受限制,而利用高速可編程邏輯器件FPGA/CPLD來設(shè)計(jì)圖像邊緣檢測(cè)器可以很好的克服這個(gè)問題,是一種全新的解決方案。
1 圖像邊緣檢測(cè)算法
用于圖像邊緣檢測(cè)的算法很多,諸如Rorberts算子、Sobel算子、Prewitt算子、Laplaceian算子等,由于Sobel算法只涉及到加法操作,并且可以取得很好的效果,所以是最常用的邊緣檢測(cè)算法。由于圖像在邊緣附近會(huì)出現(xiàn)灰度上的突變,所以,Sobel邊緣檢測(cè)方法以原始圖像灰度為基礎(chǔ),并通過考察圖像每個(gè)像素在某個(gè)領(lǐng)域內(nèi)灰度的變化,然后利用邊緣鄰近的一階導(dǎo)數(shù)最大值來檢測(cè)邊緣,再設(shè)置權(quán)重來檢測(cè)水平、垂直、左對(duì)角、右對(duì)角等各個(gè)不同方向上密度幅度的不同來實(shí)現(xiàn)邊沿檢測(cè)。圖1所示是一個(gè)3×3像素的舉例,其水平、垂直、左對(duì)角和右對(duì)角圖像上密度幅度的變化可以表示為:
H=(Q0+Q3+Q3+Q6)-(Q2+Q5+Q5+Q8)
V=(Q0+Q1+Q1+Q2)-(Q6+Q7+Q7+Q8)
DR=(Q1+Q0+Q0+Q3)-(Q5+Q8+Q8+Q7)
DL=(Q1+Q2+Q2+Q5)-(Q3+Q6+Q6+Q7)
其中,H、V、DL、DR用于計(jì)算梯度的大小和方向,而梯度的大小可由正式給出一個(gè)普遍的估計(jì)值:
Magnitude=Max(H,V,DR,DL)
這樣,通過對(duì)圖像灰度作直方圖分析,便可以給出區(qū)分度閥值,如果Magnitude大于這個(gè)閥值,則該像素為邊界像素,否則為一般像素。
2 系統(tǒng)設(shè)計(jì)
該邊緣檢測(cè)器以ALTERA公司的FLEX10K20芯片為核心器件。由圖像傳感器獲取的圖像經(jīng)前端處理器處理即可得到3×3像素圖形數(shù)據(jù),然后送入各個(gè)濾波器進(jìn)行濾波,最后將有關(guān)結(jié)果送輸出處理模塊處理后輸出,其流程圖如圖2所示。
邊緣檢測(cè)的關(guān)鍵是求出四個(gè)方向的圖像梯度數(shù)據(jù)絕對(duì)值的最大值,同時(shí)判別最大值出現(xiàn)的方向,其內(nèi)部結(jié)構(gòu)如圖3所示,邊緣檢測(cè)的核心部分包括濾波器FILTER、比較器COMPARE、邊界判斷器JUDGE和寄存器等。
2.1 濾波器的設(shè)計(jì)
濾波器(FILTER)的設(shè)計(jì)可采用兩級(jí)并行流水線方案,其內(nèi)部結(jié)構(gòu)如圖4所示。圖中的QA、QB、QC、QD、QE、QF對(duì)應(yīng)接上Q0、Q3、Q6、Q2、Q5、Q8表示水平方向?yàn)V波,其輸出則為H_FILTER。垂直方向?yàn)V波器、左對(duì)角濾波器和右對(duì)角濾波與水平方向?yàn)V波器類似。為了提高加法運(yùn)算的速度,加法器的設(shè)計(jì)可選用超前進(jìn)位加法器。
2.2 比較器的設(shè)計(jì)
比較器模塊的功能是比較兩個(gè)輸入值以得到其最大值。其VHDL源程序如下:
2.3 邊界判斷器的設(shè)計(jì)
邊界判斷器JUDGE的功能是根據(jù)區(qū)分度閥值、四個(gè)濾波器的輸出及其最大值進(jìn)行邊界的判斷。其VHDL源程序如下:
3 仿真分析
本設(shè)計(jì)的系統(tǒng)時(shí)序仿真波形如圖5所示。事實(shí)上,對(duì)于圖像邊緣檢測(cè)中的sobel算法來說,若使用FPGA來設(shè)計(jì),則H、V、DR、DL四個(gè)方向的濾波可以全部并行。另外,由于每個(gè)方向的濾波器設(shè)計(jì)時(shí)均采用一級(jí)四路并行加法器與一級(jí)雙路并行加法器相串聯(lián),因此,算上兩級(jí)串行比較器。實(shí)際上,整個(gè)過程只有四級(jí)串行結(jié)構(gòu)。
4 結(jié)束語
對(duì)于本文所設(shè)計(jì)的系統(tǒng),假設(shè)使用40 MHz的系統(tǒng)時(shí)鐘,則處理一個(gè)像素點(diǎn)的時(shí)間約100 ns,也就是說,處理一張800×600的圖像所用的時(shí)間不到50 ms。由此可見,該設(shè)計(jì)可大大提高圖像邊沿檢測(cè)的處理速度。