当前位置:首页 > 壁挂炉 > 文章正文

即时通讯音视频开拓(二十):一文读懂视频的颜色转换和色域转换

编辑:[db:作者] 时间:2024-08-25 03:06:15

本文将以普通易懂的笔墨,勾引你理解视频是如何从采集开始,历经各种步骤,终极通过颜色模型转换和不同的色域转换,让你看到赏心悦目的视频结果的。

2、系列文章

本文是系列文章中的第20篇,本系列文章的大纲如下:

即时通讯音视频开拓(二十):一文读懂视频的颜色转换和色域转换

《即时通讯音视频开拓(一):视频编解码之理论概述》

《即时通讯音视频开拓(二):视频编解码之数字视频先容》

《即时通讯音视频开拓(三):视频编解码之编码根本》

《即时通讯音视频开拓(四):视频编解码之预测技能先容》

《即时通讯音视频开拓(五):认识主流视频编码技能H.264》

《即时通讯音视频开拓(六):如何开始音频编解码技能的学习》

《即时通讯音视频开拓(七):音频根本及编码事理入门》

《即时通讯音视频开拓(八):常见的实时语音通讯编码标准》

《即时通讯音视频开拓(九):实时语音通讯的覆信及覆信肃清概述》

《即时通讯音视频开拓(十):实时语音通讯的覆信肃清技能详解》

《即时通讯音视频开拓(十一):实时语音通讯丢包补偿技能详解》

《即时通讯音视频开拓(十二):多人实时音视频谈天架构磋商》

《即时通讯音视频开拓(十三):实时视频编码H.264的特点与上风》

《即时通讯音视频开拓(十四):实时音视频数据传输协议先容》

《即时通讯音视频开拓(十五):聊聊P2P与实时音视频的运用情形》

《即时通讯音视频开拓(十六):移动端实时音视频开拓的几个建议》

《即时通讯音视频开拓(十七):视频编码H.264、V8的前世今生》

《即时通讯音视频开拓(十八):详解音频编解码的事理、演进和运用选型》

《即时通讯音视频开拓(十九):零根本,史上最普通视频编码技能入门》

《即时通讯音视频开拓(二十):一文读懂视频的颜色模型转换和色域转换》( 本文)

3、视频采集

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

过程是这样的:

1)图像传感器可以将一个入射光子(photon)转换为对应的一个电子(electron);2)在曝光韶光内,图像传感器对转换的电子进行电荷积累;3)然后,图像传感器会将积累的电荷旗子暗记转换成对应的电压旗子暗记;4)末了,利用 ADC 把电旗子暗记转换成数字旗子暗记,而转换后的数字旗子暗记则为某个范围内的整数值。

ADC 数字旗子暗记的取值范围 :

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

ADC 转换的数字旗子暗记的数值是一个线性编码的过程,这意味着如果将图像传感器上的光量增加 1 倍,则 ADC 转换之后对应的数值也会增加 1 倍。

这是一个非常有用的特性:无论是增加物理天下的光量,还是增加 ADC 转换之后的数值,对图片而言,都会带来相同的效果。
线性编码意味着我们所处理的数据和光发射的强度成正比关系。

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

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

4、探索视频伽马校正

研究表明:人类视觉系统因此对数函数的办法来感知光亮度。
这意味着:人眼会提高暗部的敏感度,降落高光部分的敏感度。

从数学角度看,感知光强度和丈量光强度之间存在一个似的方关系,详细如下式所示。

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

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

RGB 的设备依赖性 :

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

5、视频压缩

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

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

RGB->YUV,不同标准有不同哀求,一样平常常用的标准有:

1)BT. 601(SD: Standard-Definition);2)BT. 709(HD: High-Definition);3)BT. 2020(UHD: Ultra-High-Definition)。

把稳 :

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

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

6、视频转码

出于各种缘故原由,例如:

1)终端用户的带宽受限;2)终端用户支持的视频编解码算法和相机压缩视频的编解码算法不一致;3)……

一样平常不会直接把相机产出的视频文件分发给用户去消费。
媒体做事商会对相机天生的视频文件进行转码,然后选择得当的转码后的视频分发给终端消费用户。

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

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

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

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

在 FFMpeg 中,紧张利用 colorspace 滤镜 来完身分歧色域空间的转换。

