RTC 应用中最常使用的色彩空间之 RGB 和 YUV
2022/09/01

本文分享在 RTC 应用中最常使用的两种色彩空间:RGB 和 YUV 。

1 RGB   

首先,我们来认识一下 RGB 色彩空间。

我们前面已初步了解,RGB 色彩模型基于光的三原色原理建立,其三个分量为:红(Red)、绿(Green)、蓝(Blue)。在 RGB 模型下,图像的每一个像素点都会存储 R、G、B 三个分量(如下图),每个分量取不同的数值( 0 ~ 255 ),该像素点就能综合呈现出不同的色彩。基于此,如果按(R,G,B)的方式记录,那么(255,0,0)、(0,255,0)、(0,0,255)分别表示的就是最纯粹的 红、绿、蓝 。而比较特殊的,若 RGB 三个分量值均为 0,综合得到黑色;反之,若三个分量取最大值 255,综合得到白色。

RGB 可表示的色彩数量可达 1677 万,这远远超过了人眼的感知范围(约1000万种),正因如此,RGB 被广泛应用于各种显示领域。而不同领域、不同应用场景,根据其所需的颜色范围,又建立了基于 RGB 模型的、不同的色彩子空间,最常见的有 sRGB 和 Adobe RGB。

  • sRGB 和 Adobe RGB

sRGB 色彩空间由 Microsoft 在 1997 年主导制定,被广泛应用于显示器、数码相机、扫描仪、投影仪等设备。大家选购显示器时,肯定有在产品特性介绍中看到过诸如 “99%sRGB、100% sRGB” 之类的指标,其含义即为该显示器对 sRGB 色彩空间的覆盖程度,数值越高,意味着该显示设备所支持的色彩越丰富。而 Adobe RGB 比 sRGB 晚问世一年,由 Adobe 在 1998 年提出,它在 sRGB 的基础上增加了 CMYK 色彩空间(一种专用于印刷业的色彩空间,模型分量为青(Cyan),洋红(Magenta),黄(Yellow),黑(Black)),Adobe RGB 跟随着 Adobe 设计软件全家桶被广泛应用于平面设计行业。

  • sRGB 和 Adobe RGB 的对比

关于 sRGB 和 Adobe RGB 的比较,我们可以借助 CIE 色彩空间马蹄图作为参考。

如下图,我们将 CIE、sRGB 和 Adobe RGB 的色彩范围换算到同一个平面上。最外围的色彩区域为 CIE 色彩空间,三角形部分为 sRGB 和 Adobe RGB。可以看到,sRGB 和 Adobe RGB 的色彩范围均小余 CIE,但是 Adobe RGB 的覆盖范围比 sRGB 更广,尤其是在绿色区域覆盖得更多(sRGB 大约能覆盖 35% 的 CIE,Adobe RGB 则为 50%),这使得 Adobe RGB 在摄像、图像处理、保真方面更游刃有余。

sRGB 和 Adobe RGB 的比较

不过,即便 Adobe RGB 相较 sRGB 更出色,在应用范围上依旧是 sRGB 更广。作为“前辈”,抱着 Windows 的大腿,sRGB 凭借 Windows 雄厚的用户基础得到了广泛的普及。如今,互联网上绝大多数内容,比如视频网站的影视剧、比如这篇文章中的图片,基本都是以 100% sRGB 的色彩标准进行显示的。一张 Adobe RGB 标准的图片如果放在网页上观看,其颜色可能会变淡(相对于原始色彩),这是因为 Adobe RGB 图片的色彩超过了网页的显色标准,部分色彩信息出现了丢失。但即便如此,对于大部分用户来说,日常场景使用 sRGB 已然足够,当需要更广的色域以达到更优质的色彩效果时(比如专业平面设计/摄影场景),才有必要考虑 Adobe RGB。

从 RGB 两种子色彩空间的应用场景看,不得不承认 RGB 和大家的日常生活已是息息相关。但是,即便在采集、显示等用途上 RGB “一家独大”,当聚焦到视频处理领域时,它却有些施展不开手脚。

RGB 在表示颜色时有一个特点,那就是其三个通道分量是相关的,缺一不可。也即每个像素点必须同时存储 R、G、B 三个分量值才能正确表示颜色,这导致它不便于做编码压缩,如果用于存储或传输,会占用大量的空间和带宽(关于空间和带宽的重要性,我们在 音频必知必会-音频编解码中已有过讨论)。空间和带宽问题,在一帧图像上或许可以勉强忍受,但在视频资源上,就非常严峻了(时长 1s 的视频资源,一般包含数十帧的图像,空间和带宽占用将呈数十倍增长)。

