RGB & YUV 詳解

作為一名前端開發(fā)人員,我們時(shí)常會(huì)接觸到RGB,但YUV的話,可能大部分同學(xué)都沒有了解過。其實(shí)RGB和YUV都是應(yīng)用比較廣泛的顏色空間。今天,我們來詳細(xì)的了解一下RGB和YUV。

RGB

RGB是我們平時(shí)遇到最多的顏色空間。使用RGB表示的每種顏色都是由紅光、綠光、藍(lán)光組合而成的。對(duì)于使用RGB存儲(chǔ)的圖片,我們分別使用R、G、B三個(gè)分量來表示紅光、綠光、藍(lán)光,每個(gè)分量占每個(gè)分量8bit,并且三個(gè)分量依次排列存儲(chǔ),表示一個(gè)像素。

RGB.png

上圖中,圖像數(shù)據(jù)以R > G > B的排列順序進(jìn)行存儲(chǔ),這個(gè)排序并不是絕對(duì)的,也有可能是以B > G > R的順序進(jìn)行存儲(chǔ)。

RGB常常用于圖像的存儲(chǔ),并且十分簡(jiǎn)單。但是在視頻領(lǐng)域中,RGB就不那么常見了。我們知道,視頻其實(shí)是由一張張連續(xù)的圖片序列組成的,我們假設(shè)有一個(gè)1080p(1920 * 1080)分辨率、幀率為30幀的視頻,如果不對(duì)視頻進(jìn)行壓縮,并且使用RGB進(jìn)行存儲(chǔ)的話,僅僅一分鐘的視頻就能達(dá)到 ( 1920 * 1080 * 8 * 30 * 60 )bit (約等于27G)。這明顯是不現(xiàn)實(shí)的,所以我們需要對(duì)視頻數(shù)據(jù)進(jìn)行壓縮。

但由于RGB的三個(gè)分量是存在相關(guān)性的,這不利于我們對(duì)數(shù)據(jù)進(jìn)行壓縮編碼。所以我們需要一種數(shù)據(jù)相關(guān)性沒那么強(qiáng)的顏色空間,我們接下來要介紹的YUV,就是這么一種顏色空間。

YUV

YUV同樣使用三個(gè)分量來存儲(chǔ)數(shù)據(jù),他們分別是

  • Y:用于表示明亮度(Luminance或Luma);
  • U: 用于表示色度(Chrominance或Chroma);
  • V:用于表示色度(Chrominance或Chroma);

Y其實(shí)就是我們常說的灰度值,是圖片的總體輪廓,而U和V則用于描述色彩顏色和顏色飽和度。

image.png

上面的第一張圖片為YUV圖片的原圖,下面的圖片分別為只有Y分量、只有U分量、只有V分量數(shù)據(jù)的圖片??梢钥吹街挥衁分量的圖片能夠看清楚圖片的輪廓,但圖片是黑白的。

YUV的類型

常見的YUV有YUV444,YUV422,YUV420,不同類型之間的主要區(qū)別是使用了不同的方式進(jìn)行U、V分量的采樣。

image.png

如上圖所示,其中實(shí)心黑點(diǎn)表示像素點(diǎn)的Y分量,空心圓圈表示采用該像素點(diǎn)的UV分量。

YUV444

YUV444中每個(gè)Y分量分別對(duì)應(yīng)一個(gè)U分量和一個(gè)V分量。

image.png

YUV422

YUV422中每?jī)蓚€(gè)Y分量共用一個(gè)U分量和一個(gè)V分量。

image.png

YUV420

YUV420中每撕個(gè)Y分量共用一個(gè)U分量和一個(gè)V分量。

image.png

我們可以清楚的看到,在存儲(chǔ)一張2 * 2像素的圖片時(shí),YUV444需要 12 * 8 bit,

image.png

YUV422需要 8 * 8 bit,

image.png

而YUV420則只需要 6 * 8 bit。

image.png

YUV444存儲(chǔ)的數(shù)據(jù)量與RGB相同,但YUV422和YUV420卻只需要存儲(chǔ)RGB的數(shù)據(jù)量的 2/3 和 1/2 。

YUV的存儲(chǔ)方式

YUV有packed(打包)和 planar(平面)兩種存儲(chǔ)方式。

  • packed :packed格式是先連續(xù)存儲(chǔ)所有的Y分量,然后依次交叉儲(chǔ)存U、V分量;
  • planar:planar格式也會(huì)先連續(xù)存儲(chǔ)所有的Y分量,但planar會(huì)先連續(xù)存儲(chǔ)U分量的數(shù)據(jù),再連續(xù)存儲(chǔ)V分量的數(shù)據(jù),或者先連續(xù)存儲(chǔ)V分量的數(shù)據(jù),再連續(xù)存儲(chǔ)U分量的數(shù)據(jù);

每種YUV類型都會(huì)有多種存儲(chǔ)方式,接下來我們來解析一下比較常用的YUV422和YUV420。

YUV422

  • YU16:也叫I422或YUV422P,每?jī)蓚€(gè)Y分量共用一個(gè)U分量和一個(gè)V分量,以planar方式進(jìn)行存儲(chǔ),先連續(xù)儲(chǔ)存Y分量,再連續(xù)存儲(chǔ)U分量,最后連續(xù)儲(chǔ)存V分量。
