王 健, 應(yīng) 駿, 曾維軍, 曾 爽
(上海師范大學(xué) 信息與機(jī)電工程學(xué)院,上海 200234)
?
基于鄰近插值法還原Bayer RGB的FPGA實現(xiàn)
王健, 應(yīng)駿, 曾維軍, 曾爽
(上海師范大學(xué) 信息與機(jī)電工程學(xué)院,上海 200234)
圖像傳感器在采集每一個像素時僅采集它的R、G、B其中一種顏色分量的強(qiáng)度信息.在彩色數(shù)字圖像系統(tǒng)中,需對傳感器圖像進(jìn)行實時處理和顏色插值.鄰近插值算法的時間復(fù)雜度和空間復(fù)雜度都較小,可以通過流處理實現(xiàn),這使得它容易在FPGA上實現(xiàn)且節(jié)省硬件資源.在進(jìn)行硬件實現(xiàn)之前首先通過MATLAB對鄰近插值法的還原效果進(jìn)行驗證.硬件設(shè)計中使用移位寄存器連接FIFO的架構(gòu),并使用標(biāo)準(zhǔn)Verilog代碼編寫實現(xiàn),最終用Modelsim仿真驗證設(shè)計.
鄰近插值法; 流處理; Bayer RGB; FPGA
圖1 人眼光譜響應(yīng)曲線
圖像傳感器,是組成數(shù)字?jǐn)z像頭的重要組成部分.根據(jù)原件的不同,可分為電荷耦合元件(CCD)和金屬氧化物半導(dǎo)體元件(CMOS).但是不論對于何種類型的圖像傳感器來說,它們在采集每一個像素時都僅采集它的R、G、B其中一種顏色分量的強(qiáng)度信息.Bayer模式是目前應(yīng)用最為廣泛的像素分布格式,它允許從一個單獨平面中得到彩色圖像[1].在傳感器和鏡頭之間有一個CFA(Color Filter Array)濾鏡.CFA濾鏡的每一個濾光單元和傳感器像素對應(yīng),光線透過CFA濾鏡投射在傳感器上.CFA圖像的結(jié)構(gòu)特點是在CFA圖像上每一行每一列的綠色位置是間隔排列的,且綠色分量占了一半[2].這是因為眼睛對綠色分量最敏感,能夠辨別更多的細(xì)節(jié),這也是綠色的特性所決定的.如圖1所示,它是電磁波的可見光譜中的中波部分,其波長是500~570 nm,綠光在光波中占有重要地位.并且綠色和亮度也具有較強(qiáng)的相關(guān)性[3].
在Bayer模式中,紅色分量的采樣率為25%,藍(lán)色分量的采樣率為25%,綠色分量的采樣率最高為50%,其排列順序如圖2所示.紅色分量僅出現(xiàn)在奇數(shù)行,偶數(shù)列.藍(lán)色分量僅出現(xiàn)在偶數(shù)行、奇數(shù)列.綠色分量呈菱形分布[4].
2.1插值法簡介
圖2 Bayer彩色排列格式
在彩色數(shù)字圖像系統(tǒng)中,需對傳感器圖像進(jìn)行顏色插值.好的插值方法可以提高圖像質(zhì)量,簡化硬件實現(xiàn)的難度.隨著國內(nèi)外學(xué)者的深入研究,最為流行的幾種插值法有鄰近插值法、雙線性插值法、邊緣差值法、中值濾波插值法等,還有許多算法使用了小波變換和空間域轉(zhuǎn)換方法,其優(yōu)點是恢復(fù)的圖像效果好,但是運算過程很復(fù)雜[5],無法應(yīng)用在數(shù)碼相機(jī)產(chǎn)品中.
2.2鄰近插值法
鄰近插值算法的時間復(fù)雜度和空間復(fù)雜度都較小,容易在FPGA上實現(xiàn)且節(jié)省硬件資源.該算法根據(jù)鄰近像素相關(guān)性最強(qiáng)的原理,用鄰近位置的顏色分量值來插值該位置的顏色分量值.這種算法在邊緣豐富或者色差跳躍很大的圖像中處理效果較差,對圖像質(zhì)量要求很高的場景不適合使用鄰近插值算法.但是對于圖像質(zhì)量要求并不苛刻的場景,這種算法簡單快捷,硬件實現(xiàn)容易,節(jié)省硬件資源.
圖3 插值前R分量 圖4 插值后R分量
圖5 插值前B分量 圖6 插值后B分量
圖7 插值前G分量 圖8 插值后G分量
使用鄰近插值法進(jìn)行插值,首先將Bayer RGB模式中的RGB 3種顏色分量分開,看做3個獨立的顏色通道,然后分別對單個顏色通道進(jìn)行插值.首先來看紅色分量的插值.去除Bayer RGB中藍(lán)色和綠色分量后可得到如圖3所示的紅色分量的通道.將紅色通道分量的整幅圖像分割成一個個只有右上角有紅色分量值的2×2小模塊,每個2×2小模塊中其他3個像素點的紅色分量值都為空.插值時,其他3個紅色分量為空的像素點位置都插入其所在的2×2小模塊右上角的已知值來作為它們的紅色分量.插值后如圖4所示.
對藍(lán)色分量的插值和紅色分量的插值采用類似方法.圖5所示為藍(lán)色分量的通道,同樣將藍(lán)色通道分量的整幅圖像看成2×2的小模塊,不同的是每個小模塊只有左下角有藍(lán)色值.插值時每個2×2小模塊中其他3個像素點的藍(lán)色分量值值都取左下角的已知值來填充.插值后如圖6所示.
對于綠色分量,它的分布和紅色分量,藍(lán)色分量略有不同,其呈菱形分布,每一行都有綠色值.圖7所示為綠色分量的通道,在插值的時候,對于奇數(shù)行,取其右邊像素的綠色分量進(jìn)行插值;對于偶數(shù)行,取其左邊像素的綠色分量進(jìn)行插值.插值后如圖8所示.
3.1最小子模塊
類似于JPEG編碼時需要對圖像進(jìn)行8×8子模塊的劃分.鄰近插值算法在還原Bayer RGB的時候需要對圖像做2×2子模塊的劃分.鄰近插值算法插入像素的顏色分量是直接從該像素的鄰近像素上獲取的,只要待插值像素的周邊像素中包含了它丟失的RGB分量值即可.在Bayer格式的圖像中任意選取一個2×2的子模塊,其中都有2個綠色分量,1個紅色分量,1個藍(lán)色分量,包含了全部的3種顏色分量.因此2×2的子模塊是進(jìn)行鄰近插值的最小子模塊.
3.2流處理
流處理具有固定的時鐘頻率,通常每像素1個時鐘周期,時鐘速率受輸入和輸出的限制.在輸入端時,傳送來的像素必須被處理,否則就會丟失.在輸出端時,每個時鐘周期必須產(chǎn)生一個像素,否則就沒有可顯示的數(shù)據(jù).因此,流處理系統(tǒng)的設(shè)計至少在輸入和輸出是同步的.輸入數(shù)據(jù)一旦從存儲器中讀入或者從相機(jī)中流入,就傳送到第一個操作,不是將結(jié)果返回主存儲器,而是直接傳送下一個操作,這種流處理克服了存儲器的數(shù)量和速度的瓶頸限制.流處理非常適合低級圖像處理操作.
3.3系統(tǒng)架構(gòu)
CMOS傳感器輸出像素是按逐行掃描的順序輸出數(shù)據(jù)的,如果在已經(jīng)獲取了第N行M列像素的時候,需要同時獲取第N+1行M列的像素就需要先將第N行M列像素保存起來,并進(jìn)行一個行掃描的延時,再將保存的像素讀出.例如在雙線性插值算法還原Bayer RGB時,插入像素值的顏色分量不僅與該像素左右鄰近像素呈線性關(guān)系,還與該像素上一行位置的像素和下一行位置的像素呈線性關(guān)系[6].所以在硬件實現(xiàn)雙線性插值算法時至少需要2個行延時來獲取周邊線性相關(guān)的像素[7].類似地,鄰近插值算法在硬件實現(xiàn)上也需要進(jìn)行行延時,由于鄰近插值的最小子模塊為2行2列.所以在硬件實現(xiàn)的時候只需要進(jìn)行一個行掃描的延時即可.
移位寄存器和FIFO在保存數(shù)據(jù)時都具有先入先出的特性.利用這種特性存儲傳感器按逐行掃描順序輸出的數(shù)據(jù),可以作為傳感器輸出數(shù)據(jù)的緩存.例如鎂光的MT9P006芯片輸出的圖像一行有2 592個像素,則2 592個相同數(shù)據(jù)寬度的移位寄存器或者長度為2592的FIFO正好可以存一行像素的顏色分量.但是由于隨著移位寄存器增加,編程時Verilog代碼量會隨之增加,調(diào)用2 000個以上移位寄存器會使編程變得困難[8];而FIFO是串行輸出,在讀取數(shù)據(jù)時沒有移位寄存器靈活.所以采用移位寄存器連接FIFO的設(shè)計實現(xiàn)2×2子模塊更加合理.
圖9 FIFO與移位寄存器連接方式圖
系統(tǒng)使用4個移位寄存器來存儲2×2子模塊里的數(shù)據(jù).為了使4個移位寄存器在同一時刻存儲的值為圖像中2×2子模塊的值,加入FIFO作為行緩存,FIFO的長度為傳感器圖像一行所包含的像素個數(shù)減2[9],根據(jù)FIFO反饋的存儲信號,設(shè)置外部邏輯控制FIFO的讀寫.在4個移位寄存器當(dāng)中,其中2個連接FIFO的輸入端,存儲第N行M列和第N行M+1列的數(shù)據(jù).另外2個移位寄存器連接FIFO的輸出端,存儲第N+1行M列和第N+1行M+1列的數(shù)據(jù),4個移位寄存器和FIFO的連接如圖9所示.
3.4子模塊類型
將4個移位寄存器命名為:SHIFT2_1、SHIFT2_2、SHIFT1_1、SHIFT1_2,分別對應(yīng)2×2子模塊的第1行第1列、第1行第2列、第2行第1列、第2行第2列.它們在同一時刻,按存儲的顏色分量類型不同可以將2×2子模塊分為4種類型[10],即R-Gr-Gb-B塊、Gr-R-B-Gb塊、Gb-B-R-Gr塊、B-Gb-Gr-R塊,分別如圖10~13所示.
圖10 R-Gr-Gb-B塊
圖11 Gr-R-B-Gb塊
圖12 Gb-B-R-Gr塊
圖13 B-Gb-Gr-R塊
3.5插值算法
如圖9所示,對應(yīng)于子模塊第一行的2個移位寄存器SHIFT2_1和SHIFT2_2連接在FIFO的輸出端.由于移位寄存器和FIFO都具有先入先出的特性,因此SHIFT2_2中存儲的數(shù)據(jù)和其他3個移位寄存器中的數(shù)據(jù)相比較是最先被傳感器輸出的.在SHIFT2_2輸出它所存儲的像素的同時,需要對該像素進(jìn)行丟失顏色分量的插值.而根據(jù)2×2子模塊的類型不同,插值方式也相應(yīng)不同.當(dāng)在SHIFT2_2中存儲的像素的顏色分量被輸出時,應(yīng)該從其他3個移位寄存器中取出該像素鄰近的2個像素的其他2個顏色分量作為該像素的顏色分量.
如圖11所示,當(dāng)SHIFT2_2中存儲的為R時,SHITF2_1中存儲的為Gr,SHIFT1_2中存儲的為Gb,SHIFT1_1中存儲的為B,其他3種不再贅述.
3.6系統(tǒng)時序
前端傳感器的像素時鐘頻率作為系統(tǒng)的最低工作頻率,在Xilinx的XC7Z020芯片上最高頻率可達(dá)452.49 MHz,整個系統(tǒng)均為同步觸發(fā).
圖像傳感器輸出的一行像素個數(shù)為N.FPGA系統(tǒng)獲取的傳感器輸出數(shù)據(jù),在第1時鐘周期里被存入移位寄存器SHIFT1_1,在第2個時鐘該數(shù)據(jù)被轉(zhuǎn)存到SHIFT1_2,在第3個時鐘該數(shù)據(jù)進(jìn)入FIFO.進(jìn)入FIFO后經(jīng)歷N-2個系統(tǒng)時鐘周期即在第N+1個時鐘周期時被轉(zhuǎn)存到SHIFT2_1,在第N+2個時鐘周期時被轉(zhuǎn)存到SHIFT2_2中.所以系統(tǒng)從獲取第一個傳感器輸出數(shù)據(jù)到傳出第一個完成插值的像素需要N+3個像素時鐘.第一個數(shù)據(jù)在系統(tǒng)中傳輸?shù)耐瑫r,第二個數(shù)據(jù)也緊接著在系統(tǒng)中傳輸,所以傳出第一個完成插值的像素到傳出第二個完成插值的像素需要一個系統(tǒng)時鐘.
由于系統(tǒng)為同步觸發(fā),所以當(dāng)在FIFO中已經(jīng)存入了N-1個數(shù)據(jù)的時候需要向系統(tǒng)做出反饋,在下一時刻將對FIFO進(jìn)行讀操作,讀出數(shù)據(jù)并存入SHIFT2_1;當(dāng)移位寄存器SHIFT2_2存入新數(shù)據(jù)的時候,用于判斷2×2子模塊類型的兩位計數(shù)器開始計數(shù),根據(jù)計數(shù)器中的數(shù)值確定插值類型.
在進(jìn)行系統(tǒng)設(shè)計之前首先對鄰近插值算法進(jìn)行了MATLAB的仿真.驗證鄰近插值算法的處理效果如圖14所示.
圖14依次給出了原始圖片、Bayer模式下的紅色分量通道、綠色分量通道、藍(lán)色分量通道以及未經(jīng)過處理的傳感器輸出圖像和經(jīng)過鄰近插值法處理后還原的圖像.對比傳感器直接輸出的圖像和經(jīng)過插值后還原的圖像,可以看出Bayer RGB經(jīng)過鄰近插值后消除了彩色馬賽克現(xiàn)象,但是存在一定的橫豎條紋.
FPGA鄰近插值法的系統(tǒng)設(shè)計代碼在Altera的QuartusII和Xilinx的ISE環(huán)境中均編譯通過,并在Modelsim中仿真驗證了結(jié)果的正確性.如圖15所示模擬給出0~255的八位像素顏色分量數(shù)據(jù).圖16中輸出得到每個像素的RGB 3種值.
可以看出輸入數(shù)據(jù)一旦從存儲器中讀入或者從相機(jī)中流入,就傳送到第一個操作,不是將結(jié)果返回主存儲器而是直接傳送下一個操作,這種流處理的實時性使得對于圖像邊緣像素的顏色插值存在色差.
圖14 鄰近插值法MATLAB仿真效果圖
圖15 存入FIFO的傳感器輸出數(shù)據(jù)
圖16 插值還原后像素的RGB分量值
對于相機(jī)、攝像頭等數(shù)碼產(chǎn)品需要進(jìn)行實時圖像處理,這就意味著每個操作也必須在有限的執(zhí)行時間內(nèi)完成.傳感器輸出的Bayer格式數(shù)據(jù)不能直接作為圖像顯示,為了實時的采集和顯示圖像,需要快速的還原Bayer RGB.采用鄰近插值法進(jìn)行圖像的還原,在色彩跳躍度不大的圖像中具有良好的圖像還原效果,并且系統(tǒng)占用硬件資源少,處理速度快.在Xilinx FPGA的XC7Z020芯片上綜合后顯示僅占用782個LUT查找表,占XC7Z020芯片LUT總數(shù)的1.4%,最高工作頻率可達(dá)452.49 MHz;在Altera FPGA較低端系列的CycloneII芯片上綜合后只占用195個LE邏輯單元,占CycloneII芯片LE總數(shù)的4%.最高工作頻率也能達(dá)到116.29 MHz.系統(tǒng)設(shè)計全部采用標(biāo)準(zhǔn)Verilog語言編寫,可移植性好.
[1]Zhang D,Wu X.Color reproduction from noisy CFA data of single sensor digital cameras [J].Image Processing,IEEE Transactions on,2007,16(9):2184-2197.
[2]Chung K H,Chan Y H.A lossless compression scheme for Bayer color filter array images [J].Image Processing,IEEE Transactions on,2008,17(2):134-144.
[3]Ma T,Wu D S,Cui W.Compression methods of Bayer image format and FPGA implementation [J].Science Technology and Engineering,2006,(6):1509-1510.
[4]Zhang Y.Color interpolation algorithm of CMOS image [D].Xi′an:Xi′an University of Science and Technology,2013.
[5]Li Y Y,Meng W.Real-time hardware Bayer color format image restoration algorithm and its implementation [J].Chinese optics and Applied Optics,2009,(12):539-541.
[6]Wang Y B.Study on the recovery of Bayer format in real time system based on FPGA [J].Microelectronics and computer,2013(5):78-80.
[7]Yang H,Tong S F.Conversion from Bayer to RGB based on FPGA [J].Modern Electronics technique,2010,33(2):122-124.
[8]Yang J Z.Design and implementation of image acquisition system by industrial camera based on FPGA [D].Chengdu:University of Electronic Science and technology,2014.
[9]Andriani S,Brendel H.Crosstalk correction technique for single sensor camera provided with bayer color filter array [C]//IEEE.International conference on Image Processing.Melbourne:IEEE,2013.
[10]Teng W,An B W.Preprocess of Bayer pattern image based on FPGA+DSP [J].Electronic Design Engineering,2010(10):145-147.
(責(zé)任編輯:包震宇)
Implementation of restoring Bayer RGB on FPGA throughNearest Neighbor Interpolation
WANG Jian, YING Jun, ZENG Weijun, ZENG Shuang
(College of Informiation,Mechanical and Electrical Engineering,Shanghai Normal University,Shanghai 200234,China)
Image sensors only sample the intensity information of one color component of RGB when each pixel is collected.In color digital image system,it needs real-time processing and color interpolation for the sensor image.Both time complexity and space complexity of Nearest Neighbor Interpolation(NNI) are smaller and can be achieved by stream processing,which makes it easy to be implemented in the FPGA hardware and is hardware resource-saving.First,the NNI′s restoration effect of neighbor interpolation method is verified by MATLAB before making hardware implementation.In the hardware design,shift register is used to connect FIFO′s framework,standard Verilog code is used for realization and finally Modelsim is used to simulate and verify design.
Nearest Neighbor Interpolation(NNI); sream processing; Bayer RGB; FPGA
10.3969/J.ISSN.1000-5137.2016.04.004
2015-02-04
應(yīng)駿,中國上海市徐匯區(qū)桂林路100號,上海師范大學(xué)信息與機(jī)電工程學(xué)院數(shù)字社區(qū)與智能家居研究中心,郵編:200234,E-mail:junying@shmiic.com
TP 391.41
A
1000-5137(2016)04-0411-06