拉普拉斯算子的FPGA實(shí)現(xiàn)方法
掃描二維碼
隨時(shí)隨地手機(jī)看文章
在圖像處理系統(tǒng)中常需要對(duì)圖像進(jìn)行預(yù)處理。由于圖像處理的數(shù)據(jù)量大,對(duì)于實(shí)時(shí)性要求高的系統(tǒng),采用軟件實(shí)現(xiàn)通常難以滿足實(shí)時(shí)性的要求。Altera的QuartusⅡ作為一種可編程邏輯的設(shè)計(jì)環(huán)境,由于其強(qiáng)大的設(shè)計(jì)能力和直觀易用的接口,越來(lái)越受到數(shù)字系統(tǒng)設(shè)計(jì)者的歡迎。QuartusⅡ支持Altera的IP核,包含了LPM/Megafunctions宏功能模塊庫(kù),設(shè)計(jì)者只需要選取設(shè)置這些功能模塊的相關(guān)參數(shù)就可以在程序中調(diào)用,從而使用戶可以充分利用成熟的模塊,大大簡(jiǎn)化了設(shè)計(jì)的復(fù)雜性,加快了設(shè)計(jì)速度。
拉普拉斯算子是一種重要的圖像增強(qiáng)算子,它是一種各向同性濾波器,即濾波器的響應(yīng)與濾波器作用圖像的突變方向無(wú)關(guān),而且實(shí)現(xiàn)簡(jiǎn)單,被廣泛用于圖像銳化和高頻增強(qiáng)等算法中。
在此,提出一種使用QuartusⅡ開(kāi)發(fā)環(huán)境的Megafunctions功能模塊實(shí)現(xiàn)拉普拉斯算子的方案,可以做到實(shí)時(shí)增強(qiáng)圖像的高頻細(xì)節(jié)。
1 Laplacian算子
拉普拉斯算子是各向同性線性算子,二元函數(shù)f(x,y)的拉普拉斯變換定義為:
基本高通濾波模板中所有系數(shù)的和為0,如果在模板所覆蓋的區(qū)域內(nèi)像素的灰度值都相同或者灰度值的變化較為緩慢.則模板的輸出為0或輸出很小。人們常用的高通提升濾波方法,就是將原圖像乘以一個(gè)放大因子A,再減去低通濾波圖像。高通提升濾波可以表示為:
高通提升濾波圖像=A×原圖像-低通濾波圖像=(A-1)×原圖像+原圖像-低通濾波圖像=(A-1)×原圖像+高通濾波圖像
即:
式中:當(dāng)A=1時(shí),高通提升濾波就是基本的高通濾波;當(dāng)A>1時(shí),部分原圖像被加到高通濾波的結(jié)果上,這就恢復(fù)了部分高通濾波中丟失的低頻成分。因此,經(jīng)過(guò)高通提升濾波的圖像與原圖像更加相像,同時(shí)又對(duì)圖像的邊緣進(jìn)行了增強(qiáng)。
進(jìn)行模板卷積的主要步驟為:
(1)將模板在圖中漫游,并將模板中心與圖中某個(gè)像素位置重合;
(2)將模板上系數(shù)與模板下對(duì)應(yīng)像素相乘;
(3)將所有乘積相加;
(4)將和(模板的輸出響應(yīng))賦給圖中對(duì)應(yīng)模板中心位置的像素。
當(dāng)模板遍歷圖像中的每個(gè)像素就得到圖像濾波結(jié)果。實(shí)現(xiàn)Laplacian高通提升濾波的模板如圖1所示。
文獻(xiàn)[2]的實(shí)驗(yàn)證明,使用圖1(a)所示掩模能得到更好的銳化效果,所以在硬件實(shí)現(xiàn)時(shí)使用該掩模。實(shí)驗(yàn)中取A=1。
2 Laplacian算子的硬件實(shí)現(xiàn)及結(jié)果
使用Laplacian算子濾波是將模板與圖像做卷積運(yùn)算,然后將得到的結(jié)果取絕對(duì)值后,再進(jìn)行防治溢出(灰度值大于255)處理。所以在用硬件實(shí)現(xiàn)Laplacian算子時(shí)可分成三個(gè)步驟:構(gòu)造模板;使用模板對(duì)圖像進(jìn)行卷積運(yùn)算;對(duì)卷積后的結(jié)果做后處理。
2.1 硬件數(shù)據(jù)緩存模塊
要想得到3×3的方形模板窗,需要使用數(shù)據(jù)緩存器,在該設(shè)計(jì)中,調(diào)用宏功能模塊中的Shift register功能模塊就能實(shí)現(xiàn)這一功能,十分方便。
Shift register功能模塊,是一個(gè)可配置的具有抽頭(taps)輸出的移位寄存器,可實(shí)現(xiàn)功能如圖2(b)所示。
以處理大小為256×256的8位灰度圖像為例進(jìn)行討論。在對(duì)移位寄存器進(jìn)行配置時(shí),shiftin,shiftout設(shè)置為8位,3個(gè)抽頭。相鄰兩個(gè)抽頭相距256。為了方便控制,還需要為該模塊添加時(shí)鐘控制信號(hào),如圖2(a)所示。
圖2(b)中的行緩沖器分別是由256個(gè)8位移位寄存器構(gòu)成的寄存器鏈。當(dāng)圖像的第N行數(shù)據(jù)在像素時(shí)鐘同步下輸入到行緩沖器1后,隨著第N+1行圖像數(shù)據(jù)輸入到行緩沖器2中,第N行的圖像數(shù)據(jù)依次存入,而當(dāng)?shù)贜+2行圖像數(shù)據(jù)存入行緩沖器1后,行緩沖器2和行緩沖器3中分別存放的是第N+1行和第N行的圖像數(shù)據(jù),從而實(shí)現(xiàn)緩沖圖像數(shù)據(jù)的功能。這樣在像素時(shí)鐘的同步下,第N,N+1,N+2行的同一列數(shù)據(jù)分別從taps0x,taps1x,taps2x端輸出,為構(gòu)造3×3模塊提供了數(shù)據(jù)準(zhǔn)備。
2.2 卷積計(jì)算模塊
圖3是3×3圖像卷積運(yùn)算的原理圖??梢钥闯?,為了實(shí)現(xiàn)卷積運(yùn)算需要做乘法和加法運(yùn)算,如果直接采用分立的D觸發(fā)器和加法器以及乘法器來(lái)完成卷積運(yùn)算,結(jié)構(gòu)會(huì)很復(fù)雜。在此,采用宏功能模塊中的可編程乘加器模塊和可編程多路并行加法器模塊Parallel_add實(shí)現(xiàn)卷積運(yùn)算,大大簡(jiǎn)化了設(shè)計(jì)。
使用可編程多路并行加法器Parallel_add宏功能模塊時(shí),可以自由設(shè)計(jì)輸入數(shù)據(jù)位寬,累加數(shù)據(jù)個(gè)數(shù),定義累加輸入數(shù)據(jù)類型,定義時(shí)鐘控制端口,增加異步清零端口等,能快速便捷地生成所需的加法器模塊。為了實(shí)現(xiàn)卷積運(yùn)算中的加權(quán)和運(yùn)算,宏功能模塊生成的3個(gè)乘加器,每個(gè)乘加器包含3個(gè)乘法器和1個(gè)加法器,如圖4所示。圖像數(shù)據(jù)從dataa依次輸入,數(shù)據(jù)分別與固定的模板系數(shù)datab_0,datab_1,datab_2相乘。在該實(shí)驗(yàn)中,使用Verilog HDL語(yǔ)言為各datab設(shè)值,各值分別對(duì)應(yīng)模板中的權(quán)值,并將結(jié)果送給加法器完成加法運(yùn)算。
當(dāng)采用3個(gè)這樣類似的Altmult_add模塊并聯(lián)時(shí),便可實(shí)現(xiàn)Laplacian算子的運(yùn)算。
完成圖像卷積后需要對(duì)結(jié)果進(jìn)行處理,以防止結(jié)果出現(xiàn)負(fù)值或超過(guò)255范圍。使用QuartusⅡ提供的Lpm_abs宏功能模塊計(jì)算絕對(duì)值,可以解決出現(xiàn)負(fù)值問(wèn)題,而對(duì)超過(guò)255的值則均設(shè)定為255。
另外,自定義模塊如圖5所示,將它存于自定義宏功能庫(kù)中,在以后的設(shè)計(jì)時(shí),只需修改相關(guān)參數(shù)即可方便的調(diào)用。
2.3 實(shí)驗(yàn)結(jié)果
圖6(a)為一幅256×256的原始圖像,(b)為采用Matlab的Laplacian算子進(jìn)行濾波的結(jié)果,(c)為采用本文設(shè)計(jì)的Laplacian算子得到的結(jié)果。比較圖6(b)和(c)可以看出,該硬件算法取得了較好的效果。
3 結(jié) 語(yǔ)
這里利用QuartusⅡ軟件提供的宏功能模塊,通過(guò)配置調(diào)用的宏功能模塊來(lái)實(shí)現(xiàn)Laplacian算子,該方法既避免了自己編寫(xiě)大量程序代碼的繁瑣,又獲得較好的實(shí)現(xiàn)結(jié)果。最后通過(guò)與Matlab仿真結(jié)果相比較,證明了該設(shè)計(jì)的有效性。該設(shè)計(jì)方法方便、快捷,可以推廣到其他類型的模板設(shè)計(jì)中。