说到用来表达颜色的系统,大家或许第一个会想到的就是RGB。是的,在数字时代,屏幕上每一个像素点都是由红绿蓝三种颜色混合而成的,它可以用RGB值来描述。不过有时我们还是会看到或听闻所谓的YUV,那么它又是什么呢?
首先说说色彩模型(Color Model),你可以将其简单理解为是色彩编码方式,比如RGB就是其中常用的一种。每一种色彩模型都有自己对颜色的定义,我们看到的同一种颜色在不同的颜色模型中有着不一样的“值”。YUV就是与RGB平行的一刷色彩模型系统,它并不像RGB那样使用基色混合的办法来描述颜色,而是用了另外一刷截然不同的描述办法。
YUV模型首先将亮度这一人眼最为敏感的要素抽离了出来,形成一个只有亮度信息的平面,然后才是描述具体色彩的U和V平面,分别具有色度(Chrominance)和浓度(Chroma)信息。下图就是一个比较好的例子:
YUV三个通道的不同信息
从上到下分别为Y、U、V
图片来自于Wikipedia
那么为什么有了RGB我们仍然需要YUV呢?我们要回到人类刚拥有彩色电视的时候,在那段从黑白电视向彩色电视的过渡期,电视系统需要提供对黑白电视的兼容性,另外还要考虑到电视广播系统那有限的带宽,如果使用RGB颜色模型,那么传输带宽就是原来的三倍。主要是以上两个原因,能够兼容黑白电视系统和更为节省带宽的YUV色彩模型就被发明了出来,它与RGB之间是无损转换的。
亮度信息与色彩信息相分离的设计使得YUV可以减少一些色彩信息以达到节省传输带宽和保存体积的目的。因为相较于色彩,人眼对于亮度信息更为敏感,所以可以在色彩信息上面进行刷舍来达到节约大小的目的,通过引入采样的方式,YUV对原始的RGB信息进行重编码,目前在视频中最常见的就是YUV420式编码,Y平面的信息完全保留,而UV这两个色度平面的信息交错保留,并且精度只有Y平面的一半,最终图像、视频的体积也就少了很多,而画质损失实际是被控制在一个合理的范围内。
YUV下还有很多不同的具体编码方式,比如视频中常见的NV12、YV12等,而JPEG这个常见的图片压缩编码也使用了YUV作为处理和存储图像时使用的色彩模型,可以说,我们虽然没有直接接触到YUV色彩模型,但是几乎是时时刻刻都在用它。而YPbPr、YCbCr只是YUV在不同领域中的具现化罢了,其实就是一个东西。