一文搞懂图像RGB和YUV编码及相互转换
硬件花园 • 来源:硬件花园 • 作者:硬件花园 • 2023-05-17 08:37 • 3987次阅读
1 色彩空间和色彩模型
色彩是人眼对于不同频率的光线的不同感受。色彩既是客观存在的,但又是主观感知的,所以不同人对色彩的感知会存在差异。为了规范色彩的表述,引入了色彩空间一词。 “色彩空间”源于西方的“Color Space”,又称作“色域”,色彩学中,人们建立了多种色彩模型,以一维、二维、三维甚至四维空间坐标来表示某一色彩,这种坐标系统所能定义的色彩范围即色彩空间。我们经常用到的色彩空间主要有RGB、CMYK、Lab等。
色彩空间
色彩模型是描述使用一组值(通常使用三个、四个值或者颜色成分)表示颜色方法的抽象数学模型。例如三原色光模式(RGB) 和印刷四分色模式(CMYK) 都是色彩模型。
不同的色彩模型的差异和优劣不在本文讨论范围之内。本文主要讨论YUV和RGB两种色彩模型的相关知识。
2 RGB色彩模型
我们知道, “色彩” 是人类大脑对事物的一种主观感觉,为了将这种 “感性” 进行 “理性” 描述,数学家们创建了 RGB 模型的概念:通过三个数的组合(色值)来表述某一种特定的颜色,从而人类可以将这种感性的色彩感受进行理性地表达和传递。
2.1 RGB三原色
RGB和CMY
rgb(255, 0, 0) 代表纯红色,rgb(0, 255, 0) 代表纯绿色,rgb(0, 0, 255) 代表纯蓝色,而 rgb(255, 255, 0) 代表纯黄色(光学中红色和绿色加法混合会呈现黄色)。
RGB三原色 通过 RGB 色彩模型,我们最多能表示出256x256x256=16777216种不同的色值,也就是我们常说的1600万色。
如果我们创建一个三维坐标系,三个轴的代表字母由X、Y、Z换成 R、G 和 B,即用 Red 代表X轴,Green代表Y轴,Blue代表Z轴,采用光学加法混色的方式构建这个立方空间的话,就形成了一个基于RGB模型的色彩空间了。
RGB三原色立体空间
我们知道通过 rgb(x, y, z)这种方式构建的每一个颜色点,都对应于这个立方体中的某一个点,也就是说每一种颜色都被包含在我们的色彩空间之内。
2.2RGB颜色模型存在的问题
因为在自然环境下获取的图像容易受自然光照、遮挡和阴影等情况的影响,即对亮度比较敏感,而RGB 颜色空间的三个分量都与亮度密切相关,即只要亮度改变,三个分量都会随之相应地改变。
另外,RGB 颜色空间是一种均匀性较差的颜色空间,人眼对于这三种颜色分量的敏感程度是不一样的,在单色中,人眼对红色最不敏感,蓝色最敏感,如果颜色的相似性直接用欧氏距离来度量,其结果与人眼视觉会有较大的偏差。对于某一种颜色,我们很难推测出较为精确的三个分量数值来表示。
而且,在视频领域如果使用RGB存储的话,视频数据会非常大。
比如有一个1080p(1920*1080)分辨率、帧率为30帧的视频,如果使用RGB进行存储的话,仅仅一分钟的视频就能达到 (1920*1080*8*30*60)bit(约等于27G)。这明显是不现实的,所以我们需要对视频数据进行压缩。
基于以上两点,所以我们需要一种数据相关性没那么强的颜色编码系统或色彩空间,而YUV正好就是这样,从下面的介绍中我们就会明白。YUV能够方便地编码和传输,并且减少带宽占用和信息出错。
3 YUV色彩模型
我们先回到人类刚拥有彩色电视的时候,在