要讲YUV,首先补充一下显示器显色原理相关背景。
显示器显色原理
目前的显示器大都是采用了RGB颜色标准,(YUV格式的视频,也要转换成RGB格式来显示),在显示器上,是通过电子枪激发屏幕的红、绿、蓝三色发光极上来产生色彩的,目前的电脑一般都能显示32位颜色(rgba:8+8+8+8,每一种颜色有256个色阶):红、绿、蓝三个颜色通道每种色各分为255阶亮度,在0时“灯”最弱——是关掉的,而在255时“灯”最亮。当三色数值相同时为无色彩的灰度色,而三色都为255时为最亮的白色,都为0时为黑;红、绿、蓝三盏灯的叠加情况,中心三色最亮的叠加区为白色,加法混合的特点:越叠加越明亮。
RGB是从颜色发光的原理来设计定的,通俗点说它的颜色混合方式就好象有红、绿、蓝三盏灯,当它们的光相互叠合的时候,色彩相混,而亮度却等于两者亮度之总和(两盏灯的亮度嘛!),越混合亮度越高,即加法混合。有色光可被无色光冲淡并变亮。如蓝色光与白光相遇,结果是产生更加明亮的浅蓝色光。知道它的混合原理后,在软件中设定颜色就容易理解了.
在图像与视频处理领域,显示设备通过在三种基色混合,来表示其他的颜色,并且我们提到“几何上说,色域中不存在能包含整个色域的三角形,即人类视觉的色域不是三角形的,使用三色表示法无法表示整个人类色域,而只能表示局部 。” 由于人类视觉的色域非三角形,色域中不存在能包含整个色域的三角形,也就是说任何三个给定可见光光源,都不能覆盖整个色域,所以使用三色表示法无法表示整个人类色域,因此,显示设备的制作原理导致我们无法使用显示设备来显示出色域图中存在的所有颜色,而只能选择其中的一部分颜色进行显示
而具体哪一部分取决于标准。也就是常说的SRGB/P3/BT.2020等,后续再说。
YUV:针对人眼特性定义的色彩空间
但是我们知道,YUV是除RGB之外另一种颜色表达方式,常用于视频编解码中,也是一种颜色空间。YUV的由来主要还是因为人眼对亮度更加敏感,颜色更迟钝,所以人们定义了一种色彩空间下,颜色的亮度信息被完全保存,色域信息将会进行下采样以压缩数据,虽然色域信息被压缩了,但人眼分辨不出来。(如何采样,搜索YUV420/YUV444/NV12/NV21相关资料即可,在此不赘述。)
这里我想聊一下我以前看似了解但是不太通透的东西:
我们常说的YUV是怎么来的?
怎么从一个物理量到我们定义的这个YUV?
这个YUV定义的色彩又如何显示到我们的屏幕上面去的?
带着这些问题,我翻查了许多资料,总结成下文的「物理世界中的量变成我们编码的颜色空间YUV历程」有不对的地方,希望及时指出勘误。