image.png
  • YV16:也叫I422或YUV422P,每?jī)蓚€(gè)Y分量共用一個(gè)U分量和一個(gè)V分量,以planar方式進(jìn)行存儲(chǔ),先連續(xù)儲(chǔ)存Y分量,再連續(xù)存儲(chǔ)V分量,最后連續(xù)儲(chǔ)存U分量。
image.png
  • NV16:也叫YUV422SP,每?jī)蓚€(gè)Y分量共用一個(gè)U分量和一個(gè)V分量,以packed方式進(jìn)行存儲(chǔ),先連續(xù)儲(chǔ)存Y分量,再以U、V的順序交叉存儲(chǔ)U分量和Y分量。
image.png
  • NV61:也叫YUV422SP,每?jī)蓚€(gè)Y分量共用一個(gè)U分量和一個(gè)V分量,以packed方式進(jìn)行存儲(chǔ),先連續(xù)儲(chǔ)存Y分量,再以V、U的順序交叉存儲(chǔ)U分量和Y分量。
image.png

YUV420

  • YU12:也叫I420或YUV420P,每四個(gè)Y分量共用一個(gè)U分量和一個(gè)V分量,以planar方式進(jìn)行存儲(chǔ),先連續(xù)儲(chǔ)存Y分量,再連續(xù)存儲(chǔ)U分量,最后連續(xù)儲(chǔ)存V分量。
image.png
  • YV12:也叫I420或YUV420P,每四個(gè)Y分量共用一個(gè)U分量和一個(gè)V分量,以planar方式進(jìn)行存儲(chǔ),先連續(xù)儲(chǔ)存Y分量,再連續(xù)存儲(chǔ)V分量,最后連續(xù)儲(chǔ)存U分量。
image.png
  • NV12:也叫YUV420SP,每四個(gè)Y分量共用一個(gè)U分量和一個(gè)V分量,以packed方式進(jìn)行存儲(chǔ),先連續(xù)儲(chǔ)存Y分量,再以U、V的順序交叉存儲(chǔ)U分量和Y分量。
image.png
  • NV21:也叫YUV422SP,每四個(gè)Y分量共用一個(gè)U分量和一個(gè)V分量,以packed方式進(jìn)行存儲(chǔ),先連續(xù)儲(chǔ)存Y分量,再以V、U的順序交叉存儲(chǔ)U分量和Y分量。
image.png

YUV的優(yōu)勢(shì)

  1. 便于壓縮編碼。RGB表示的每種顏色都是由紅光、綠光、藍(lán)光組合而成的,我們分別使用R、G、B三個(gè)分量來表示紅光、綠光、藍(lán)光,每個(gè)像素的三個(gè)分量之間存在著相關(guān)性。所以通常會(huì)把RGB轉(zhuǎn)換成YUV進(jìn)行壓縮。
  2. 數(shù)據(jù)量相對(duì)RGB來說更小。前面我們有分析過,同樣分辨率的圖像,YUV444存儲(chǔ)的數(shù)據(jù)量與RGB相同,但YUV422和YUV420卻只需要存儲(chǔ)RGB的數(shù)據(jù)量的 2/3 和 1/2 。
  3. 能夠兼容老式黑白電視。Y分量單獨(dú)顯示是其實(shí)就是黑白圖像,因此YUV由彩色轉(zhuǎn)黑白只需要去除UV相關(guān)的數(shù)據(jù)就可以了。

YUV與RGB之間的轉(zhuǎn)換

雖然一般的視頻編碼都會(huì)使用YUV,但由于大多是的采集設(shè)備都是使用RGB的,所以YUV與RGB之間的轉(zhuǎn)換是十分常見的。

YUV與RGB之間的轉(zhuǎn)換是存在標(biāo)準(zhǔn)的,常見的標(biāo)準(zhǔn)有ITU-R BT.601(標(biāo)清)、ITU-R BT.709(高清)、ITU-R BT.2020(超高清)。不同的標(biāo)準(zhǔn)有不同的準(zhǔn)換公式,同時(shí)還要區(qū)分不同的Color Range。

Color Range用于指定RGB分量的取值范圍,可分為Full Range(取值范圍為0~255)和Limited Range(取值范圍為16~235)

BT.601, which is the standard for SDTV.

  • RGB > YUV
Y = 0.299R+0.587G+0.114B
V = 0.713(R?Y)=0.500R?0.419G?0.081B
U = 0.564(B?Y)=?0.169R?0.331G+0.500B
  • YUV > RGB
R = 1.164Y+1.596V-0.871;
G = 1.164Y-0.813V-0.391U+0.529;
B = 1.164Y+2.018U-1.0729;

BT.601,F(xiàn)ull Range

  • RGB > YUV
Y = 0.299 * R + 0.587 * G + 0.114 * B    
V = -0.169 * R - 0.331 * G + 0.500 * B
U = 0.500 * R - 0.439 * G - 0.081 * B
  • YUV > RGB
R = Y + 1.400V - 0.7
G = Y - 0.343U - 0.711V + 0.526
B = Y + 1.765U - 0.883

BT.709, which is the standard for HDTV.

  • RGB > YUV
Y = 0.0627 + 0.183 * R + 0.614 * g + 0.062 * b
U = 0.5 - 0.101 * R - 0.339 * g + 0.439 * b
V = 0.5 + 0.439 * R - 0.399 * g - 0.040 * b
  • YUV > RGB
R = 1.164Y + 1.739V - 0.97
G = 1.164Y - 0.213U - 0.533V + 0.301
B = 1.164Y + 2.112U - 1.129
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容