视频中为什么需要这么多的颜色空间?

这篇具有很好参考价值的文章主要介绍了视频中为什么需要这么多的颜色空间?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

视频中为什么需要这么多的颜色空间?

作者 | 17哥

导读:在视频处理中,我们经常会用到不同的色彩空间:非线性RGB,线性 RGB,YUV,XYZ……为什么需要这么多的色彩空间呢?为什么在 FFMpeg 中会有 color_space,color_transfer,color_primaries 等一系列的颜色属性呢?这些术语之间究竟隐藏着什么秘密 ?

全文5840字,预计阅读时间15分钟。

01 视频采集

视频中为什么需要这么多的颜色空间?

如上图所示,在相机系统中,外部世界的光信息(光子,photons)通过透镜或其他光学器件聚焦之后达到相机的图像传感器(‍CCD‍ 或者 CMOS)。[1]

  • 图像传感器可以将一个入射光子(photon)转换为对应的一个电子(electron)。

  • 在曝光时间内,图像传感器对转换的电子进行电荷积累。

  • 然后,图像传感器会将积累的电荷信号转换成对应的电压信号。

  • 最后,利用 ADC 把电信号转换成数字信号,而转换后的数字信号则为某个范围内的整数值。

ADC 数字信号的取值范围 :

ADC 转换之后的数字信号的取值范围受限于 ADC 设备。对于 8-bits 的 ADC 而言,数字信号的取值范围为 [0, 2^8-1],因此,对于每一个像素而言,会用 [0, 255] 之间的整数来进行编码。

视频中为什么需要这么多的颜色空间?

ADC 转换的数字信号的数值是一个线性编码的过程,这意味着如果将图像传感器上的光量增加 1 倍,则 ADC 转换之后对应的数值也会增加 1 倍。这是一个非常有用的特性:无论是增加物理世界的光量,还是增加 ADC 转换之后的数值,对图片而言,都会带来相同的效果。线性编码意味着我们所处理的数据和光发射的强度成正比关系。[2]

由数码相机中的 CMOS 传感器产生并写入原始文件(Raw File)的数据是线性的。与普通照片相比,线性数据通常看起来非常暗且对比度较低。[3]

视频中为什么需要这么多的颜色空间?

在 iPhone 手机中,可以通过设置相机来拍摄 Apple ProRAW 格式的照片。

02 探索视频伽马校正

实际上,研究表明,人类视觉系统是以对数函数的方式来感知光亮度。这意味着,人眼会提高暗部的敏感度,降低高光部分的敏感度。[4]

视频中为什么需要这么多的颜色空间?

从数学角度看,感知光强度和测量光强度之间存在一个近似的平方关系,具体如下式所示。

视频中为什么需要这么多的颜色空间?

由于人类视觉感知系统不是以线性方式工作的,因此必须使用非线性曲线来对 ADC 生成的的线性数据进行变换,从而使得拍摄的图像色调与我们的视觉系统的工作方式相匹配。这个过程也就是我们所说的 伽马校正。

视频中为什么需要这么多的颜色空间?

因此,在从线性 RGB 空间转换到非线性 RGB 空间时,需要 γ 作为转换参数。相机中的 ISP 模块负责对图像传感器的线性 RGB 进行伽马校正进而产生对应的符合人眼感知的非线性 RGB 数据。

视频中为什么需要这么多的颜色空间?

RGB 的设备依赖性 :

不同显示设备支持的色域空间不同,因此对于不同的显示设备而言,伽马校正之后的 RGB 数值也不同。从这个角度讲,RGB 是设备依赖型的色彩空间。

03 视频压缩

根据如上的信息,我们知道:相机系统经过 ISP 处理之后,最终会得到非线性的 RGB 信息。对于视频而言,如果以 RGB 存储每帧的信息,则需要消耗大量的存储空间。

人类视觉系统对颜色信息的敏感度要弱于亮度信息,利用这一特点,通常相机会将捕获的 RGB 信息转换为 YUV 格式,然后对 YUV 格式进行色度信息采样(例如,YUV420)以便压缩图像空间。

RGB->YUV,不同标准有不同要求,一般常用的标准有:

  • BT. 601(SD: Standard-Definition)

  • BT. 709(HD: High-Definition)

  • BT. 2020(UHD: Ultra-High-Definition)

注意 :

标准中,不但会规定 RGB->YUV 的转换系数,同时还会规定从线性 RGB 到非线性 RGB 转换的 gamma 系数。

