前言
FPGA實現(xiàn)ISP(Image Signal Processor)過程中,在圖像接收、處理、傳輸過程中往往會接觸到各種各樣的圖像格式,比如接收圖像可能是原始RAW數(shù)據(jù),驅(qū)動LCD顯示器需要RGB格式,HDMI/SDI顯示需要YUV格式等。各種圖像格式之間可能涉及到相互轉(zhuǎn)換,本文簡單介紹幾種常見的圖像格式以及Xilinx FPGA實現(xiàn)方式。
Bayer圖像
ISP通常是從接收到CMOS/CCD的圖像信號開始,對于彩色圖像傳感器,輸出圖像格式可能是RGB、YUV或Bayer。為了降低成本,絕大部分的彩色圖像傳感器采用彩色濾鏡陣列(color filter array,CFA)的方式捕獲彩色圖像,因此輸出Bayer格式的Sensor最為常見。 典型Bayer圖像的成像過程如下圖所示。
圖2-1CFA示意圖(圖片來自wikipedia)
隨著技術(shù)的發(fā)展,也有一些其他濾鏡的Sensor出現(xiàn),如RGBW、EXR、X-Trans等,如下圖所示。
圖2-2RGBW、Fujifilm “EXR”、“X-Trans”示意圖(圖片來自wikipedia)
通過上圖可以發(fā)現(xiàn),這些濾鏡中,綠色的分量最多。這是因為人眼對綠色最為敏感,所以保留最多的綠色分量。
Demosaic
Bayer圖像采集到FPGA以后,每個像素只有一種顏色分量。以Sony IMX290為例,輸出圖像的bayer格式如下圖所示:
圖3-1SonyIMX290 Pixel Arrangement
此時,如果將采集到的1920x1080圖像以灰度展示,由于CFA的原因,圖像會呈現(xiàn)一種馬賽克現(xiàn)象,如下圖所示:
圖3-2Bayerimage
所以將Bayer轉(zhuǎn)成RGB的過程又稱為Demosaic(去馬賽克)。 每一個像素僅包含光譜的一部分,需要通過插值來填充每個像素的RGB分值。為了從Bayer格式得到每個像素的RGB格式,需要通過插值對每個像素填補缺失的兩個顏色分量。插值的方法有很多(包括近鄰、雙線性等)。 插值后可以得到RGB圖像:
圖3-3Bayerto RGB
需要注意的是,Bayer圖像根據(jù)第一個像素的顏色分量有4種排列方式,分別為GRBG、RGGB、BGGR、GBRG:
圖2-4Bayer4種排列方式
如果輸入Bayer的排列與IP core配置中插值的排列方式不同,則圖像顏色會錯亂。
圖3-5Bayer排列方式與Demosaic配置不一致
RGB/YUV顏色空間轉(zhuǎn)換
YUV是一種顏色模型。它對彩色圖像或視頻進行編碼時考慮到了人類的感知,與 "直接 "的RGB表示相比,允許減少色度成分的帶寬。YUV模型定義了一個亮度分量(Y),代表物理線性空間的亮度,以及兩個色度分量,分別稱為U和V。它可以用來與RGB或其他色域空間進行相互轉(zhuǎn)換。 同樣常見的還有YCbCr,但是在實際中,往往是把YUV和YCbCr認為是同一種色域,只有模擬和數(shù)字的區(qū)別。我們一般也統(tǒng)稱為YUV。
由于YUV色域相比于RGB帶寬更低,所以經(jīng)常見于圖像接口,如BT656、BT1120、HDMI等。也由于YUV亮度與色度分開的特性,許多圖像增強算法也基于YUV來設(shè)計,如3D降噪、邊沿增強等。 YUV于RGB顏色空間的轉(zhuǎn)換可由公式表現(xiàn),不同的標(biāo)準(zhǔn)如ITU601.SDTV、ITU709.PAL/NTSC參數(shù)略有不同。
圖4-1BT.601標(biāo)準(zhǔn)
圖4-2BT.709標(biāo)準(zhǔn)
根據(jù)以上公式,可以由RGB圖像得到Y(jié)UV,此時YUV有三個通道,圖像大小相比于RGB沒有變化,我們通常稱之為YUV444。
圖4-3RGBto YUV444
由于人眼對亮度敏感而對色度不敏感的特點,因此在YUV格式中減少了UV的數(shù)據(jù)量,在不影響用戶觀看的情況下有效的壓縮了總體的數(shù)據(jù)量。所以YUV與RGB格式相比,占用更少的存儲空間,相對應(yīng)的在傳輸過程中也會減少帶寬的消耗量。常見的YUV格式有YUV444、YUV422、YUV420等。
圖4-4Chromasubsampling示意圖(圖片來自wikipedia)
延伸
在RGB轉(zhuǎn)YUV的過程中,我們通常可以加一個系數(shù),作為比例因子放大和縮小UV的分量,達到調(diào)節(jié)圖像飽和度的目的。以8bit圖像深度為例,比例因子為r,公式如下:
Cb=U*r+128;
Cr= V*r+128;
調(diào)整比例因子r,能得到不同色彩飽和度的圖像。
圖5-1 飽和度設(shè)置效果
RGB/YUV的顏色空間轉(zhuǎn)換并非完全無損。FPGA運算精度有限,多次轉(zhuǎn)換可能導(dǎo)致顏色失真,尤其是當(dāng)轉(zhuǎn)入轉(zhuǎn)出標(biāo)準(zhǔn)不同時,會引入累積誤差。 比如網(wǎng)絡(luò)上流傳的有趣的表情包、梗圖,在傳來傳去的過程中,網(wǎng)絡(luò)平臺可能會反復(fù)壓縮、解壓,而顯示基于RGB,壓縮基于YUV,所以對圖片不斷地進行RGB/YUV轉(zhuǎn)換。雖然每次轉(zhuǎn)換損失輕微,但久而久之,在不斷取整的過程中,Y、U、V三個值就會不斷減小,Y讓圖像越來越暗,UV讓圖像越來越向綠偏移。
圖5-2模擬“電子包漿”
AMD-Xilinx FPGA實現(xiàn)
對于Demosaic,Xilinx提供IPcore供用戶調(diào)用,用戶可根據(jù)應(yīng)用場景以及資源開銷選擇對應(yīng)的插值方式,F(xiàn)ringe TolerantInterpolation或者HighResolution Interpolation,支持RGB bayer和CMY bayer兩種格式。詳細說明參考Xilinx官網(wǎng)PG286。 IP接口如下圖所示:
圖6-1XilinxDemosaic IP core
對于RGB與YUV的顏色空間轉(zhuǎn)換或YUV444/YUV422/YUV420之間的轉(zhuǎn)換,Xilinx也提供了IP core供用戶調(diào)用。詳細說明參考Xilinx官網(wǎng)PG231。
IP接口以及配置方式如下圖所示:
圖6-2XilinxVPSS IP core
Xilinx提供的VPSS(Video Processing Subsystem),可以很方便地對RGB、YUV444、YUV422、YUV420進行互轉(zhuǎn)。RGB與YUV的互轉(zhuǎn)公式如下:
YUV to RGB:
B = Y + ((Cb * 2081)>> 10)
Cr = V -(1<<(HSC_BITS_PER_COMPONENT-1))
Cb = U -(1<<(HSC_BITS_PER_COMPONENT-1))
R = Y + ((Cr *1733) >> 10)
G = Y - ((Cb * 404+ Cr * 595) >> 10)
RGB to YUV:
V =(1<<(HSC_BITS_PER_COMPONENT-1)) + (((R-Y)*898)>>10)
Y = (306*R + 601*G+ 117*B)>>10
U =(1<<(HSC_BITS_PER_COMPONENT-1)) + (((B-Y)*504)>>10)
其中HSC_BITS_PER_COMPONENT = C_MAX_DATA_WIDTH (這里C_MAX_DATA_WIDTH可以由用戶通過GUI設(shè)置。)
綜上,使用這兩個IP即可基于Xilinx FPGA快速實現(xiàn)Bayer與常見顏色空間轉(zhuǎn)換。
審核編輯:劉清
-
FPGA
+關(guān)注
關(guān)注
1625文章
21620瀏覽量
601238 -
LCD顯示器
+關(guān)注
關(guān)注
0文章
87瀏覽量
20146 -
ISP
+關(guān)注
關(guān)注
6文章
474瀏覽量
51671 -
RAW
+關(guān)注
關(guān)注
0文章
21瀏覽量
3785
原文標(biāo)題:FPGA ISP Bayer與常見顏色空間轉(zhuǎn)換
文章出處:【微信號:Comtech FPGA,微信公眾號:Comtech FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論