因此,我们还需要其他的色彩空间,来替代 RGB 用于视频处理领域,而这就是接下来要和大家介绍的,YUV 色彩空间。

2 YUV   

既然 RGB 三个分量的相关性,制约了其在视频领域的应用,作为其上位选择的 YUV 自然不能重蹈覆辙。YUV 色彩空间也有三个分量 Y、U、V,但和 RGB 不同的是,其三个分量并非都参与颜色的表示。

YUV 的三个分量中, Y 分量用于表示明亮度(Luminance),决定一个像素是明、或暗(可以理解为是黑、或白)以及其明暗的程度。我们仅记录明暗不同的 Y 分量,就能表示出图像的总体轮廓( 如下图中的 【Y】)。而 U、V 分量表示色度(Chrominance),用于定义色彩和饱和度( 如下图中的 【U】【V】)。一个记录了 Y 分量的像素,再添加上 U、V 分量,图像轮廓中就填充了 “黑白、明暗” 之外的其他色彩。

YUV 和 其三个分量

不难发现,即使没有 U、V 分量,仅凭 Y 分量我们也能 “识别” 出一幅图像的基本内容,只不过此时呈现的是一张黑白图像。而 U、V 分量为这些基本内容赋予了色彩,黑白图像演变为了彩色图像。这听起来是否有些似曾相识呢?这其实也是黑白电视和彩色电视之间的关系。

YUV 是在黑白、彩色电视的过渡时期应运而生的,它这种既可以完整记录彩色信号,又能通过仅记录 Y 通道信号来表示黑白画面的特性,很好地解决了黑白电视与彩色电视的兼容互通问题。并且,由于人眼对于亮度(Y)相较于色度(U、V)更高、更敏感,我们对于不同明亮度的识别能力,远远超过对不同色度的识别能力。这意味着,我们可以在保留 Y 分量信息的情况下,尽可能地减少 U、V 两个分量的采样,以实现最大限度地减少数据量,同时还能保证人眼视觉失真度最小,这对于视频数据的存储和传输是有极大裨益的。这也是为什么,YUV 相较于 RGB 更适合于视频处理领域。

3 YUV 和 RGB 的转换   

在了解了 RGB 和 YUV 的基础知识和应用场景后,你可能会有一些疑惑。既然在图像采集、显示方面,我们主要使用 RGB,但是在图像存储、处理、传输方面,我们又要选择 YUV。而在一个完整的应用场景中,视频的采集、存储、处理、 传输、显示等环节,却是相互关联、缺一不可的,这里是否会存在冲突呢?

是的,这里的确存在两种色彩空间的使用冲突,我们解决冲突的方式是“色彩空间转换”。

RGB 与 YUV 的相互转换,存在于视频处理链路的各个必要环节。

视频采集设备一般输出的是 RGB 数据,我们需要将其转换为 YUV 数据再进行后续的处理、编码和传输;同样的,显示设备通过传输、解码环节获取到 YUV 数据后,也需要将其转换为 RGB 数据,再进行消费展示。

关于这两种色彩空间转换的细节,大家暂不需要深究,但需要了解到:色彩空间转换是一个基于“标准”来执行的过程,只有在明确标准的基础上,才能通过一定的数学运算完成二者的相互转换。而“标准” 有很多种,比如 BT.601、BT.709 等等,不同的标准会有不同的转换公式,有兴趣的同学可以去查阅相关的资料做进一步了解。

关于 YUV 和 RGB ,除了要了解它们的基本原理,我们还需要关注它们的“采样方式”和“存储格式”。“采样方式”和“存储格式” 相关的内容,非常重要却也比较复杂,我们将在下一篇文章中,再详细地和大家探讨。

扫一扫,获取更多服务与支持
热门推荐
H.264 与 H.265 视频编解码器的区别,哪个更好?
2024/07/26
直播产品中的“六边形战士”来了!ZEGO 超低延迟直播,高质量带来新增长!
2024/07/23
什么是抖动?如何使用抖动缓冲区来减少抖动
2024/07/22
热门标签
AI 降噪
AI课堂
ExpressSDK
MSDN
RTI
SEI
webrtc
ZIM
互动白板
即构融资
在线KTV
在线K歌
屏幕共享
录屏采集
数智人
直播技术
范围语音
行业报告
语聊房
语音社交
超分
音视频
音视频开发
音视频技术
音频编码
关注我们
获得更多服务与支持了解价格与优惠 扫码关注我们
关注我们
获得更多服务与支持了解价格与优惠 扫码关注我们