将 RGB颜色模型,转换成 YUV 模型后,接下来会采用某种视频编解码算法(例如,H265, VP9)对获取的数据进行视频编码,最终得到视频文件(此处忽略了音频的采集编码以及合流的操作)。

视频中为什么需要这么多的颜色空间?

04 视频转码

出于各种原因,例如:

  • 终端用户的带宽受限

  • 终端用户支持的视频编解码算法和相机压缩视频的编解码算法不一致

  • ……

一般不会直接把相机产出的视频文件分发给用户去消费。媒体服务商会对相机生成的视频文件进行转码,然后选择合适的转码后的视频分发给终端消费用户。[5]

在视频转码阶段,如果我们希望对原视频进行色域的变换,例如从 BT. 601 转码为 BT. 709,则需要在不同色域的 RGB 数值之间进行转换。[6]

在不同的色域空间进行 RGB 数据的转换,这也就是我们所说的 色彩管理。色彩管理会对图像进行色彩管理以适配当前环境下的颜色效果,从而保证同一张图片在不同输入、输出上都呈现出最好的颜色。[7]

色彩转换需要在某个线性空间下进行操作,并且操作过程需要保持设备的独立性。因此,不同的 RGB 色域空间是不能直接进行转换的,需要一个设备无关、线性的颜色模型作为中转才能实现其转换。

而 XYZ(CIE 1931 XYZ color space) 具备设备无关、线性操作的特性。

在 FFMpeg 中,主要使用 colorspace 滤镜 来完成不同色域空间的转换。[6:1]根据 colorspace 的实现可知,在 FFMpeg 中,BT. 601->BT. 709 的转换过程如下所示:

视频中为什么需要这么多的颜色空间?

在如上的变换中,涉及到 3 个颜色空间的转换,分别是:

  1. YUV 和 RGB 之间的转换

  2. 线性 RGB 和非线性 RGB 之间的转换

  3. 线性 RGB 和 XYZ 之间的转换

在 FFMpeg 中,所有的这些转换参数都保存在 AVFrame 结构中[8]:

  • AVFrame->colorspace 中保存了 YUV/RGB 的转换矩阵

  • AVFrame->color_trc 中保存了线性 RGB 和非线性 RGB 之间的转换函数(transformation characteristics)。

  • AVFrame->color_primaries 中保存了 RGB/XYZ 的转换矩阵

如果用 ffprobe 命令解析视频文件,则:

  • color_space 字段对应 YUV/RGB 的转换矩阵

  • color_transfer 字段对应线性 RGB 和非线性 RGB 之间的转换函数

  • color_primaries 字段对应 RGB/XYZ 的转换矩阵

$ ffprobe -select_streams v:0 -show_entries stream=color_space,color_transfer,color_primaries test.mp4

[STREAM]
color_space=bt2020nc
color_transfer=arib-std-b67
color_primaries=bt2020
[/STREAM]

在如上的例子中,arib-std-b67 也就是我们所熟悉的 HLG。

在 MediaInfo 中,

  • Matrix coefficients 字段对应 YUV/RGB 的转换矩阵

  • Transfer characteristic 字段对应线性 RGB 和非线性 RGB 之间的转换函数

  • Color primaries 字段对应 RGB/XYZ 的转换矩阵

除了如上的参数外,AVFrame->range 还用来存储视频中对应像素的每个分量的取值范围。在 vf_setparams.c 中也作了相关的定义说明:

{"limited", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_MPEG},  0, 0, FLAGS, "range"},
{"tv",      NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_MPEG},  0, 0, FLAGS, "range"},
{"mpeg",    NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_MPEG},  0, 0, FLAGS, "range"},
{"full",    NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_JPEG},  0, 0, FLAGS, "range"},
{"pc",      NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_JPEG},  0, 0, FLAGS, "range"},
{"jpeg",    NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_JPEG},  0, 0, FLAGS, "range"},

05 视频解码&播放

转码之后的视频,可以通过各种渠道分发到终端用户进行消费。对于大部分显示设备,例如CRT显示器、LCD、OLED,屏幕上的每个像素都是通过驱动三个非常靠近但仍然分开的小型 RGB 光源而构建的。[9] 因此,显示屏(监视器,电视机,屏幕等等)仅使用 RGB 模型,并以不同的方式来组织,并显示最终的图像。[10]

视频中为什么需要这么多的颜色空间?

如前所述,不同的显示设备采用的 RGB 的色域并不一定相同,因此,RGB 是一种设备依赖型的颜色模型。[11]在 Mac 电脑上,可以通过显示器配置来选择显示器支持不同的 RGB 色域。

视频中为什么需要这么多的颜色空间?

