王 麓,徐弘基,王若溪,孫 暢,常玉春
(吉林大學 電子科學與工程學院,吉林 長春 130012)
隨著CMOS圖像傳感器的飛速發(fā)展,在實時圖像處理和目標識別中大多采用單CMOS Bayer格式圖像傳感器作為成像元件進行彩色圖像捕獲,再將Bayer圖像轉換成為RGB圖像數(shù)據(jù),用于實時圖像記錄、處理及數(shù)據(jù)傳輸,轉換方式大多采用外部處理器來實現(xiàn),如果處理器的速度足夠快,可以實現(xiàn)實時色彩還原,但隨著分辨率和幀頻的大幅度增加,目前的色彩還原的圖像處理算法很難滿足實時性的需要,例如Kimmel的加權系數(shù)法[1]、AHD算法[2]以及Gunturk的基于小波變換的迭代方法[3]等等。盡管這些算法能做到較為準確的色彩還原,但由于這些算法的復雜程度過高,所消耗的資源過大,無法實現(xiàn)實時色彩還原。所以本文提出一種新的基于突變檢測機制及色差空間理論的顏色插值算法,旨在解決色彩還原程度和計算復雜二者之間的矛盾,能夠滿足大面陣高幀頻數(shù)字相機在實時圖像處理中的應用。
兩種傳統(tǒng)的Bayer 插值算法分別是:雙線性插值[4]和邊緣檢測算法[5]。
圖1 Bayer格式圖像示意圖Fig.1 Bayer format image diagram
根據(jù)圖1,雙線性插值算法利用目標位置附近距離最小的相同顏色像素點的均值對該點進行插值計算。計算規(guī)則如下:
(1)
(2)
(3)
(4)
通過這樣簡單的計算,會使最終的色彩還原有較大失真。
邊緣檢測算法是一種基于梯度插值的算法,以B33為例,計算規(guī)則如下:
水平方向梯度表達式為
α=|G32-G34|,
(5)
豎直方向梯度表達式為
β=|G23-G43|,
(6)
通過比較兩個方向梯度值的大小最終確定G33的表達式:
(7)
它在一定程度上弱化了利用梯度分量的大小還原出G分量的值,再根據(jù)該分量的值,利用雙線性插值恢復出R分量和B分量的像素值。
經(jīng)典色彩還原算法,對視場邊緣像素色彩還原時需要單獨處理,不能用同一的算法實現(xiàn)快速的流式處理。對于實時圖像處理具有較大影響。同時在突變區(qū)域會產(chǎn)生色彩混疊效應,圖像邊緣色彩還原錯誤。
為了簡化整幅圖像邊界處像素點的計算,適合用FPGA實現(xiàn)實時色彩還原,本文采用了一種擴展卷邊的圖像預處理方法。即采用每幅圖像的左右及上下的邊緣2個像素單位作鏡像,添加到原圖像上,假設原圖像的大小m×n,利用該規(guī)則將原圖像的行列值均擴大4個像素單位,即擴大后的圖像大小為 (m+4)×(n+4)個像素單位。圖像擴大前的像素值分布示意圖如圖2所示,圖像擴大后的像素值分布示意圖如圖3所示。
對于預處理后的圖像,可以利用一套算法實現(xiàn)對整幅圖像的色彩還原,無需判斷該像素是否
圖2 圖像擴大前像素值分布示意圖Fig.2 Distribution diagram of pixel values before image expansion
圖3 圖像擴大后像素值分布示意圖Fig.3 Distribution diagram of pixel values after image expansion
屬于該幅圖像的邊緣。也確保了整幅圖像的色彩還原沒有邊緣輪廓效應。也提高了計算效率,更適合流式處理。最后將色彩還原后的圖像數(shù)據(jù)每個邊緣區(qū)域去掉兩行與兩列。
以圖1的B33點為例,水平方向梯度表達式為:
?H=|2B33-B31-B35|+|G32-G34|,
(8)
即利用向量[B31G32B33G34B35]與向量[-1 1 2 -1 -1]T做乘積運算,豎直方向梯度表達式為:
?V=|2B33-B13-B53|+|G23-G43|,
(9)
即利用向量[B13G23B33G43B53]與向量[-1 1 2 -1 -1]T做乘積運算。通過兩個方向梯度大小的比較,確定該點水平方向邊緣值和豎直方向邊緣值[6-7]。依據(jù)式(8)和式(9),突變處像素值的計算規(guī)則如下:
(10)
得出B33點處水平方向邊緣值和豎直方向邊緣值后,取一個像素點5×5的鄰域,統(tǒng)計該鄰域內水平方向邊緣值和豎直方向邊緣值并帶入下式,得:
flag_H=[H(i-2,j)H(i-1,j)H(i,j)
H(i+1,j)H(i+2,j)][1 0 1 0 1]T,
(11)
flag_V=[V(i,j-2)V(i,j-1)V(i,j)
V(i,j+1)V(i,j+2)][1 0 1 0 1]T,
(12)
從而得到該點處的水平/豎直方向梯度標志位的值。
根據(jù)參考文獻[6]可知,每幅圖像都具有平滑的特性,只有在邊緣區(qū)域會有可能出現(xiàn)色差突變的情況。因此可以得到如下結論:圖像邊緣處的色差梯度值將遠大于圖像其他地方的色差梯度值。所以,本文根據(jù)此結論選取色差梯度值小的方向作為插值方向。故利用式(11)和式(12),通過對比水平梯度標志位與豎直梯度標志位值的大小的方法,確定B33點處的插值方向,求出G33如公式(13)所示。
(13)
當紅、藍通道的綠色分量已經(jīng)求得之后,就利用圖像平滑特性,根據(jù)色差法求得藍(紅)色通道紅(藍)色缺失點像素值[8]。正如前文所提到過的,每幅圖像只有在邊緣區(qū)域才會出現(xiàn)色差突變,這樣就可以通過求某點周圍的色差值的均值來等效替代該點處的色差值,進而計算得到紅、藍通道的對應缺失分量[9]。具體方法如下(以計算某藍色通道的紅色缺失分量為例):
ΔCr(i-1,j-1)=G(i-1,j-1)-R(i-1,j-1),
(14)
ΔCr(i-1,j+1)=G(i-1,j+1)-R(i-1,j+1),
(15)
ΔCr(i+1,j-1)=G(i+1,j-1)-R(i+1,j-1),
(16)
ΔCr(i+1,j+1)=G(i+1,j+1)-R(i+1,j+1),
(17)
利用式(14)~(17)可以計算得出某藍色通道處周圍右上方(45°)、右下方(135°)、左下方(225°)、左上方(315°)4個方向的紅、綠色差分量。根據(jù)圖像平滑特性,有下式成立:
ΔCr(i,j)=[ΔCr(i-1,j-1)+ΔCr(i-1,j+1)+
ΔCr(i+1,j-1)+ΔCr(i+1,j+1)]/4,
(18)
通過ΔCr(i,j)=G(i,j)-R(i,j)可以得到:
R(i,j)=G(i,j)-ΔCr(i,j),
(19)
至此,某藍色通道的紅色缺失分量得以求取。某紅色通道的藍色缺失分量的計算方法同上。
綠色通道紅、藍缺失分量插值算法類似于前文的藍(紅)色通道紅(藍)色缺失分量插值算法,但由于Bayer圖像通道顏色的分布規(guī)律,每個綠色通道周圍只能存在兩個相同的通道顏色,所以在計算時只需計算兩個相同通道顏色的色差值,再取其均值,帶入色差公式,即可求得綠色通道紅、藍缺失分量。
為了驗證本算法的性能,本文采用恢復馬賽克圖像最常用的兩種指標—峰值信噪比(peak signal-to-noise ratio, PSNR)和均方誤差(mean squared error,MSE)來對色彩恢復后的圖像進行分析。PSNR和MSE定義如下:
(20)
(21)
其中,M和N代表圖像的大小為M×N個像素單位,B代表編碼一個像素所需要的二進制位數(shù)(B取8),f0(x,y,i)代表原始圖像在x行y列的強度分量,fr(x,y,i) 代表恢復后圖像在x行y列的強度分量。
通過以上的計算方法,不難發(fā)現(xiàn),PSNR的值越大,代表圖像色彩還原出的水平越高[10]。
圖4 不同算法的PSNR結果統(tǒng)計Fig.4 Statistics of PSNR results by different algorithm
幾種不同算法恢復結果的PSNR統(tǒng)計如圖4所示。我們可以很容易發(fā)現(xiàn),從PSNR 的角度來看,本文的算法明顯優(yōu)于其它幾種算法,尤其是在細節(jié)多且復雜的情況下,這種優(yōu)勢更為明顯。
圖5是經(jīng)過不同算法進行色彩還原后,從目測結果可知經(jīng)過雙線性插值法(BI)還原后的圖5(b)在色彩還原方面有很大程度上的偏差,距離原圖像色彩還有較大差距;經(jīng)過參考文獻[5]還原后的圖5(c)會產(chǎn)生Zipper效應[11],且在圖像邊緣位置出現(xiàn)較明顯的不規(guī)則區(qū)域,使得圖像色彩突變部分出現(xiàn)較為明顯的失真;經(jīng)過參考文獻[6]還原后的圖5(d)會在某些區(qū)域會產(chǎn)生小面積的色彩失真,影響最終成像;經(jīng)過本文算法還原后的圖5(e)的色彩基本和原圖保持一致,并且細節(jié)豐富、銳化了圖像紋理并大大減少了Zipper效應,極大程度上改善了目標圖像的視覺質量,達到了預期的效果。
圖5 不同算法對應的色彩恢復結果。(a)原圖; (b)BI 方法; (c)參考文獻[5]方法; (d) 參考文獻[6]方法; (e) 本文算法。Fig.5 Color recovery results of different algorithm.(b)Original figure. (b)BI method. (c)Ref.[5]method. (d) Ref.[6]method. (e) Proposed meth.
圖6 算法硬件實現(xiàn)流程圖Fig.6 Flow diagram of the hardware implementation of the algorithm
本算法在基于Virtex-6的實時圖像處理平臺實現(xiàn),通過帶有預處理的自適應插值方式對Bayer圖像進行色彩恢復,具體過程如下:接收分辨率為12k×5k的CMOS圖像傳感器中的Bayer圖像數(shù)據(jù),通過FPGA內部的仲裁機制把數(shù)據(jù)存儲在存儲器中。然后利用Virtex-6的性能優(yōu)勢對采集到的圖像進行色彩恢復的相關圖像處理過程。經(jīng)過處理的圖像再根據(jù)后續(xù)的需要通過Camera Link接口或者DVI接口協(xié)議進行后續(xù)傳輸。同時,該系統(tǒng)基于單片XC6VLX240T FPGA進行設計,并預留了豐富的外部接口,以滿足后續(xù)的升級、擴展等需求。表1為采用本文算法實現(xiàn)12k×5k Bayer數(shù)據(jù)還原時FPGA資源的使用情況,從表中可以看出此算法占用資源少,執(zhí)行效率高,適合用FPGA做并行處理[12]。
圖7 硬件實現(xiàn)平臺Fig.7 Hardware implementation platform
表1 FPGA資源利用率Tab.1 FPGA resource utilization ratio
本文提出了一種基于FPGA實現(xiàn)的Bayer圖像色彩還原方法,與傳統(tǒng)的雙線性插值和梯度插值算法相比稍顯復雜,但由于其巧妙的加入了圖像邊界處的預處理,令其可以與內部像素點運算方法一致,無需考慮判斷像素點位置。各個步驟的運算也充分考慮到了每個像素點中R、G、B 3種顏色的關系以及相鄰像素點的平滑特性,通過對5×5鄰域內特定方向梯度值的統(tǒng)計,大大消除傳統(tǒng)方法所帶來的色彩混疊錯誤,盡可能還原出更高精度的畫面色彩。在完成色彩還原的同時,做到提高計算效率并降低復雜度。經(jīng)過色彩還原后的圖像具有邊界清晰,細節(jié)豐富的特點且滿足項目的實時性要求。實驗結果表明,利用該方法可以實現(xiàn)12k×5k@10 f/s的圖像數(shù)據(jù)實時色彩還原。