关于色彩空间,我们最熟悉的就是RGB了,即数字图像的每个像素点用3字节表示,每个字节分别表示该像素点红、绿和蓝色的分量,根据视觉三原色理论,那么这个像素点的最终颜色也就确定了下来。刚开始的时候,确实使用3个字节(3*8位)来分别表示一个像素里面的Red,Green和Blue的发光强度数值,后来又增加了一字节用于表示透明度,也就是在Photoshop里经常看到的Alpha值。前三个字节只表示红绿蓝三基色的值,最后一个字节表示前面三种基色叠加结果的透明度的值。在这个前提下,假如 我们有一副 1440*900 分辨率的一张图片,按照 RGB 的方式,每个像素点用 4 字节表示,则这幅图片将占: 1440*900*4= 5184000Byte=5MB 左右的存储空间; 如果是3320*1876分辨率的一张照片则高达24MB。当然,这个体积对目前的存储系统来说已经不是什么大问题了,但对我们目前的网络带宽还是提出了非常严峻的挑战。再进一步,如果我们要制作视频,按照电影理论:每秒钟至少24帧图像连续播放,人的视觉才不会感觉停留和卡顿。依然以1440×900解析率的片源为例,每秒钟的数据量则高达120MB字节!!!每秒啊,这是什么概念,如果是90分钟的总播放时长,你能想象要占多少存储空间?耗费多少网络带宽么?关于视频先搁置起来,以后再细说。
那如何在尽量不降低图片质量的情况下,如何才能最大限度的减小文件数据呢?当然,大家肯定想到应该是各种图像压缩算法该登场了。确实没错,但经过前人的实践证明,在采用RGB颜色模型记录数字图像时,无论采用何种算法,整体压缩比非常的不理想,因为原始数据确实太大了。这时候,英国著名科学家Iain Ainsworth经过大量科学研究得出了一条结论:The human visual system (HVS) is less sensitive to colour than to luminance (brightness)。也就是说人类视觉系统对亮度的感觉比对颜色更加敏感。利用这一特性,将图像的亮度信息和颜色信息分离,并使用不同长度的bit位进行存储,这样可以在对主观感觉影响很小的前提下,更加有效的存储图像数据。 因此,另一种颜色空间模型 ---YUV 及其它的各种裂变体就如雨后春笋般遍地而生了。估计当年很多人和我一样,在学计算机多媒体信息处理这门课时,看到这个概念和后面的各种变种,那真是一个头,两个大。不过今天,我力争用最少的语言,最直白的逻辑来向大家阐述清楚这个概念。
说到YUV色彩空间,从它衍生出的其他几种颜色空间经常会让人产生混淆,最常见的就是YUV经常和YCbCr混用,还有YPbPr的出现让本来就已经很“混乱”的家族又变成了一锅浆糊。下面我们就来一一了解谈谈这几种东东。
YUV
首先我们简单了解一下YUV的由来。在早期从黑白电视机向彩色电视机(都是模拟信号的年代)过度的那段时间里,工程师们为了继续沿用黑白电视机的基础技术和架构,根据前面说过人的视觉对图像的亮度比图像的色彩更敏感的特性,发明了YUV颜色空间。因为当年的黑白电视机里都已经具备处理图像信号亮度的器件,所以,彩色电视机的工程师们就只增加了两个色差信号U(蓝色色差)和V(红色色差),就形成了我们所说的YUV颜色空间。所以说,YUV的真正意义在于:在模拟电视系统里,实现了亮度信号Y和色差信号U、V的分离,主要用于优化彩色视频信号的传输,后向兼容老式黑白电视系统,同时与原始的RGB相比,YUV只需占用极少的频宽,而RGB要求三个独立的视频信号同时传输。既然YUV是派生于RGB,那它们之间就肯定有换算公式。请客官们少安毋躁。
YCbCr
当从模拟图像发展到数字图像年代的时候,伟大的科学家们又在YUV颜色空间的基础上提出了YCbCr颜色空间。也就是说,YCbCr颜色空间主要用于彩色数字图像信息的编码、压缩和传输用的。例如,MPEG和JPEG两大组织的各种图像、视频压缩算法都是基于YCbCr颜色空间来提出的,例如H.264,mpeg其实都是在YCbCr颜色空间里运算的。
YPbPr
也是用在模拟的彩色信号处理领域,可以认为YPbPr是YCbCr的模拟版本。那么什么时候会见到YPbPr呢?那就是当你的显示设备的视频输入接口或者输出设备的视频输出接口还有下面这样一组时,你就会见到YPbPr了:
最后,我们用来总结一下上述几种颜色空间的应用场合和它们之间的转换关系:
因此,综上所述,目前在计算机行业的数字图形图像处理领域,当我们提到 YUV 时,其实就隐含的指示了我们所说的是 YCbCr ,把模拟信号年代那些东东赶紧统统扫出脑袋吧 ( 当然除非你目前还在搞模拟视频的相关研究和开发就恕小生无理了 ) 。