5.1 显示设备和相机的色域一致

如果编码视频和播放视频的显示器采用的 RGB 色域是一致的,比如都是 sRGB,此时的播放过程相对比较简单。视频解码之后,得到 YUV 数据,然后根据标准将 YUV 数据转换成非线性的 sRGB 数据,然后显示器根据 sRGB 数据显示图像即可。

视频中为什么需要这么多的颜色空间?

5.2 显示设备和相机的色域不一致

当显示设备支持的色域从 sRGB 变为 Rec. 2020 时,如果直接显示 sRGB 色域下的数据,则会导致比较严重的颜色失真。

视频中为什么需要这么多的颜色空间?

和转码阶段的色域转换类似,此时,也需要在不同的色域空间进行 RGB 数据的转换(色彩管理)以保证相同的视频在不同输入、输出、显示设备上都呈现出最好的颜色。

对于显示设备而言,sRGB->RGB(Rec. 2020)的转换过程如下所示:

视频中为什么需要这么多的颜色空间?

因此,对于拍摄设备和显示设备的色域不同时,视频的播放增加了颜色管理的过程。

视频中为什么需要这么多的颜色空间?

06 视频观看

虽然视频信息的采集和最终终端播放采用的都是 RGB 的颜色模型,但是对人眼而言,RGB 其实并不直观,比如我们很难马上反应出天青色的 RGB 色值?

为了能够更直观的表示颜色,又引入了 HSL 色彩模型。HSL 比 RGB 更加直观,比如:想从黄色过度到红色,只需要调整色相即可,饱和度和亮度保持不变。因此,HSL 一般更适合人的色彩感知,而 RGB 更适合显示领域。

为了让作品可以呈现出期望的效果,提升用户的视觉体验,在摄影后期,使用 HSL 对作品进行调整是最方便的一种方式。利用 HSL 对作品进行调整,简单几步就可以让灰暗的「马路随拍」秒变「街头大片」。[12]

视频中为什么需要这么多的颜色空间?

FFMpeg 的 signalstats 滤镜可以分析获取视频的色调、饱和度、亮度信息。但是该滤镜获取的色调、饱和度和 HSL 中的计算 是不一致的。

signalstats 计算色调、饱和度的算法如下所示:

视频中为什么需要这么多的颜色空间?

如果需要得到视频的标准 HSL 信息,可以使用作者开发的 vf_hsl 滤镜。

07 结语

虽然颜色还是那个颜色,但是不同的颜色空间的适用范围并不相同:

  • RGB:面向采集和显示设备

  • YUV:面向存储

  • HSL:面向人类视觉感知

  • XYZ:RGB之间的转换桥梁

从视频采集到视频消费的整个过程,涉及到不同的设备和标准,而不同的设备和标准所支持的色域空间又不相同。正是通过不同的颜色模型转换和不同的色域转换,才得以让我们实现:在不同输入、输出、显示设备上都呈现出最好的颜色,才得以让我们实现以近似相同的观看体验来消费视频。

——END——

参考文献:

  1. CMOS Image Sensor原理简述:https://zhuanlan.zhihu.com/p/158502818

  2. What does linear RGB mean:https://discuss.pixls.us/t/what-does-linear-rgb-mean/16584

  3. How Digital Cameras Work:https://www.astropix.com/html/astrophotography/how.html

  4. Linear vs. Logarithmic Dimming—A White Paper:https://www.pathwaylighting.com/products/downloads/brochure/technical_materials_1466797044_Linear+vs+Logarithmic+Dimming+White+Paper.pdf

  5. What is Video Transcoding and Why Do You Do It:https://medium.com/videocoin/what-is-video-transcoding-and-why-do-you-do-it-348a2610cefc

  6. Talking About Colorspaces and FFmpeg:https://medium.com/invideo-io/talking-about-colorspaces-and-ffmpeg-f6d0b037cc2f

  7. 【颜色科学】RGB和XYZ颜色空间的转换:https://blog.csdn.net/weixin_43194305/article/details/107944264‍‍‍‍‍‍‍‍

  8. Colorspace support in FFmpeg:https://trac.ffmpeg.org/wiki/colorspace

  9. RGB color model:https://en.wikipedia.org/wiki/RGB_color_model

  10. 数字视频导论:https://wangwei1237.github.io/2020/02/28/Introduction-to-digital-video-technology/

  11. Computational Color Technology:https://www.spiedigitallibrary.org/ebooks/PM/Computational-Color-Technology/eISBN-9780819481085/10.1117/3.660835

  12. 用HSL调色=简单、快速、超出片:https://zhuanlan.zhihu.com/p/142767122文章来源地址https://www.toymoban.com/news/detail-412466.html

