关于一些视频颜色空间的笔记记录
先来说一下,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就更狠了,同样丢失的信息也更多。
再来看一下大家熟知的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.****.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