王 健, 應(yīng) 駿, 曾維軍, 曾 爽
(上海師范大學(xué) 信息與機(jī)電工程學(xué)院,上海 200234)
?
基于鄰近插值法還原Bayer RGB的FPGA實(shí)現(xiàn)
王健, 應(yīng)駿, 曾維軍, 曾爽
(上海師范大學(xué) 信息與機(jī)電工程學(xué)院,上海 200234)
圖像傳感器在采集每一個(gè)像素時(shí)僅采集它的R、G、B其中一種顏色分量的強(qiáng)度信息.在彩色數(shù)字圖像系統(tǒng)中,需對(duì)傳感器圖像進(jìn)行實(shí)時(shí)處理和顏色插值.鄰近插值算法的時(shí)間復(fù)雜度和空間復(fù)雜度都較小,可以通過(guò)流處理實(shí)現(xiàn),這使得它容易在FPGA上實(shí)現(xiàn)且節(jié)省硬件資源.在進(jìn)行硬件實(shí)現(xiàn)之前首先通過(guò)MATLAB對(duì)鄰近插值法的還原效果進(jìn)行驗(yàn)證.硬件設(shè)計(jì)中使用移位寄存器連接FIFO的架構(gòu),并使用標(biāo)準(zhǔn)Verilog代碼編寫實(shí)現(xiàn),最終用Modelsim仿真驗(yàn)證設(shè)計(jì).
鄰近插值法; 流處理; Bayer RGB; FPGA
圖1 人眼光譜響應(yīng)曲線
圖像傳感器,是組成數(shù)字?jǐn)z像頭的重要組成部分.根據(jù)原件的不同,可分為電荷耦合元件(CCD)和金屬氧化物半導(dǎo)體元件(CMOS).但是不論對(duì)于何種類型的圖像傳感器來(lái)說(shuō),它們?cè)诓杉恳粋€(gè)像素時(shí)都僅采集它的R、G、B其中一種顏色分量的強(qiáng)度信息.Bayer模式是目前應(yīng)用最為廣泛的像素分布格式,它允許從一個(gè)單獨(dú)平面中得到彩色圖像[1].在傳感器和鏡頭之間有一個(gè)CFA(Color Filter Array)濾鏡.CFA濾鏡的每一個(gè)濾光單元和傳感器像素對(duì)應(yīng),光線透過(guò)CFA濾鏡投射在傳感器上.CFA圖像的結(jié)構(gòu)特點(diǎn)是在CFA圖像上每一行每一列的綠色位置是間隔排列的,且綠色分量占了一半[2].這是因?yàn)檠劬?duì)綠色分量最敏感,能夠辨別更多的細(xì)節(jié),這也是綠色的特性所決定的.如圖1所示,它是電磁波的可見光譜中的中波部分,其波長(zhǎng)是500~570 nm,綠光在光波中占有重要地位.并且綠色和亮度也具有較強(qiáng)的相關(guān)性[3].
在Bayer模式中,紅色分量的采樣率為25%,藍(lán)色分量的采樣率為25%,綠色分量的采樣率最高為50%,其排列順序如圖2所示.紅色分量?jī)H出現(xiàn)在奇數(shù)行,偶數(shù)列.藍(lán)色分量?jī)H出現(xiàn)在偶數(shù)行、奇數(shù)列.綠色分量呈菱形分布[4].
2.1插值法簡(jiǎn)介
圖2 Bayer彩色排列格式
在彩色數(shù)字圖像系統(tǒng)中,需對(duì)傳感器圖像進(jìn)行顏色插值.好的插值方法可以提高圖像質(zhì)量,簡(jiǎn)化硬件實(shí)現(xiàn)的難度.隨著國(guó)內(nèi)外學(xué)者的深入研究,最為流行的幾種插值法有鄰近插值法、雙線性插值法、邊緣差值法、中值濾波插值法等,還有許多算法使用了小波變換和空間域轉(zhuǎn)換方法,其優(yōu)點(diǎn)是恢復(fù)的圖像效果好,但是運(yùn)算過(guò)程很復(fù)雜[5],無(wú)法應(yīng)用在數(shù)碼相機(jī)產(chǎn)品中.
2.2鄰近插值法
鄰近插值算法的時(shí)間復(fù)雜度和空間復(fù)雜度都較小,容易在FPGA上實(shí)現(xiàn)且節(jié)省硬件資源.該算法根據(jù)鄰近像素相關(guān)性最強(qiáng)的原理,用鄰近位置的顏色分量值來(lái)插值該位置的顏色分量值.這種算法在邊緣豐富或者色差跳躍很大的圖像中處理效果較差,對(duì)圖像質(zhì)量要求很高的場(chǎng)景不適合使用鄰近插值算法.但是對(duì)于圖像質(zhì)量要求并不苛刻的場(chǎng)景,這種算法簡(jiǎn)單快捷,硬件實(shí)現(xiàn)容易,節(jié)省硬件資源.
圖3 插值前R分量 圖4 插值后R分量
圖5 插值前B分量 圖6 插值后B分量
圖7 插值前G分量 圖8 插值后G分量
使用鄰近插值法進(jìn)行插值,首先將Bayer RGB模式中的RGB 3種顏色分量分開,看做3個(gè)獨(dú)立的顏色通道,然后分別對(duì)單個(gè)顏色通道進(jìn)行插值.首先來(lái)看紅色分量的插值.去除Bayer RGB中藍(lán)色和綠色分量后可得到如圖3所示的紅色分量的通道.將紅色通道分量的整幅圖像分割成一個(gè)個(gè)只有右上角有紅色分量值的2×2小模塊,每個(gè)2×2小模塊中其他3個(gè)像素點(diǎn)的紅色分量值都為空.插值時(shí),其他3個(gè)紅色分量為空的像素點(diǎn)位置都插入其所在的2×2小模塊右上角的已知值來(lái)作為它們的紅色分量.插值后如圖4所示.
對(duì)藍(lán)色分量的插值和紅色分量的插值采用類似方法.圖5所示為藍(lán)色分量的通道,同樣將藍(lán)色通道分量的整幅圖像看成2×2的小模塊,不同的是每個(gè)小模塊只有左下角有藍(lán)色值.插值時(shí)每個(gè)2×2小模塊中其他3個(gè)像素點(diǎn)的藍(lán)色分量值值都取左下角的已知值來(lái)填充.插值后如圖6所示.
對(duì)于綠色分量,它的分布和紅色分量,藍(lán)色分量略有不同,其呈菱形分布,每一行都有綠色值.圖7所示為綠色分量的通道,在插值的時(shí)候,對(duì)于奇數(shù)行,取其右邊像素的綠色分量進(jìn)行插值;對(duì)于偶數(shù)行,取其左邊像素的綠色分量進(jìn)行插值.插值后如圖8所示.
3.1最小子模塊
類似于JPEG編碼時(shí)需要對(duì)圖像進(jìn)行8×8子模塊的劃分.鄰近插值算法在還原Bayer RGB的時(shí)候需要對(duì)圖像做2×2子模塊的劃分.鄰近插值算法插入像素的顏色分量是直接從該像素的鄰近像素上獲取的,只要待插值像素的周邊像素中包含了它丟失的RGB分量值即可.在Bayer格式的圖像中任意選取一個(gè)2×2的子模塊,其中都有2個(gè)綠色分量,1個(gè)紅色分量,1個(gè)藍(lán)色分量,包含了全部的3種顏色分量.因此2×2的子模塊是進(jìn)行鄰近插值的最小子模塊.
3.2流處理
流處理具有固定的時(shí)鐘頻率,通常每像素1個(gè)時(shí)鐘周期,時(shí)鐘速率受輸入和輸出的限制.在輸入端時(shí),傳送來(lái)的像素必須被處理,否則就會(huì)丟失.在輸出端時(shí),每個(gè)時(shí)鐘周期必須產(chǎn)生一個(gè)像素,否則就沒有可顯示的數(shù)據(jù).因此,流處理系統(tǒng)的設(shè)計(jì)至少在輸入和輸出是同步的.輸入數(shù)據(jù)一旦從存儲(chǔ)器中讀入或者從相機(jī)中流入,就傳送到第一個(gè)操作,不是將結(jié)果返回主存儲(chǔ)器,而是直接傳送下一個(gè)操作,這種流處理克服了存儲(chǔ)器的數(shù)量和速度的瓶頸限制.流處理非常適合低級(jí)圖像處理操作.
3.3系統(tǒng)架構(gòu)
CMOS傳感器輸出像素是按逐行掃描的順序輸出數(shù)據(jù)的,如果在已經(jīng)獲取了第N行M列像素的時(shí)候,需要同時(shí)獲取第N+1行M列的像素就需要先將第N行M列像素保存起來(lái),并進(jìn)行一個(gè)行掃描的延時(shí),再將保存的像素讀出.例如在雙線性插值算法還原Bayer RGB時(shí),插入像素值的顏色分量不僅與該像素左右鄰近像素呈線性關(guān)系,還與該像素上一行位置的像素和下一行位置的像素呈線性關(guān)系[6].所以在硬件實(shí)現(xiàn)雙線性插值算法時(shí)至少需要2個(gè)行延時(shí)來(lái)獲取周邊線性相關(guān)的像素[7].類似地,鄰近插值算法在硬件實(shí)現(xiàn)上也需要進(jìn)行行延時(shí),由于鄰近插值的最小子模塊為2行2列.所以在硬件實(shí)現(xiàn)的時(shí)候只需要進(jìn)行一個(gè)行掃描的延時(shí)即可.
移位寄存器和FIFO在保存數(shù)據(jù)時(shí)都具有先入先出的特性.利用這種特性存儲(chǔ)傳感器按逐行掃描順序輸出的數(shù)據(jù),可以作為傳感器輸出數(shù)據(jù)的緩存.例如鎂光的MT9P006芯片輸出的圖像一行有2 592個(gè)像素,則2 592個(gè)相同數(shù)據(jù)寬度的移位寄存器或者長(zhǎng)度為2592的FIFO正好可以存一行像素的顏色分量.但是由于隨著移位寄存器增加,編程時(shí)Verilog代碼量會(huì)隨之增加,調(diào)用2 000個(gè)以上移位寄存器會(huì)使編程變得困難[8];而FIFO是串行輸出,在讀取數(shù)據(jù)時(shí)沒有移位寄存器靈活.所以采用移位寄存器連接FIFO的設(shè)計(jì)實(shí)現(xiàn)2×2子模塊更加合理.
圖9 FIFO與移位寄存器連接方式圖
系統(tǒng)使用4個(gè)移位寄存器來(lái)存儲(chǔ)2×2子模塊里的數(shù)據(jù).為了使4個(gè)移位寄存器在同一時(shí)刻存儲(chǔ)的值為圖像中2×2子模塊的值,加入FIFO作為行緩存,FIFO的長(zhǎng)度為傳感器圖像一行所包含的像素個(gè)數(shù)減2[9],根據(jù)FIFO反饋的存儲(chǔ)信號(hào),設(shè)置外部邏輯控制FIFO的讀寫.在4個(gè)移位寄存器當(dāng)中,其中2個(gè)連接FIFO的輸入端,存儲(chǔ)第N行M列和第N行M+1列的數(shù)據(jù).另外2個(gè)移位寄存器連接FIFO的輸出端,存儲(chǔ)第N+1行M列和第N+1行M+1列的數(shù)據(jù),4個(gè)移位寄存器和FIFO的連接如圖9所示.
3.4子模塊類型
將4個(gè)移位寄存器命名為:SHIFT2_1、SHIFT2_2、SHIFT1_1、SHIFT1_2,分別對(duì)應(yīng)2×2子模塊的第1行第1列、第1行第2列、第2行第1列、第2行第2列.它們?cè)谕粫r(shí)刻,按存儲(chǔ)的顏色分量類型不同可以將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所示,對(duì)應(yīng)于子模塊第一行的2個(gè)移位寄存器SHIFT2_1和SHIFT2_2連接在FIFO的輸出端.由于移位寄存器和FIFO都具有先入先出的特性,因此SHIFT2_2中存儲(chǔ)的數(shù)據(jù)和其他3個(gè)移位寄存器中的數(shù)據(jù)相比較是最先被傳感器輸出的.在SHIFT2_2輸出它所存儲(chǔ)的像素的同時(shí),需要對(duì)該像素進(jìn)行丟失顏色分量的插值.而根據(jù)2×2子模塊的類型不同,插值方式也相應(yīng)不同.當(dāng)在SHIFT2_2中存儲(chǔ)的像素的顏色分量被輸出時(shí),應(yīng)該從其他3個(gè)移位寄存器中取出該像素鄰近的2個(gè)像素的其他2個(gè)顏色分量作為該像素的顏色分量.
如圖11所示,當(dāng)SHIFT2_2中存儲(chǔ)的為R時(shí),SHITF2_1中存儲(chǔ)的為Gr,SHIFT1_2中存儲(chǔ)的為Gb,SHIFT1_1中存儲(chǔ)的為B,其他3種不再贅述.
3.6系統(tǒng)時(shí)序
前端傳感器的像素時(shí)鐘頻率作為系統(tǒng)的最低工作頻率,在Xilinx的XC7Z020芯片上最高頻率可達(dá)452.49 MHz,整個(gè)系統(tǒng)均為同步觸發(fā).
圖像傳感器輸出的一行像素個(gè)數(shù)為N.FPGA系統(tǒng)獲取的傳感器輸出數(shù)據(jù),在第1時(shí)鐘周期里被存入移位寄存器SHIFT1_1,在第2個(gè)時(shí)鐘該數(shù)據(jù)被轉(zhuǎn)存到SHIFT1_2,在第3個(gè)時(shí)鐘該數(shù)據(jù)進(jìn)入FIFO.進(jìn)入FIFO后經(jīng)歷N-2個(gè)系統(tǒng)時(shí)鐘周期即在第N+1個(gè)時(shí)鐘周期時(shí)被轉(zhuǎn)存到SHIFT2_1,在第N+2個(gè)時(shí)鐘周期時(shí)被轉(zhuǎn)存到SHIFT2_2中.所以系統(tǒng)從獲取第一個(gè)傳感器輸出數(shù)據(jù)到傳出第一個(gè)完成插值的像素需要N+3個(gè)像素時(shí)鐘.第一個(gè)數(shù)據(jù)在系統(tǒng)中傳輸?shù)耐瑫r(shí),第二個(gè)數(shù)據(jù)也緊接著在系統(tǒng)中傳輸,所以傳出第一個(gè)完成插值的像素到傳出第二個(gè)完成插值的像素需要一個(gè)系統(tǒng)時(shí)鐘.
由于系統(tǒng)為同步觸發(fā),所以當(dāng)在FIFO中已經(jīng)存入了N-1個(gè)數(shù)據(jù)的時(shí)候需要向系統(tǒng)做出反饋,在下一時(shí)刻將對(duì)FIFO進(jìn)行讀操作,讀出數(shù)據(jù)并存入SHIFT2_1;當(dāng)移位寄存器SHIFT2_2存入新數(shù)據(jù)的時(shí)候,用于判斷2×2子模塊類型的兩位計(jì)數(shù)器開始計(jì)數(shù),根據(jù)計(jì)數(shù)器中的數(shù)值確定插值類型.
在進(jìn)行系統(tǒng)設(shè)計(jì)之前首先對(duì)鄰近插值算法進(jìn)行了MATLAB的仿真.驗(yàn)證鄰近插值算法的處理效果如圖14所示.
圖14依次給出了原始圖片、Bayer模式下的紅色分量通道、綠色分量通道、藍(lán)色分量通道以及未經(jīng)過(guò)處理的傳感器輸出圖像和經(jīng)過(guò)鄰近插值法處理后還原的圖像.對(duì)比傳感器直接輸出的圖像和經(jīng)過(guò)插值后還原的圖像,可以看出Bayer RGB經(jīng)過(guò)鄰近插值后消除了彩色馬賽克現(xiàn)象,但是存在一定的橫豎條紋.
FPGA鄰近插值法的系統(tǒng)設(shè)計(jì)代碼在Altera的QuartusII和Xilinx的ISE環(huán)境中均編譯通過(guò),并在Modelsim中仿真驗(yàn)證了結(jié)果的正確性.如圖15所示模擬給出0~255的八位像素顏色分量數(shù)據(jù).圖16中輸出得到每個(gè)像素的RGB 3種值.
可以看出輸入數(shù)據(jù)一旦從存儲(chǔ)器中讀入或者從相機(jī)中流入,就傳送到第一個(gè)操作,不是將結(jié)果返回主存儲(chǔ)器而是直接傳送下一個(gè)操作,這種流處理的實(shí)時(shí)性使得對(duì)于圖像邊緣像素的顏色插值存在色差.
圖14 鄰近插值法MATLAB仿真效果圖
圖15 存入FIFO的傳感器輸出數(shù)據(jù)
圖16 插值還原后像素的RGB分量值
對(duì)于相機(jī)、攝像頭等數(shù)碼產(chǎn)品需要進(jìn)行實(shí)時(shí)圖像處理,這就意味著每個(gè)操作也必須在有限的執(zhí)行時(shí)間內(nèi)完成.傳感器輸出的Bayer格式數(shù)據(jù)不能直接作為圖像顯示,為了實(shí)時(shí)的采集和顯示圖像,需要快速的還原Bayer RGB.采用鄰近插值法進(jìn)行圖像的還原,在色彩跳躍度不大的圖像中具有良好的圖像還原效果,并且系統(tǒng)占用硬件資源少,處理速度快.在Xilinx FPGA的XC7Z020芯片上綜合后顯示僅占用782個(gè)LUT查找表,占XC7Z020芯片LUT總數(shù)的1.4%,最高工作頻率可達(dá)452.49 MHz;在Altera FPGA較低端系列的CycloneII芯片上綜合后只占用195個(gè)LE邏輯單元,占CycloneII芯片LE總數(shù)的4%.最高工作頻率也能達(dá)到116.29 MHz.系統(tǒng)設(shè)計(jì)全部采用標(biāo)準(zhǔn)Verilog語(yǔ)言編寫,可移植性好.
[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)駿,中國(guó)上海市徐匯區(qū)桂林路100號(hào),上海師范大學(xué)信息與機(jī)電工程學(xué)院數(shù)字社區(qū)與智能家居研究中心,郵編:200234,E-mail:junying@shmiic.com
TP 391.41
A
1000-5137(2016)04-0411-06
上海師范大學(xué)學(xué)報(bào)·自然科學(xué)版2016年4期