到了这里,关于视频中为什么需要这么多的颜色空间?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么现在越来越多的企业选择云计算?

            云计算是用于描述在互联网上发生的一类新的基于网络计算的术语。 这些平台通过提供非常简单的图形界面,隐藏了用户和应用程序的基础架构的复杂性和细节。 云对用户和应用程序是透明的,它们可以以多种方式构建。 一般来说,它们建立在PC服务器集群上,

    2024年02月08日
    浏览(81)
  • 为什么越来越多的人开始学习大数据了?

    现在,在数字化转型的推动下,越来越多的企业意识到大数据的魅力,并不断在这个领域投入资金,Python+大数据开发相关人才也备受青睐! 大数据从业领域很宽广,不管是科技领域还是食品产业,零售业等都是需要大数据人才进行大数据的处理,以提供更好的用户体验,优

    2024年02月02日
    浏览(59)
  • 为什么越来越多的企业选择了云计算

    随着数字化转型的加速,越来越多的企业开始选择云计算作为信息技术应用的基础设施。那么,云计算究竟有哪些优势?未来发展趋势又是怎样的呢?让我们一起来探讨一下吧。 随着数字化转型的加速,越来越多的企业开始选择云计算作为信息技术应用的基础设施。那么,云

    2024年02月05日
    浏览(56)
  • Netty为什么高效,为什么这么受欢迎?

    上篇文章通过 Java NIO 的处理流程与 Netty 的总体流程比较,并结合 Netty 的源码,可以更加清晰地理解Netty。本文将结合源码详细解析Netty的高效和强大功能的设计原理,学习 Netty 是如何实现其卓越的性能和功能特性,也希望可以在日后工作中利用到 Netty 的设计思想。 我们先看

    2024年02月12日
    浏览(70)
  • 为什么越来越多的人转行学IT当程序员?

    疫情当下,大学毕业生的人数越来越多,就业越来越困难,导致毕业生的就业压力越来越大。但就在这种“毕业即失业”的就业形势下,IT行业的从业者却拿着高薪,在所有行业中成为“佼佼者”。 为什么学IT的人越来越多? 01 行业发展前景,一直向上 我们的工作、生活和学

    2023年04月11日
    浏览(75)
  • 区块链到底是什么,为什么这么火爆

    一、相关背景介绍 互联网上的贸易,几乎都需要借助可资信赖的第三方信用机构来处理电子支付信息。这类系统仍然内生性地受制于“基于信用的模式”。 区块链技术是构建比特币区块链网络与交易信息加密传输的基础技术。它基于密码学原理而不基于信用,使得任何达成

    2023年04月08日
    浏览(48)
  • Kafka为什么这么快?

    Kafka 是一个基于发布-订阅模式的消息系统,它可以在多个生产者和消费者之间传递大量的数据。Kafka 的一个显著特点是它的高吞吐率,即每秒可以处理百万级别的消息。那么 Kafka 是如何实现这样高得性能呢?本文将从七个方面来分析 Kafka 的速度优势。 零拷贝技术 仅可追加

    2024年02月11日
    浏览(49)
  • 为什么越来越多的企业选择云数据存储而放弃本地数据存储?

    随着企业的发展,它们会产生大量数据。企业已经意识到,利用他们的数据做出数据驱动的决策对于创新和保持竞争优势至关重要。 本文将会探讨企业在收集和分析大数据时可能面临的主要挑战,以及将企业数据仓库部署到本地或云数据存储的选择。我们将根据安全性、成本

    2024年02月08日
    浏览(49)
  • AIGC技术到底是什么?为什么这么火热?

    AIGC(Artificial Intelligence in Game Creation)技术是指 利用人工智能技术来辅助游戏创作的过程 。 它可以通过机器学习、深度学习和自然语言处理等技术,从大量的游戏数据中提取规律和模式,进而生成游戏的内容、关卡设计、角色行为等元素。   AIGC技术可以帮助游戏开发者快速

    2024年02月13日
    浏览(48)
  • 为什么越来越多的开发者放弃使用Postman,而选择Apifox

    1、Postman + Swagger + Mock + JMeter 作为一个后端开发,我做的大部分项目一般都是基于 Swagger 来管理 API 文档,基于 Postman 来做接口调试,基于 JMeter 来做接口性能测试,基于 RAP 等工具 Mock API 数据。 2、存在的问题 (1)多系统数据不互通 API设计者、前端开发、后端开发、测试人

    2024年01月20日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包