先來說一下,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