根据 colorspace 的实现可知,在 FFMpeg 中,BT. 601->BT. 709 的转换过程如下所示:

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

1)YUV 和 RGB 之间的转换;2)线性 RGB 和非线性 RGB 之间的转换;3)线性 RGB 和 XYZ 之间的转换。

在 FFMpeg 中,所有的这些转换参数都保存在 AVFrame 构造中:

1)AVFrame->colorspace 中保存了 YUV/RGB 的转换矩阵;2)AVFrame->color_trc 中保存了线性 RGB 和非线性 RGB 之间的转换函数(transformation characteristics);3)AVFrame->color_primaries 中保存了 RGB/XYZ 的转换矩阵;

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

1)color_space 字段对应 YUV/RGB 的转换矩阵;2)color_transfer 字段对应线性 RGB 和非线性 RGB 之间的转换函数;3)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 中:

1)Matrix coefficients 字段对应 YUV/RGB 的转换矩阵;2)Transfer characteristic 字段对应线性 RGB 和非线性 RGB 之间的转换函数;3)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"},

7、视频解码&播放7.1基本

转码之后的视频,可以通过各种渠道分发到终端用户进行消费。

对付大部分显示设备,例如CRT显示器、LCD、OLED,屏幕上的每个像素都是通过驱动三个非常靠但仍旧分开的小型 RGB 光源而构建的。

因此:显示屏(监视器、电视机、屏幕等等)仅利用 RGB 模型,并以不同的办法来组织,并显示终极的图像。

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

7.2显示设备和相机的色域同等

如果编码视频和播放视频的显示器采取的 RGB 色域是同等的,比如都是 sRGB,此时的播放过程相比拟较大略。

视频解码之后:得到 YUV 数据,然后根据标准将 YUV 数据转换成非线性的 sRGB 数据,然后显示器根据 sRGB 数据显示图像即可。

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

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

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

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

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

8、视频不雅观看

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

为了能够更直不雅观的表示颜色,又引入了 HSL 色彩模型。

HSL 比 RGB 更加直不雅观,比如:想从黄色过度到赤色,只须要调度色相即可,饱和度和亮度保持不变。
因此,HSL 一样平常更适宜人的色彩感知,而 RGB 更适宜显示领域。

为了让作品可以呈现出期望的效果,提升用户的视觉体验,在拍照后期,利用 HSL 对作品进行调度是最方便的一种办法。
利用 HSL 对作品进行调度,大略几步就可以让灰暗的「马路随拍」秒变「街头大片」。

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

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

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

9、本文小结

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

详细是:

1)RGB:面向采集和显示设备;2)YUV:面向存储;3)HSL:面向人类视觉感知;4)XYZ:RGB之间的转换桥梁。

从视频采集到视频消费的全体过程,涉及到不同的设备和标准,而不同的设备和标准所支持的色域空间又不相同。

正是通过不同的颜色模型转换和不同的色域转换,才得以让我们实现:在不同输入、输出、显示设备上都呈现出最好的颜色,并以似相同的不雅观看体验来消费视频。

10、参考文献

[1] CMOS Image Sensor事理简述

[2] 数字视频导论

[3] 用HSL调色=大略、快速、超出片

[4] 零根本入门:实时音视频技能根本知识全面盘点

[5] 实时音视频面视必备:快速节制11个视频技能干系的根本观点

[6] 轻松诙谐,讲解视频编解码技能的过去、现在和将来

[7] 写给小白的实时音视频技能入门提要

[8] 福利贴:最全实时音视频开拓要用到的开源工程汇总

[9] 详解音频编解码的事理、演进和运用选型

[10] 零根本,史上最普通视频编码技能入门

技能互换:

- 移动端IM开拓入门文章:《新手入门一篇就够:从零开拓移动端IM》

- 开源IM框架源码:https://github.com/JackJiang2011/MobileIMSDK(备用地址点此)

(本文已同步发布于:http://www.52im.net/thread-4467-1-1.html)

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除,如需转载请保留原文地址:http://www.baanla.com/bgl/92306.html

XML地图 | 自定链接

Copyright 2005-20203 www.baidu.com 版权所有 | 琼ICP备2023011765号-4 | 统计代码

声明:本站所有内容均只可用于学习参考,信息与图片素材来源于互联网,如内容侵权与违规,请与本站联系,将在三个工作日内处理,联系邮箱:123456789@qq.com