一種改進(jìn)的圖像重組算法及其硬件實(shí)現(xiàn)
本文在kimmel算法的基礎(chǔ)上進(jìn)行了如下的改進(jìn):
(1) 待重組圖像像素與周邊像素的關(guān)聯(lián)性進(jìn)一步增強(qiáng),從而改善圖像的邊沿特性。
在kimmel算法中梯度簡單地以兩個(gè)像素的某個(gè)分量差絕對(duì)值表示,本文提出的方法是用一個(gè)相應(yīng)方向上更大范圍窗口的像素點(diǎn)的差的平均值來代替原來梯度。
例如,在kimmel算法中,如圖1,D=|G[5,5]□G[6,6]|,用本文的方法則為:
這樣可進(jìn)一步加強(qiáng)所求像素點(diǎn)與周邊像素已知分量的關(guān)聯(lián)性,從而減弱混淆現(xiàn)象。
(2) 修正kimmel算法在G分量缺少時(shí)的缺陷。
在kimmel算法中,在G很小的區(qū)域,兩像素的G比例就會(huì)變得很大,這樣會(huì)造成圖像失真和放大噪聲。為此,本文在利用G計(jì)算R、B時(shí),可給G設(shè)一閾值;此值越大,圖像質(zhì)量越差;此值越小,在G較小區(qū)域的圖像失真就越嚴(yán)重;因此,此值的設(shè)定要經(jīng)過反復(fù)的仿真試驗(yàn),找到合適的平衡點(diǎn),本文經(jīng)過實(shí)驗(yàn)對(duì)比各參數(shù)下的效果,將此值選擇為40~60。
(3) 改變kimmel算法所有像素都重新計(jì)算其三分量值的做法。
kimmel的算法會(huì)改變每個(gè)像素三個(gè)分量的值,本算法保留原來該像素的已知值,從而可以保留原始圖像更多的信息,提高了圖像質(zhì)量。由于本算法要在ASIC上實(shí)現(xiàn),在不影響圖像總體質(zhì)量的前提下,應(yīng)盡量簡化某些運(yùn)算,節(jié)省硬件資源。
①本文在求E時(shí)不用開方倒數(shù)的方式,而采用查表的方式,即一個(gè)范圍內(nèi)的D值對(duì)應(yīng)一個(gè)E值,只要所設(shè)的值能達(dá)到“D大則E小”的效果便可;
②求D時(shí)所需的除以21/2的運(yùn)算可轉(zhuǎn)化成近似移位相加。
本算法涉及了大量的算術(shù)運(yùn)算,而且計(jì)算中像素相關(guān)性的要求需要存儲(chǔ)大量像素,所以硬件實(shí)現(xiàn)必須適當(dāng)減少硬件資源和RAM的使用量,從而降低ASIC的面積,本文提出如下的解決方法。
4.1 流水線式的運(yùn)算處理
由式(1)、式(2)可見,計(jì)算插入的R、G、B值要經(jīng)過大量的運(yùn)算,而傳感器送過來的數(shù)據(jù)是實(shí)時(shí)的,對(duì)其處理也必須是實(shí)時(shí)的,也就是說進(jìn)來像素的分量值就要送出一個(gè)像素的R、G、B值。假設(shè)模塊的主頻率和傳感器送來的數(shù)據(jù)頻率分別為48MHz和12MHz,則在四個(gè)周期就要輸出一個(gè)像素的R、G、B值。顯然,四個(gè)48MHz時(shí)鐘周期是不可能完成如此多的運(yùn)算的。
本文采用的方法是把眾多運(yùn)算分成m個(gè)步驟完成,而每個(gè)步驟都占n個(gè)周期,一個(gè)步驟完成的結(jié)果在下一個(gè)n個(gè)周期運(yùn)用計(jì)算,如此一級(jí)一級(jí)的計(jì)算,輸入與輸出都是實(shí)時(shí)的,其設(shè)計(jì)思想近似于計(jì)算機(jī)架構(gòu)中的流水線結(jié)構(gòu)。其中m和n要根據(jù)模塊時(shí)鐘與傳感器輸出數(shù)據(jù)的頻率的比例關(guān)系以及所設(shè)計(jì)ASIC的工藝水平對(duì)時(shí)序的限制來確定。此方法可使此模塊面積減為原始設(shè)計(jì)的1/2左右。以計(jì)算R[5,5](像素坐標(biāo)如圖1)為例:步驟1:求得G[4,3],G[4,5],G[6,3],G[6,5],G[4,7],G[6,7];步驟2:求得R[5,4]和R[5,6];步驟3:求得R[5,5],這樣,每個(gè)步驟都有4個(gè)周期去完成,就可以滿足模塊的實(shí)時(shí)性。其中步驟1可再分為前兩個(gè)周期計(jì)算G[4,3],G[4,5]和G[6,3],后兩個(gè)周期計(jì)算G[6,5],G[4,7],G[6,7],從而復(fù)用其中除法器、加法器和乘法器,使該運(yùn)算占用資源減少到一半。同樣道理,計(jì)算R[5,4]和R[5,6]時(shí)也可以復(fù)用資源,分別在兩個(gè)周期內(nèi)完成其運(yùn)算。
4.2 堆棧式的RAM操作
此算法要求存儲(chǔ)9×9窗口大小的像素信息,也就是要存下9行的傳感器送來的數(shù)據(jù)。本文提出的方法只需要存8行的像素信息即可,但要配合一個(gè)9×9的寄存器陣列實(shí)現(xiàn)。下面以實(shí)例說明RAM操作過程:當(dāng)?shù)?行數(shù)據(jù)要送來時(shí),前8行數(shù)據(jù)已按順序存儲(chǔ)在RAM中。當(dāng)傳感器送來G[1,9]時(shí),模塊要進(jìn)行以下工作:(1)把RAM第1列數(shù)據(jù)讀出;(2)然后把第1列后7行的數(shù)據(jù)連同G[1,9]寫到RAM的第1列中,同時(shí)把第1列全部數(shù)據(jù)連同G[1,9]寫到9x9的陣列的第一列中,這樣既保存了第1行的數(shù)據(jù),又保證第9行數(shù)據(jù)能寫到RAM里,相當(dāng)于將RAM數(shù)據(jù)往里推,丟去第1行數(shù)據(jù),推入第9行的數(shù)據(jù)。如此類推,就可以減少一行存儲(chǔ)資源。
5.仿真與驗(yàn)證
本文基于攝像頭控制器芯片的開發(fā)平臺(tái)進(jìn)行了仿真驗(yàn)證,并比較了改進(jìn)的算法與傳統(tǒng)算法的優(yōu)劣。
此模塊通過了功能仿真、DC工具時(shí)序、面積等分析,并在FPGA板上通過接傳感器,經(jīng)JPEP壓縮,由USB傳輸?shù)接?jì)算機(jī)驗(yàn)證其效果。本文采用Syn-opsys公司的DC compiler分析了各算法實(shí)現(xiàn)的面積代價(jià)。同時(shí),本文針對(duì)幾種算法的圖像還原能力作了分析:用線性方法、kimmel方法和本算法處理同一張圖片轉(zhuǎn)化的bayer格式圖片,設(shè)R(x,y)為原圖像素值,r(x,y)為處理后像素值:
設(shè)滿足(3)式的點(diǎn)為還原良好點(diǎn),其個(gè)數(shù)為n,本文所用測(cè)試圖片為640×480大小,令h=n/640×480為算法的還原程度判斷。
圖5和表1是幾種Demosaicing算法的仿真結(jié)果圖片及其相應(yīng)的h值和面積代價(jià),可以看到本文提出的方法的圖像質(zhì)量要比其他算法的好,尤其在高頻時(shí),混淆現(xiàn)象得到了很好的改善。
6 結(jié)論
本文在詳細(xì)分析傳統(tǒng)算法的優(yōu)劣基礎(chǔ)上,提出了新的圖象重組算法,而流水線式分時(shí)復(fù)用資源的實(shí)現(xiàn)方法節(jié)省了接近一半的資源,很好地克服了模塊實(shí)時(shí)性要求,主頻時(shí)鐘限制和demosaicing算法復(fù)雜性帶給硬件實(shí)現(xiàn)資源成本高的問題。
評(píng)論