天天看點

關于一些視訊顔色空間的筆記記錄

先來說一下,YCbCr。       shader的話就去看看VideoDecode.shader就行了

------------------------------------選自wiki----------------------------------

YCbCr或Y'CbCr有的時候會被寫作:YCBCR或是Y'CBCR,是色彩空間的一種,通常會用于影片中的影像連續處理,或是數字攝影系統中。Y'和Y是不同的,Y就是所謂的流明(luminance),表示光的濃度且為非線性,使用伽馬修正(gamma correction)編碼處理。Y'為顏色的亮度(luma)成分、而CB和CR則為藍色和紅色的濃度偏移量成份。

Y'CbCr不是一種絕對的色彩空間,是一種針對RGB資訊所做的編碼。真正的顏色顯示是根據實際RGB色盤(colorant)來決定的。是以Y'CbCr所表示的值隻有在標準RGB色盤或是ICC數據(ICC profile)有提供的時候才能計算。

YCbCr不是一種絕對色彩空間,是YUV壓縮和偏移的版本。YCbCr的Y與YUV中的Y含義一緻,Cb和Cr與UV同樣都指色彩,Cb指藍色色度,Cr指紅色色度,在應用上很廣泛,JPEG、MPEG、DVD、攝影機、數字電視等皆採此一格式。是以一般俗稱的YUV大多是指YCbCr。

------------------------------------選自wiki----------------------------------

YCbCr中,Y就是luminance,明度。C就是Chrominance,色度。Cb就是blue和green的色度。Cr就是red和green的色度。

對于光來說,人眼對光的亮度特别敏感,相比,對光的色彩分量和位置與移動相對來說比較弱。從這裡看,也能明白為啥

Y、Cb、Cr這三個中Y單獨,而RGB合在了Cb和Cr中,從Cb、Cr中,也可能反推出,人眼對綠色的敏感度要高于紅色和藍色。

關于一些視訊顔色空間的筆記記錄

4:4:4、4:2:2、4:2:0是YCbCr的采樣方式。

YCbCr4:4:4就是無通道壓縮的方式。(理論上,與RGB是相同的,也就是說這兩個顔色空間的值可以無損互相轉化)

YCbCr4:2:2相當于把Cb和Cr的資訊摒棄了一半,是以他需要的帶寬是4:4:4模式下的2/3的帶寬((4+2+2)/(4+4+4))

YCbCr4:2:0就更狠了,同樣丢失的資訊也更多。

YCbCr與RGB的轉換

再來看一下大家熟知的RGB

關于一些視訊顔色空間的筆記記錄

由于rgb過于熟悉,這裡就不在介紹了。

sRGB

關于一些視訊顔色空間的筆記記錄
關于一些視訊顔色空間的筆記記錄

上圖的是人眼能看到的所有顔色。(題外話:寫過去色shader的都知道有一個magic vector3---fixed3(0.22, 0.707, 0.071),從圖裡可以看出,人眼對綠色部分的敏感度要大于紅色區域,最弱的就是藍色區域,所有去色的時候,對綠色通道保留的最多,藍色通道保留的最少。這三個分量是怎麼算出來的我沒有去查,如果讓我算的話,我肯定傻傻的用蒙特卡洛去算一下他們的面積比值。)

紅色的坐标值定為了(0.64,0.33)

綠色的坐标值定為了(0.3,0.6)

藍色的坐标值定位了(0.15,0.06)

白色的坐标值對位了(0.3127,0.3290)

---------------wiki------------------

Chromaticity Red Green Blue White point
x 0.6400 0.3000 0.1500 0.3127
y 0.3300 0.6000 0.0600 0.3290
Y 0.2126 0.7152 0.0722 1.0000

---------------wiki------------------

第三個值是伽馬γ,就是說sRGB定義了原色強度與實際儲存數值直接的非線性變換。

關于伽馬校準簡單一帶,早年的NTSC使用的值是2.2,PAL和SECAM使用的是2.8

現在的伽馬校準采用的是分段校準,伽馬值用的是1/0.45(2.2222222........)

再簡單的說一下CIE顔色系統的色度圖

關于一些視訊顔色空間的筆記記錄

這個色度圖給出了人類正常的視覺色域範圍。

繼續看一下顔色空間YUV

------------------------關于YUV和YCBCr,摘自百度百科------------------------

YUV,是一種顔色編碼方法。常使用在各個視訊處理元件中。YUV在對照片或視訊編碼時,考慮到人類的感覺能力,允許降低色度的帶寬。

YUV是編譯true-color顔色空間(colorspace)的種類,Y'UV,YUV,YCbCr,YPbPr等專有名詞都可以稱為YUV,彼此有重疊。“Y”表示明亮度(Luminance、Luma),“U”和“V”則是色度、濃度(Chrominance、Chroma)。

Y′UV,YUV,YCbCr,YPbPr所指涉的範圍,常有混淆或重疊的情況。從曆史的演變來說,其中YUV和Y'UV通常用來編碼電視的模拟信号,而YCbCr則是用來描述數字的視訊信号,适合視訊與圖檔壓縮以及傳輸,例如MPEG、JPEG。但在現今,YUV通常已經在電腦系統上廣泛使用。

Y'代表明亮度(luma;brightness)而U與V存儲色度(色訊;chrominance;color)部分;亮度(luminance)記作Y,而Y'的prime符号記作伽瑪校正。

--------------------------------------------------------------------------------------------------------------------------------

說的Y‘UV,首先想到的就是跟RGB空間的轉換。

據wiki的記錄,SDTV With BT.601定義了一下常量

Wr = 0.299,

Wg = 1 - Wr - Wb = 0.587,

Wb = 0.114

Umax = 0.436,

Vmax = 0.615

Y‘UV根據如下公式計算

Y' =  Wr * R + Wg * g + Wb * b = 0.299 * R + 0.587 * G + 0.114 * B,

U = Umax * (B  - Y') / (1 - Wb) = 0.436/0.886*(B  - Y') ≈ -0.14713 * R - 0.28886 * G + 0.436 * B

V = Vmax * ( R - Y')/ (1 - Wr) = 0.615/0.701*(R - Y') ≈ 0.615 * R - 0.51499 * G - 0.10001 * B

到此,Y'UV 與RGB這兩個空間的轉換矩陣就出現了,解決了兩個顔色空間的值的互相轉換問題,又看到了HDTV with BT.709

在這個規定下。

Wr= 0.2126

Wb= 0.0722

但是計算還是上面的計算,隻是矩陣的值變化了一下。原理不變

關于一些視訊顔色空間的筆記記錄

Example of U-V color plane, Y′ value = 0.5, represented within RGB color gamut

還有HSI HSV等一堆一堆的顔色空間的表示方法。。。感覺好乏力。。。

查閱的部分參考(有一部分忘了留下連結,實在對不起作者,抱歉)

https://www.jianshu.com/p/e67f79f10c65

https://blog.csdn.net/Evankaka/article/details/38176025

https://my.oschina.net/xiaolei123/blog/1786845

https://en.wikipedia.org/wiki/YCbCr

http://welkinchen.pixnet.net/blog/post/5446075-yuv%2C-ypbpr-%26-ycbcr-%E5%B7%AE%E7%95%B0

https://zhuanlan.zhihu.com/p/28745337