曾偉民,黃春暉,陳炳來
(福州大學(xué) 物理與信息工程學(xué)院,福建 福州 350002)
隨著數(shù)碼相機(jī)、拍攝手機(jī)的普及,CCD/CMOS圖像傳感器近年來得到廣泛的關(guān)注和應(yīng)用。對于專業(yè)相機(jī),使用3個(gè)傳感器,每一個(gè)像素點(diǎn)都可以直接獲得R,G,B 3個(gè)值,每個(gè)傳感器需要精確的機(jī)械控制,以便對應(yīng)各自的色彩通道,這是最昂貴的解決方法。在這種情況下,每個(gè)傳感器得到一幅完整的單通道圖像,最后再合成一幅全彩色圖像,而不會(huì)出現(xiàn)馬賽克現(xiàn)象。
一般數(shù)碼相機(jī)的傳感器(CCD或CMOS)約占整機(jī)總成本的10%~25%,為了減少成本,縮小體積,一般市場上的數(shù)碼相機(jī)大多采用單傳感器,即在傳感器的表面覆蓋一層色彩濾波陣列(Color Filter Array,CFA),其中 Bayer陣列在業(yè)界使用最為廣泛 (本文討論只針對此陣列),這樣一來每個(gè)像素點(diǎn)只能捕獲三基色R,G,B中的一個(gè),而缺失另外兩個(gè)色彩值,這時(shí)候得到的是一幅馬賽克圖像。為了得到全彩色的圖像,需要利用其周圍像素點(diǎn)的色彩信息來估計(jì)出缺失的另外兩種顏色,這種處理叫作色彩插值,也稱作彩色插值或去馬賽克。
經(jīng)過30多年的發(fā)展,學(xué)者們提出了各種各樣的色彩插值算法。本文對各種算法的優(yōu)、缺點(diǎn)進(jìn)行了深入的分析,并對Lu算法進(jìn)行改進(jìn),使之能夠應(yīng)用于實(shí)時(shí)FPGA硬件系統(tǒng)。
雙線性算法(Bilinear)[1],該算法始終在 3×3 窗口中求平均值,忽略了圖像的細(xì)節(jié)信息,以及圖像3個(gè)顏色通道之間的相關(guān)性,所以往往得不到滿意的插值效果,容易在邊緣處產(chǎn)生虛假色和彩色摩爾紋。
一階(Hibbard)[2],二階(Laroche)[3]微分算法,插值綠色通道G時(shí),進(jìn)行了邊緣檢測,插值紅/藍(lán)色通道(R/B)時(shí)利用不同顏色通道間的相關(guān)性(色差恒定性),因此插值效果較雙線性算法有了很大提高。但是,在插值通道G時(shí),沒有用到通道相關(guān)性,插值通道R/B時(shí),沒進(jìn)行邊緣檢測,故插值的準(zhǔn)確性不是很好。
自適應(yīng)插值算法(Adams-Hamilton)[4],對一階、二階微分算法進(jìn)行了改進(jìn),結(jié)合了一階微分和二階微分進(jìn)行邊緣檢測,插值時(shí)對三通道都進(jìn)行了邊緣檢測,并考慮了通道間的相關(guān)性,因此插值效果較一階、二階微分算法有了進(jìn)一步提高。
以上算法雖然取得了很好的插值效果,但是它們在插值過程中都采用對周圍像素值取平均的方式,即對參與插值的像素賦予相同的權(quán)重,或0.5或0.25,這種方式被稱為線性插值。此方式實(shí)現(xiàn)起來比較簡單,但實(shí)際圖像的很多細(xì)節(jié)并非周圍像素值取平均可以描述的,而是側(cè)重于某一個(gè)方向,因此用線性插值法進(jìn)行插值是不可取的。Kimmel算法[5]在結(jié)合邊緣檢測和色彩通道相關(guān)性的基礎(chǔ)上首次引入加權(quán)系數(shù)(即非線性插值),它根據(jù)梯度信息,對不同像素點(diǎn)賦予不同權(quán)重,非線性插值算法對邊緣具有很強(qiáng)的自適應(yīng)能力[6],因此Kimmel算法取得了非常好的插值效果。Lu算法[7]也屬于此類算法,是對Kimmel算法的改進(jìn)。首先,在加權(quán)系數(shù)的計(jì)算上,Lu算法采用Sobel算子和一維二階梯度算子相結(jié)合,計(jì)算簡單有效,避免了Kimmel算法中的復(fù)雜的開平方運(yùn)算;其次,在色彩通道相關(guān)性上,Lu算法采用的是色差恒定性,計(jì)算簡單有效,不像Kimmel算法采用的是色比恒定性,需要用到除法,計(jì)算量大,并且容易出現(xiàn)噪聲點(diǎn)。Lu算法是當(dāng)前常規(guī)算法中綜合性能最好的算法之一。
隨著新技術(shù)的產(chǎn)生與發(fā)展(如小波變換技術(shù),人工神經(jīng)網(wǎng)絡(luò)技術(shù)),出現(xiàn)了一些新的色彩插值算法(基于小波變換算法及基于神經(jīng)網(wǎng)絡(luò)算法),這類算法以新技術(shù)為基礎(chǔ),具有比常規(guī)算法更好的插值效果,但是這一類算法計(jì)算量非常巨大,不適合運(yùn)用于實(shí)時(shí)硬件系統(tǒng)。
通過以上的分析,Lu算法是能運(yùn)用于FPGA實(shí)時(shí)硬件系統(tǒng)綜合性能最好的算法。但是由于它采用了非線性插值方法,需要調(diào)用5個(gè)除法器,除法器是IC設(shè)計(jì)中最耗費(fèi)硬件資源的單元,運(yùn)算時(shí)間長,工作頻率低;此外,Lu算法對插值后的結(jié)果進(jìn)行了迭代修正,需要對插值結(jié)果進(jìn)行存儲(chǔ)。這些不僅浪費(fèi)大量的硬件資源,大大增加系統(tǒng)的成本,并且很難實(shí)時(shí)處理?;谶@些原因,本文對Lu算法進(jìn)行改進(jìn),在不明顯影響插值質(zhì)量的前提下,降低算法計(jì)算量,提高工作頻率,使之適合實(shí)時(shí)硬件系統(tǒng)。
按照Bayer模式的色彩濾波陣列,在有周期規(guī)律的采樣中,G像素的個(gè)數(shù)占像素總量的50%,R像素和B像素各占25%,G平面的像素?cái)?shù)目更多,會(huì)有更少的混淆現(xiàn)象,對細(xì)節(jié)的保存要比其他兩個(gè)平面要好,G平面的插值好壞直接影響了R/B通道的插值,而且人眼對綠色最為敏感,因此對綠色通道仍然采用非線性插值方法。本文采用乘法和對比相結(jié)合的方法近似代替除法運(yùn)算。由于R像素和B像素所占比例均只有25%,丟失的信息多,即使采用非線性插值算法,也無法很準(zhǔn)確地插值,即在R/B通道的插值上采用線性插值方法和非線性插值區(qū)別不大,因此在R/B通道上采用線性插值方法。另外,Lu算法的迭代修正步驟,雖然能減少偽彩色和鋸齒形失真,但是需要對圖像進(jìn)行存儲(chǔ),浪費(fèi)大量的硬件資源,大大增加系統(tǒng)的成本,而且很難實(shí)時(shí)實(shí)現(xiàn)。在Matlab仿真Kodak圖像數(shù)據(jù)庫中的24幅全彩圖像,通過對比修正前后的圖像,差異并不明顯。綜合考慮以上因素,本文不對插值后的圖像進(jìn)行迭代修正,而是將其偽彩色和鋸齒形失真當(dāng)成噪聲點(diǎn),留給后續(xù)的去噪步驟進(jìn)行處理。
1)插值R/B像素上的G分量
在邊緣檢測梯度計(jì)算上與Lu算法相同,仍采用Sobel算子和一維二階梯度算子相結(jié)合的方式。不同的是,Lu算法用4個(gè)不同方向梯度的倒數(shù)進(jìn)行權(quán)重因子計(jì)算,本文直接用梯度進(jìn)行計(jì)算,避免了4次除法運(yùn)算,以圖1在像素點(diǎn)B44上插值綠色分量為G^44為例進(jìn)行說明。
圖1 Bayer濾波陣列
由上可知在計(jì)算權(quán)重因子 α34′,α43′,α45′,α54′等仍然要用到除法,但是除法是不可取的,本文用乘法和對比相結(jié)合的方式近似計(jì)算權(quán)重因子。以α34′為例進(jìn)行說明:首先,將分母α平均分成2n份(這樣可以用移位進(jìn)行除運(yùn)算),n的值取決于所需要的近似精度,則權(quán)重系數(shù)分別為,共2n個(gè)等級,精度為本文取n=5,即將α平均分成32份,精度為0.015625;其次通過對比,判斷分子 α43,α45,α54的落點(diǎn)位置 P,選擇與之最近的權(quán)重系數(shù)近似代替真實(shí)權(quán)重系數(shù)。α43′,α45′計(jì)算方法與 α34′一樣,α54′則多了兩個(gè)權(quán)重系數(shù)0和 1。
2)插值R/B像素點(diǎn)的B/R值
如圖 1所示,以插值B44上的為例,由于B44的斜方向上采樣到4個(gè)R分量,信息較多,采用較好的算法則能獲得較好的插值效果,因此采用自適應(yīng)算法進(jìn)行插值,具體算法如下:
定義:
3)插值G像素點(diǎn)的R/B分量
由于G像素點(diǎn)鄰域內(nèi)所采樣到的R/B分量很少,精確的算法對插值效果的提高不明顯,故只利用色差恒定性原理進(jìn)行插值,如圖1所示,以插值像素點(diǎn)G34上的,為例,其計(jì)算方法為
分別采用Lu算法和改進(jìn)后的Lu算法對Kodak圖像數(shù)據(jù)庫中的24幅全彩圖像在Matlab上進(jìn)行了插值,為了更準(zhǔn)確地對比兩種算法的特性,筆者統(tǒng)計(jì)了整幅圖像的全局峰值信噪比和邊界像素點(diǎn)的峰值信噪比,在邊界檢測上使用的是Candy算子,通過對比數(shù)據(jù)發(fā)現(xiàn):改進(jìn)后的算法在G通道上的插值略遜于原算法,此差距可通過增加近似計(jì)算的精度來減??;在R/B通道的插值上,改進(jìn)后的算法與原算法不相上下。觀察兩種算法插值恢復(fù)的圖像,幾乎無差異。即使差異最為明顯的Lighthouse圖像上的柵欄,差異也不會(huì)很明顯,截取后的柵欄對比如圖2所示。
圖2 Lighthouse柵欄插值效果對比
編寫兩種算法的Verilog HDL代碼。為了突出重點(diǎn),兩種算法的代碼均未考慮數(shù)據(jù)的讀取、存儲(chǔ)和接口。由于迭代運(yùn)算過程繁瑣,接口復(fù)雜,并且不影響問題的說明,為簡化起見,Lu算法的代碼不包含迭代修正過程。在Quqrtus II上選用Altera Cyclone II器件族中的EP2C15AF484C6綜合實(shí)現(xiàn):Lu算法消耗了1599個(gè)LE,331個(gè)寄存器,4個(gè)內(nèi)嵌乘法器;改進(jìn)后的算法消耗了852個(gè)LE,280個(gè)寄存器,7個(gè)內(nèi)嵌乘法器。時(shí)序分析結(jié)果:在 Fast model(極限頻率)下,Lu 算法為 72.5 MHz,改進(jìn)后算法為 240 MHz;在 Slow model(保守頻率)下,Lu算法為31.25 MHz,改進(jìn)后算法為112.5 MHz。仿真報(bào)告如圖3所示。
圖3 仿真報(bào)告圖
通過深入分析目前存在的各種色彩插值算法的優(yōu)缺點(diǎn),并對Lu算法進(jìn)行了改進(jìn),避免了除法運(yùn)算和迭代,使之適合FPGA硬件系統(tǒng)的實(shí)時(shí)實(shí)現(xiàn)。Matlab仿真結(jié)果表明,改進(jìn)后的Lu算法在插值效果上略遜于原算法;在Quartus II上仿真表明,改進(jìn)后的算法節(jié)省了大量的LE和寄存器等硬件資源,大大提高了工作頻率,很好地折中了插值效果和硬件實(shí)現(xiàn)難度之間的矛盾。
[1]HIBBARD R H.Apparatus and method for adaptively interpolating a full color image utilizing luminance gradients[EB/OL].[2009-06-10].http∶//www.freepatentsonline.com/5382976.html.
[2]LAROCHE C A,PRESEOTT M A.Apparatus and method for adaptively interpolating a full color image utilizing chrominance gradients[EB/OL].[2009-06-10].http∶//www.freepatentsonline.com/5373322.html.
[3]HAMILTON F,ADAMS J E.Adaptive color plane interpolation in single sensor color electronic ceamera[EB/OL].[2009-06-10].http://www.freepatentsonline.com/5652621.html.
[5]KIMMEL R.Demosaicking∶image reconstruction from color CCD samples[J].IEEE Trans.Image Processing,1999,8(9):1221-1228.
[6]劉曉松,楊新,文逡,等.一種用于數(shù)字圖像傳感器的彩色插值算法[J].中國圖象圖形學(xué)報(bào),2003,8(5):516-521.
[7]LU Wenmiao,TAN Yappeng.Color filter array demosaicking:new method and performance measures[J].IEEE Trans.Image Processing,2003,12(10):1194-1210.