1 色彩空間和色彩模型
色彩是人眼對于不同頻率的光線的不同感受。色彩既是客觀存在的,但又是主觀感知的,所以不同人對色彩的感知會存在差異。為了規范色彩的表述,引入了色彩空間一詞。 “色彩空間”源于西方的“Color Space”,又稱作“色域”,色彩學中,人們建立了多種色彩模型,以一維、二維、三維甚至四維空間坐標來表示某一色彩,這種坐標系統所能定義的色彩范圍即色彩空間。我們經常用到的色彩空間主要有RGB、CMYK、Lab等。
色彩空間
色彩模型是描述使用一組值(通常使用三個、四個值或者顏色成分)表示顏色方法的抽象數學模型。例如三原色光模式(RGB) 和印刷四分色模式(CMYK) 都是色彩模型。不同的色彩模型的差異和優劣不在本文討論范圍之內。本文主要討論YUV和RGB兩種色彩模型的相關知識。
2 RGB色彩模型
我們知道, “色彩” 是人類大腦對事物的一種主觀感覺,為了將這種 “感性” 進行 “理性” 描述,數學家們創建了 RGB 模型的概念:通過三個數的組合(色值)來表述某一種特定的顏色,從而人類可以將這種感性的色彩感受進行理性地表達和傳遞。
2.1 RGB三原色
RGB和CMYrgb(255, 0, 0) 代表純紅色,rgb(0, 255, 0) 代表純綠色,rgb(0, 0, 255) 代表純藍色,而 rgb(255, 255, 0) 代表純黃色(光學中紅色和綠色加法混合會呈現黃色)。
RGB三原色 通過 RGB 色彩模型,我們最多能表示出256x256x256=16777216種不同的色值,也就是我們常說的1600萬色。
如果我們創建一個三維坐標系,三個軸的代表字母由X、Y、Z換成 R、G 和 B,即用 Red 代表X軸,Green代表Y軸,Blue代表Z軸,采用光學加法混色的方式構建這個立方空間的話,就形成了一個基于RGB模型的色彩空間了。
RGB三原色立體空間
我們知道通過 rgb(x, y, z)這種方式構建的每一個顏色點,都對應于這個立方體中的某一個點,也就是說每一種顏色都被包含在我們的色彩空間之內。
2.2RGB顏色模型存在的問題
因為在自然環境下獲取的圖像容易受自然光照、遮擋和陰影等情況的影響,即對亮度比較敏感,而RGB 顏色空間的三個分量都與亮度密切相關,即只要亮度改變,三個分量都會隨之相應地改變。另外,RGB 顏色空間是一種均勻性較差的顏色空間,人眼對于這三種顏色分量的敏感程度是不一樣的,在單色中,人眼對紅色最不敏感,藍色最敏感,如果顏色的相似性直接用歐氏距離來度量,其結果與人眼視覺會有較大的偏差。對于某一種顏色,我們很難推測出較為精確的三個分量數值來表示。
而且,在視頻領域如果使用RGB存儲的話,視頻數據會非常大。
比如有一個1080p(1920*1080)分辨率、幀率為30幀的視頻,如果使用RGB進行存儲的話,僅僅一分鐘的視頻就能達到 (1920*1080*8*30*60)bit(約等于27G)。這明顯是不現實的,所以我們需要對視頻數據進行壓縮。
基于以上兩點,所以我們需要一種數據相關性沒那么強的顏色編碼系統或色彩空間,而YUV正好就是這樣,從下面的介紹中我們就會明白。YUV能夠方便地編碼和傳輸,并且減少帶寬占用和信息出錯。
3 YUV色彩模型
我們先回到人類剛擁有彩色電視的時候,在那段從黑白電視向彩色電視的過渡期,電視系統需要提供對黑白電視的兼容性(在一文搞懂HDMI/DP/DVI/VGA顯示器接口歷史演進提到過),另外還要考慮到電視廣播系統那有限的帶寬,如果使用RGB顏色模型,那么傳輸帶寬就是原來的三倍。所以能夠兼容黑白電視系統和更為節省帶寬的YUV色彩模型就被發明了出來,它與RGB之間是無損轉換的。第4節,會介紹不同標準下YUV與RGB如何相互轉換。
因為相較于色彩,人眼對于亮度信息更為敏感,所以可以在色彩信息上面進行取舍來達到節約大小的目的,通過引入色度二次采樣(subsampling)的方式,YUV對原始的RGB信息進行重編碼。
亮度信息與色彩信息相分離的設計使得YUV可以減少一些色彩信息以達到節省傳輸帶寬和保存體積的目的。這也是YUV顏色模型相比于RGB顏色模型的優勢所在。
YUV同樣使用三個分量來存儲數據,他們分別是
Y:用于表示 明亮度(Luminance或Luma);
U:用于表示色度(Chrominance或Chroma);
V:用于表示色度(Chrominance或Chroma);
Y其實就是我們常說的灰度值,是圖片的總體輪廓,而U和V則用于描述色彩顏色和顏色飽和度。
一張色彩艷麗的圖片如果存儲成YUV格式的話,Y就是這張圖的黑白照、UV就是涂上顏色。
3.1 YUV圖像處理流水線pipeline
YUV圖像處理流水線
3.2 YUV色度抽樣方式常見的YUV圖像色度抽樣方式有如下三種:YUV 444、YUV 422、YUV420。
不同類型之間的主要區別是使用了不同的方式進行U、V分量的采樣。
YUV采樣方式
如上圖所示,其中實心黑點表示像素點的Y分量,空心圓圈表示采用該像素點的UV分量。可見:
YUV 444:每個Y分量分別對應一個U分量和一個V分量
YUV 422:每兩個Y分量共用一個U分量和一個V分量
YUV 420:每四個Y分量共用一個U分量和一個V分量
YUV色度抽樣方式
YUV444和RGB顏色模型的圖像大小是一樣的,并沒有節省存儲空間。當RGB圖像轉換為YUV圖像時,也是先轉換為YUV444采樣方式的圖像。YUV42和RGB顏色模型圖像大小相比,節省了三分之一的存儲空間,在傳輸時占用的帶寬也會隨之減少。
YUV420采樣方式,Y平面的信息完全保留,而UV這兩個色度平面的信息交錯保留,并且精度只有Y平面的一半,最終圖像、視頻的體積也就少了很多,而畫質損失實際是被控制在一個合理的范圍內。
由此,可得出對于一張1280*720大小的圖片,采用YUV420采樣比YUV 422、YUV444、RGB采樣的圖像節省的空間最大,所以現在最常見的就是YUV420采樣方式。
3.3 YUV的存儲方式
YUV有packed(打包)和 planar(平面)兩種存儲方式。
packed :packed格式是先連續存儲所有的Y分量,然后依次交叉儲存U、V分量;
planar:planar格式也會先連續存儲所有的Y分量,但planar會先連續存儲U分量的數據,再連續存儲V分量的數據,或者先連續存儲V分量的數據,再連續存儲U分量的數據;將YUV分量分別存儲到矩陣,每一個分量矩陣稱為一個平面。
3.4 YUV顏色編碼格式
由于色度抽樣方式和存儲方式的不同,YUV衍生出很多種格式。
注意下文中所述,YUV和YCbCr對應關系,Y對應Y,U對應Cb,V對應Cr。
3.4.1基于YUV422采樣的格式
YUYV格式和UYVY格式采用打包packed存儲方式。
YVUV格式
YVUV為YUV422采樣的存儲格式,相鄰的兩個Y共用其相鄰的兩個Cb、Cr。對于像素點Y’00、Y’01而言,其Cb、Cr的值均為Cb00、Cr00,其他的像素點YUV取值依此類推。
UYVY格式
UYVY格式與YVUV不同的是,UV即Cb、Cr排列順序不一樣,還原其每個像素點的YUV值的方法與上面一樣。
YUV422P格式
YUV422P格式,又叫做I422,采用的是平面格式進行存儲,先存儲所有的Y分量,再存儲所有的U分量,再存儲所有的V分量。
3.4.2.基于YUV420采樣的格式
YUV420是以平面方式(planar)存儲,色度抽樣為40的色彩編碼格式。其中YUV420P為三平面存儲,YUV420SP為兩平面存儲。
常見的yuv格式列表如下:
I420: YYYYYYYY UU VV =>YUV420P,主要用來遠程傳輸
YV12: YYYYYYYY VV UU =>YUV420P,先Y再V再UYU12: YYYYYYYY UU VV =>YUV420P,先Y再U再V
YV12和YU12,分別將Y、U、V打包,依次存儲。其中每一個像素點的YUV數據提取遵循YUV420格式的提取方式,即4個Y分量共用一組UV。注意,上圖中,Y’00、Y’01、 Y’10、Y’11共用Cb00、Cr00,其他依此類推。
NV12: YYYYYYYY UVUV =>YUV420SP //IOS中有的模式
NV21: YYYYYYYY VUVU =>YUV420SP //安卓Camera默認格式
NV12和UV21是一種兩平面存儲方式,Y為一個平面,交錯的UV為另一個平面。提取方式與YU12和YV12類似,即Y’00、Y’01、 Y’10、Y’11共用Cb00、Cr00,其他依此類推。
4YUV與RGB之間的轉換
YUV與RGB之間的轉換是存在標準的,常見的標準有:
ITU-R BT.601(標清)
ITU-R BT.709(高清)
ITU-R BT.2020(超高清)
不同的標準有不同的轉換公式,同時還要區分不同的Color Range。Color Range用于指定RGB分量的取值范圍,可分為Full Range(取值范圍為0255)和Limited Range(取值范圍為16235)。
BT.601, LimitedRange, 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, Full 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 isthe 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
接下來,以圖像處理課程里面經常會出現的一張圖片,作為示例,演示YUV與RGB之間的轉換。
1. 從YUV420P圖像中提取Y、U、V分量
YUV420P圖像
從左往右依次為Y、U、V分量-
2.將YUV420P圖像轉換為RGBA8888圖像
《一文搞懂》系列文章一文搞懂HDMI/DP/DVI/VGA顯示器接口歷史演進一文搞懂USB各個版本的歷史演進一文搞懂高速TIA跨阻放大器設計一文搞懂電阻,這篇講得很全面,建議收藏一文搞懂共模電感原理一文搞懂MLCC電容的特性及生產工藝流程一文搞懂電感Isat、Irms以及測量方法
本號對所有文章陳述的觀點均保持中立,文章僅供讀者交流學習。資訊、圖片來源網絡,版權歸原作者所有,侵權請聯系刪除。
審核編輯黃宇
-
RGB
+關注
關注
4文章
800瀏覽量
58613 -
編碼
+關注
關注
6文章
953瀏覽量
54902 -
YUV
+關注
關注
0文章
11瀏覽量
2897
發布評論請先 登錄
相關推薦
評論