摘 要:實(shí)現(xiàn)了基于FPGA 的雙線性CFA 插值算法。該算法的處理對(duì)象是每個(gè)像素為8 bit的XGA @15 Hz 的Bayer 模板數(shù)據(jù),目的是能得到每個(gè)像素是24 bit 的XGA @15 Hz 的彩色圖像數(shù)據(jù)。輸入的數(shù)據(jù)先進(jìn)入緩存模塊,緩存模塊是由FPGA 內(nèi)部的雙口的RAM 構(gòu)成,從緩存中輸出的數(shù)據(jù)被分成奇行組和偶行組,然后奇行組的數(shù)據(jù)經(jīng)選擇器進(jìn)入奇行奇列運(yùn)算塊和奇行偶列運(yùn)算塊,偶行組的數(shù)據(jù)經(jīng)選擇器進(jìn)入偶行奇列運(yùn)算塊和偶行偶列運(yùn)算塊,最后在插值控制模塊的作用下,各運(yùn)算塊處理的數(shù)據(jù)經(jīng)輸出選擇器輸出。
像數(shù)碼相機(jī)這樣的數(shù)字圖像設(shè)備,考慮到成本和包裝, 輸出的一般是貝爾(Bayer ) 模板[1 ] CFA(Color Filter Array) 圖像,需要通過CFA 插值算法來獲得全彩圖像。
在實(shí)現(xiàn)算法時(shí),通常需要專用的DSP (digital signal processing) ,后然采用C 語(yǔ)言或者其他語(yǔ)言編程進(jìn)行實(shí)現(xiàn);隨著半導(dǎo)體技術(shù)的發(fā)展, FPGA (field pro-gramming gate array) 作為可編程芯片,其集成度也已達(dá)上千萬(wàn)門, FPGA 的可編程特性使其在SOC( system on a chip) 中發(fā)揮著越來越重要的作用,這樣就產(chǎn)生了用FPGA 直接實(shí)現(xiàn)算法,而不需要再用價(jià)格昂貴的DSP ,筆者就嘗試基于FPGA 實(shí)現(xiàn)CFA插值算法。
1 雙線性插值算法
雙線性插值算法[2 ,3 ] 是非自適應(yīng)算法的一種,輸出的圖像使用鄰近像素中相同顏色成份做線性平均計(jì)算來補(bǔ)償每個(gè)像素丟失的顏色。如圖1 中,像素(2 , 3) 僅有藍(lán)色成份。因此丟失的綠色部份可通過求其上、下、左、右像素的綠色成份的平均值得到。同樣,丟失的紅色可通過對(duì)相鄰四個(gè)對(duì)角上的像素的紅色成份求平均值。這種算法可以被視頻所接受,因?yàn)槿祟惖难劬Σ蝗菀自趧?dòng)態(tài)的兩幀視頻中查覺到模糊。
2 雙線性插值的模塊化設(shè)計(jì)
整個(gè)設(shè)計(jì)采取自頂向下的模塊化設(shè)計(jì)[4 ] 方法,代碼采用VHDL 語(yǔ)言進(jìn)行編寫,頂層模塊定義為CFA 插值模塊,定義輸入輸出接口信號(hào)、復(fù)位、時(shí)鐘信號(hào),并且描述了內(nèi)部各子模塊的邏輯連接關(guān)系。頂層的下層是由3 個(gè)模塊構(gòu)成,框圖如圖2 所示,設(shè)計(jì)內(nèi)容如下:
1) 緩存控制模塊。設(shè)計(jì)了兩個(gè)控制器,其中一個(gè)是寫控制器,另一個(gè)是讀控制器。寫控制器主要由一個(gè)12 位的計(jì)數(shù)器構(gòu)成,用高兩位對(duì)4 個(gè)存儲(chǔ)體進(jìn)行選擇,低10 位用來產(chǎn)生相應(yīng)的地址,配合輸入的寫信號(hào)對(duì)緩存的進(jìn)行寫操作。讀控制器主要由一個(gè)10 位的計(jì)數(shù)器構(gòu)成,產(chǎn)生對(duì)4 個(gè)存儲(chǔ)體進(jìn)行讀操作的地址。
在此模塊的設(shè)計(jì)中,考慮到實(shí)時(shí)處理的因素,在每一幀圖像進(jìn)來時(shí)先寫滿兩個(gè)存儲(chǔ)體,每個(gè)存儲(chǔ)體的長(zhǎng)度剛好等于每行有效像素的個(gè)數(shù),也既是存儲(chǔ)了兩行有效像素,在寫到第3 行的第3 個(gè)有效像素時(shí),進(jìn)行存儲(chǔ)體的讀操作。
緩存存放數(shù)據(jù)的順序是這樣的,最初的一幀圖像的第1 行有效數(shù)據(jù)存放在1 號(hào)存儲(chǔ)體,依次存放下去,第5 行數(shù)據(jù)再存放到1 號(hào)存儲(chǔ)體,這樣循環(huán)下去即可,存完一幀后,寫控制器復(fù)位,下一幀來時(shí)按上述操作進(jìn)行,如此往復(fù)。
緩存控制器對(duì)緩存的寫操作是同一時(shí)刻只對(duì)一個(gè)存儲(chǔ)體進(jìn)行操作,而讀操作是對(duì)4 個(gè)存儲(chǔ)體同時(shí)進(jìn)行。
2) 緩存模塊。該模塊由4 個(gè)相同的1024 ×8 bit的存儲(chǔ)體構(gòu)成,每個(gè)存儲(chǔ)體由FPGA 內(nèi)部的2 個(gè)BLOCKRAM構(gòu)成,每個(gè)存儲(chǔ)體都是雙口的SRAM ,把其中一個(gè)端口定義為只寫,另一個(gè)端口定義為只讀。每個(gè)存儲(chǔ)體的每個(gè)端口靠緩存控制模塊發(fā)來的讀寫使能信號(hào)來進(jìn)行相應(yīng)操作。對(duì)這4 個(gè)存儲(chǔ)體進(jìn)行編號(hào),依次為1、2、3、4 號(hào)存儲(chǔ)體,其中的1、3 號(hào)存儲(chǔ)體在這里稱為奇行,2、4 號(hào)存儲(chǔ)體在這里稱為偶行。
3) 插值模塊。此模塊由2 個(gè)子模塊構(gòu)成,插值控制模塊和插值運(yùn)算模塊。
插值控制模塊先對(duì)存儲(chǔ)體輸入的數(shù)據(jù)線進(jìn)行組合,并對(duì)組合后的數(shù)據(jù)線編號(hào),如圖3 所示,圖3 中方框內(nèi)的數(shù)字分別代表各個(gè)存儲(chǔ)體輸出的數(shù)據(jù)線,經(jīng)過這樣組合后,就得到24 位寬的數(shù)據(jù)線,并且數(shù)據(jù)線的高低位也是如圖示的順序,以1 組為例,存儲(chǔ)體4 的數(shù)據(jù)線的最高位是組合后的最高位,存儲(chǔ)體2 的數(shù)據(jù)線的最低位是組合后的最低位。在這里,把1 、3 組稱為奇行組,2 、4 組稱為偶行組。
插值控制模塊內(nèi)部有一個(gè)12 位的計(jì)數(shù)器,最高位控制進(jìn)入插值模塊的數(shù)據(jù)是1 、2 組還是3 、4 組,奇偶行組的數(shù)據(jù)分別進(jìn)入各自的3 級(jí)寄存器組,如圖4 所示。
?
評(píng)論