Laplacian圖像邊緣檢測器的FPGA實現(xiàn)研究
邊緣可定義為圖像中灰度發(fā)生急劇變化的區(qū)域邊界,它是圖像最基本的特征,是圖像分析識別前必不可少的環(huán)節(jié),是一種重要的圖像預處理技術(shù)。邊緣檢測主要就是(圖像的)灰度變化的度量、檢測和定位,它是圖像分析和模式識別的主要特征提取手段,在計算機視覺、圖像分析等應用中起著重要的作用,是圖像分析與處理中研究的熱點問題。
數(shù)字信號和圖像處理算法的實現(xiàn)有多種途徑,傳統(tǒng)上多采用高級語言編程實現(xiàn),便于使用的還有基于專用單片機來實現(xiàn)(一般稱為可編程DSP單片機)以及在VLSI上實現(xiàn)某種算法的專用集成電路芯片(ASIC)等。近年來,隨著EDA技術(shù)的迅速發(fā)展,國內(nèi)外逐漸比較流行的是在FPGA中實現(xiàn)復雜算法的運算處理。
在圖形處理領(lǐng)域,圖像處理的速度一直是一個很難突破的設計瓶頸。這里通過研究圖像邊緣檢測器的FPGA實現(xiàn),來探討提高圖像處理速度的有關(guān)途徑。
2 Laplacian邊緣檢測的數(shù)學模型
常見的邊緣檢測算子有:Roberts,Laplacian,Kirseh,So—bel,Prewitt等。各種檢測算子各有其優(yōu)缺點,其中Laplacian算子是一種典型的邊緣檢測方法,它是一個3×3模板,對實現(xiàn)硬件的要求不高,用于檢測屋頂型邊緣的效果也不錯。研究其硬件實現(xiàn)具有一定的典型性,可推廣到對其他算子的硬件實現(xiàn)。
拉普拉斯算子是根據(jù)圖像f(x,y)在x,y方向上的二階偏導數(shù)定義的一種邊緣檢測算子,其定義:
因為圖像邊緣的灰度變化較大,所以圖像的一階偏導數(shù)在邊緣處有局部最大值或最小值,這樣二階偏導數(shù)在邊緣處會通過零點。用拉普拉斯算子檢測邊緣就是估算拉普拉斯算子的輸出,找出其零點位置。拉普拉斯算子定義為:
如果把它用加權(quán)矩陣來表示則可表示成圖1左側(cè)所示的卷積模板。由于數(shù)字圖像中離散信號的特點,在連續(xù)情況下能獲得的精確零點這時可能無法全部檢測出來,故拉普拉斯算子輸出為零的點并不能表示出完整的目標邊緣。為此,在設計中定義邊緣為滿足以下兩個條件的像素點的集合:①拉普拉斯算子的輸出為正;②在其8鄰點存在拉普拉斯算子的輸出為負的點。
3 圖像邊緣檢測的實現(xiàn)流程
圖像邊緣檢測有一個共同點:可轉(zhuǎn)化為用一個模板(2×2.3×3,4×4,5×5等)對圖像進行卷積。因此圖像邊緣檢測的核心就是如何處理模板的卷積運算。Laplacian算子就是一個3×3的卷積模板。
3x3卷積運算閣定義如(3)式所示,其中Cm,n為被卷積后的像素值,Pm,n為圖像的實際像素值,其中Cm,n為被卷積后的像素值,Pm,n為圖像的實際像素值。由(3)式可知,完成一次3x3卷積操作需要9次乘法和8次加法操作。
由圖1可知,圖像邊緣檢測的主要實現(xiàn)流程為:①模板在圖像中以光柵掃描方式移動;②將模板系數(shù)與模板下對應像素相乘;③將所有乘積相加;④將和(模板輸出響應)賦給圖像中對應模板中心位置的像素完成一次卷積。不斷重復上述步驟直至整幅圖像被處理完。
4 分布式算法的運算原理
分布式算法早在1973年就被Croisier提出,直到FPGA出現(xiàn),才被廣泛地應用在FPGA中計算乘積和。除了用于卷積運算,還用于相關(guān)DFT和RNS反演映射的運算。介紹DA算法的運算原理。一個線性時不變網(wǎng)絡的輸出用下式表示:
假設系數(shù)c[n]是已知常數(shù),x[n]是變量,在有符號DA系統(tǒng)中假設變量x[n]的表達式如下:
式中xb[n]表示x[n]的第b位,而x[n]也就是x的第n次采樣。于是,內(nèi)積y可以表示為:
重新分別求和(即分布式算法的由來),其結(jié)果為:
從(7)式發(fā)現(xiàn),分布式算法是一種以實現(xiàn)乘加運算為目的運算方法。與傳統(tǒng)算法的不同在于執(zhí)行部分積運算的先后順序不同。分布式算法在實現(xiàn)乘加功能時,是將各輸入數(shù)據(jù)的每一對應位產(chǎn)生的部分積預先相加形成相應的部分積.然后再對各個部分積累加形成最終結(jié)果,而傳統(tǒng)算法是等到所有乘積已經(jīng)產(chǎn)生后再相加完成乘加運算。與傳統(tǒng)串行算法相比,分布式算法可極大地減少硬件電路的規(guī)模,提高電路的執(zhí)行速度。該算法實際上是一個“速度最優(yōu)的高階分布式算法”
5 Laplacian邊緣檢測器的FPGA設計
5.1 系統(tǒng)的總體設計
Laplacian邊緣檢測器DETECTOR總體設計如圖2所示。系統(tǒng)工作原理為:幀存儲器按照一定的規(guī)則(是按行)輸出數(shù)據(jù),經(jīng)過FIFO輸入緩沖,進入兩個32位的移位寄存器。由SIPO(串進并出)模塊得到所需的9個并行數(shù)據(jù),送卷積處理器(Convolver)得到處理后的數(shù)據(jù),最后卷積器輸出一個像素值。根據(jù)邊緣判斷規(guī)則,即可判斷出該點是否為邊緣點。
5.2 卷積運算模塊的設計
Laplacian模板是一個3x3階的數(shù),每個像素值為8位,因此,它和另外的3x3模板進行卷積,其輸出表達式為:
[!--empirenews.page--]
對于該卷積運算的實現(xiàn),采用前述的“速度最優(yōu)的高階分布式算法”,其硬件實現(xiàn)的原理框圖如圖3所示。它是完全流水線式字并行結(jié)構(gòu),能夠達到最大的運算速度。其中的8個ROM是用于實現(xiàn)9個R圖位的數(shù)相乘,每個ROM都實現(xiàn)一個9位的查找表的功能。5.3卷積運算數(shù)據(jù)“流水線”輸入模塊的設計圖像的像素是由CCD(或CMOS)攝像機經(jīng)A/D轉(zhuǎn)換,再經(jīng)量化而得到,并放入幀存儲器。在圖像中,整幅圖像像素以幀為單位進行存儲。每一幀數(shù)據(jù)的存儲方式如圖4所示。卷積運算掃描像素的獲取如圖5所示,該數(shù)據(jù)輸入方式,使用了兩個32位的移位寄存器存放像素值,避免了卷積運算中對存儲器數(shù)據(jù)的高度重復讀取,使用9個寄存器實現(xiàn)了數(shù)據(jù)由串行到并行的轉(zhuǎn)換,實現(xiàn)了完全“流水線”的輸入方式。
5.4 系統(tǒng)的仿真結(jié)果
根據(jù)前述的總體設計方案,使用VHDL設計進行各個模塊和系統(tǒng)總體程序,選擇的FPGA為ALTERA/FLEX/EPF10K20TC144—3,使用的開發(fā)工具是MAX+plus II 10.0。圖6是邊緣檢測器的時序仿真圖(鐘頻率10 MHz),由波形仿真結(jié)果分析可知,系統(tǒng)達到了設計功能要求,該系統(tǒng)經(jīng)過初始的兩行行延遲和串并轉(zhuǎn)化后(為72個時鐘周期),以后每個時鐘周期就可“流水式”輸出一個處理結(jié)果,若系統(tǒng)時鐘周期TCLK,對于像素為N個點的數(shù)字圖像,系統(tǒng)的處理時間TN=70xTCLK+N×TCLK。處理一幅1 024x1 024的圖像的時間,當系統(tǒng)時鐘為10MHz時,僅需0.1 s,而系統(tǒng)時鐘為10 MHz時,僅需0.Ol s。
6 結(jié)語
在Laplacian圖像邊緣檢測器的設計中,采用了速度最優(yōu)的高階分布式算法(DA)完成模板的卷積運算,使用兩個32位的移位寄存器存放像素值,避免了卷積運算中對存儲器數(shù)據(jù)的高度重復讀取,使用9個寄存器實現(xiàn)數(shù)據(jù)由串行到并行的轉(zhuǎn)換,實現(xiàn)了完全“流水線”的數(shù)據(jù)輸入方式,從而在資源.速度上達到了較好的優(yōu)化,具有良好的實時處理性能。若系統(tǒng)工作時鐘為100 MHz,則處理一幅1 024x1 024的圖像的時間僅需0.01 s左右?!傲魉€”的數(shù)據(jù)輸入方式和分布式卷積運算的設計思想,對于數(shù)字圖像和數(shù)字信號處理的FPGA硬件實現(xiàn),具有廣泛的推廣應用價值。