肛门疼痛是什么原因| 乙肝第二针最晚什么时候打| 农历九月五行属什么| 茯苓和土茯苓有什么区别| 1215是什么星座| 辰龙是什么意思| 观音土是什么| 狗能吃什么水果| 15朵玫瑰花代表什么意思| facebook是什么| 戒指戴无名指是什么意思| 试桩是什么意思| 为什么经常打嗝| 五味子不适合什么人喝| 突然流鼻血是什么征兆| 棍子鱼又叫什么鱼| 龋齿是什么样子的图片| 复方北豆根氨酚那敏片是什么药| 香港警司是什么级别| 立字五行属什么| 胎神什么意思| 物理意义是什么意思| 头皮屑结块是什么原因| 世界上最长的英语单词是什么| 为什么一直打哈欠| 肾虚有什么症状| 电荷是什么| 甲亢甲减有什么症状| 哭什么| 闪光眼是什么症状| 狗为什么喜欢吃骨头| 布衣蔬食是什么意思| 唔该是什么意思| 螃蟹喜欢吃什么| 凌厉是什么意思| 什么粥养胃| psg是什么意思| 睡觉咬舌头是什么原因| 赛博朋克是什么意思| 一什么春天| 猫头鹰属于什么科| 中午12点半是什么时辰| 疝气挂什么科| 东北是什么气候| 昙花什么时候开花| 哈达是什么| sla是什么| 客家人为什么叫客家人| 毛囊炎什么症状| 割包皮有什么好处和坏处| 3n是什么意思| penis什么意思| 全科医学科是什么科| 飞五行属什么| 小孩个子矮小吃什么促进生长发育| 玉米除草剂什么时候打最好| 父亲是o型血孩子是什么血型| 阿迪达斯是什么牌子| 鼻塞用什么药| ipadair2什么时候上市的| 老年人流鼻血是什么原因| 1963年五行属什么| 蓝帽子标志是什么意思| 上海话十三点是什么意思| 胸闷是什么原因造成的| dior是什么意思| 为什么不能空腹喝牛奶| 沐雨栉风是什么生肖| 牙龈肿痛上火吃什么药最好| 边缘性人格障碍是什么| 水痘用什么药| 盆腔积液什么症状| 鸟语花香是什么生肖| 青岛有什么特产| 黑曜石是什么| 44岁月经量少是什么原因| 胃功能三项检查是什么| 最大的狗是什么品种| 下载什么软件可以赚钱| 鲶鱼效应是什么意思| 鱼的偏旁部首是什么| 84年是什么命| 命运多折 什么生肖| 广基息肉是什么意思| 拉肚子吃什么蔬菜| 人类什么时候灭绝| 青团是什么节日吃的| 认知障碍是什么意思| 什么的狮子| 疳积有什么症状| 公务员国考和省考有什么区别| 什么预警停课| 肌无力是什么病| 寒天是什么| 出品是什么意思| 身上长很多痣是什么原因| 经常咬手指甲是什么原因| 88年出生属什么生肖| 又字五行属什么| 植树造林的好处是什么| hpv病毒是什么| 鬼一般找什么人压床| 什么动物捉害虫| 手心朝上是什么意思| 什么鱼吃鱼屎| 骨折的人吃什么恢复快| 吃什么能降甘油三酯| 蝉是什么| 晚上九点多是什么时辰| 颈椎痛吃什么药| 敏感肌是什么| 梦到自己生孩子了是什么预兆| 出生证号是什么| 抗hbc阳性是什么意思| 液基薄层细胞检测是什么| 疱疹在什么情况下传染| 血压高有什么危害| 桃字五行属什么| 什么是养生| 张仲景的著作是什么| 才美不外见的见是什么意思| 缺钾是什么原因| 舌苔白厚是什么原因| ella是什么意思| 翠鸟吃什么| kms是什么药| 哺乳期不能吃什么| 凤梨和菠萝有什么区别| 吃茶油对身体有什么好处| 为什么合欢树又叫鬼树| 骨质疏松是什么原因引起的| 女生的名字叫什么好听| 同房子宫疼痛什么原因| 宫外孕是什么原因造成的| 苦瓜炒什么好吃| 鸡米头是什么| 荨麻疹用什么药好| 胆红素偏高是什么意思| 婊子是什么生肖| 白蛋白低吃什么| 梦见金项链是什么意思| 阴茎硬不起吃什么药| 企业hr是什么意思| 慢性浅表性胃炎吃什么药好得快| 吃完羊肉不能吃什么水果| 泰山石敢当什么意思| 舌面有裂纹是什么原因| 黑脸娃娃有什么功效| 悲伤是什么意思| 水瓶是什么象星座| 疱疹吃什么药可以根治| 胃疼屁多是什么原因| 1981年属什么| 北极为什么没有企鹅| 磨破皮了涂什么药| 飞机杯什么意思| m是什么单位| 昭字五行属什么| rian是什么意思| 时隔是什么意思| cg是什么| 丑五行属什么| swisse是什么药| 江西是什么菜系| 出虚汗是什么原因| 五浊恶世是什么意思| naps是什么意思| 喉咙发炎用什么药| 水逆是什么意思| 胃酸反流吃什么药| 桃皮绒是什么面料| 便秘是什么引起的| 手指关节痛什么原因| 什么的生长| 红斑是什么皮肤病| 仲夏什么意思| 再生障碍性贫血是什么病| 南昌有什么好玩的| 呼吸重是什么原因| 生命是什么意思| 3月份是什么星座| 头疼头晕是什么原因| 十一月六号是什么星座| 女人下面 什么味道| 杨梅有什么好处| hpv什么意思| 煎饼卷什么菜好吃| 相依相偎是什么意思| 肚脐上三指是什么地方| 流动人口是什么意思| 归元寺求什么最灵验| 正常龟头什么样子| 避孕套是什么材质| 黑枸杞泡水喝有什么作用和功效| 5月7号是什么星座| 梅毒检查挂什么科| 鼻屎有臭味是什么原因| 如法炮制是什么意思| 什么叫磨玻璃结节| 乙肝表面抗原大于250是什么意思| 灯火葳蕤是什么意思| 为什么四川总地震| 梦之蓝是什么香型| 小孩呕吐是什么原因引起的| 小叶增生吃什么药好| 凝视是什么意思| 咳白痰吃什么药效果好| 女孩第一次来月经需要注意什么| 尼姑庵是什么意思| 五谷指什么| 周公吐哺天下归心是什么意思| 肠炎可以吃什么食物| 什么是水肿| 牡丹花什么颜色| 彩色多普勒超声常规检查是什么| 什么蛋白质含量高| 悲欢离合是什么意思| 脑子萎缩是什么原因造成的| 梦到怀孕了是什么预兆| 美国现在是什么时间| 高血糖什么原因引起| 老年人尿血是什么原因| 喜爱的反义词是什么| c13呼气试验阳性是什么意思| 拉肚子可以吃什么药| 碳酸钠俗称什么| 舌苔白厚是什么原因| 党委副书记是什么级别| 白色的猫是什么品种| 妇科湿疹用什么药膏最有效| 天空中有什么| 黑马是什么意思| 心率慢吃什么药| 什么是善良| 千克又叫什么| 公积金缴存基数是什么| 舒张压和收缩压是什么| 郑和下西洋是什么时候| 梅菜扣肉的梅菜是什么菜| 是什么符号| 腰椎退变是什么意思| 心肌病是什么病严重吗| 知交是什么意思| 小腿灼热感是什么原因| 男性检查hpv挂什么科| 外贸是什么| 猪肝炒什么好吃| 勤对什么| 92年属什么| 心衰吃什么药最好| 进国企需要什么条件| 扫兴什么意思| 阴茎不硬是什么原因| 测骨龄去医院挂什么科| 腿脚酸软无力是什么原因| 奥美拉唑主要治什么| 冷漠什么意思| 什么茶下火| 大黄米和小黄米有什么区别| 记仇的人是什么性格| 呼吸困难是什么原因引起的| 邓超什么星座的| 怀孕什么时候打胎最合适| 尿胆红素阳性是什么意思| 百度

默认
打赏 发表评论 0
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换
阅读(26819) | 评论(0 收藏1 淘帖2 1
微信扫一扫关注!

本文由百度技术王伟分享,原题“视频中为什么需要这么多的颜色空间?”,即时通讯网收录时有修订和改动。


1、引言


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

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

即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_cover-opti.png

2、系列文章


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


3、视频采集


即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_1.jpg

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

过程是这样的:

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

ADC 数字信号的取值范围 :
[pquote]ADC 转换之后的数字信号的取值范围受限于 ADC 设备。对于 8-bits 的 ADC 而言,数字信号的取值范围为 [0, 2^8-1],因此,对于每一个像素而言,会用 [0, 255] 之间的整数来进行编码。[/pquote]
即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_2.jpg

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

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

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

即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_3.jpg

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

4、探索视频伽马校正


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

即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_4.png

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

即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_5.png

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

即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_6.png

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

即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_7.png

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)对获取的数据进行视频编码,最终得到视频文件(此处忽略了音频的采集编码以及合流的操作)。

即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_8.png

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 的转换过程如下所示:
即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_9.png

在如上的变换中,涉及到 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 模型,并以不同的方式来组织,并显示最终的图像。

即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_10.jpg

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

即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_11.jpg

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


如果编码视频和播放视频的显示器采用的 RGB 色域是一致的,比如都是 sRGB,此时的播放过程相对比较简单。

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

即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_12.png

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


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

即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_13.png

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

对于显示设备而言,sRGB->RGB(Rec. 2020)的转换过程如下所示:
即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_14.png

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

即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_15.png

8、视频观看


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

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

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

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

即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_16.gif

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

signalstats 计算色调、饱和度的算法如下所示:
即时通讯音视频开发(二十):一文读懂视频的颜色模型转换和色域转换_17.png

如果需要得到视频的标准 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] 零基础,史上最通俗视频编码技术入门

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:字符编码技术专题(五):前端必读的计算机字符编码知识入门下一篇:移动端弱网优化专题(九):淘宝移动端统一网络库的架构演进和弱网优化实践

本帖已收录至以下技术专辑

推荐方案
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部
fdp是什么意思 什么规律 小姑独处是什么意思 教授相当于什么级别 姓傅的男孩取什么名字
加速度是什么意思 刺猬的刺有什么作用 乌龟不能吃什么 将军是什么生肖 喜欢闻汽油味是什么原因
梦见打狼是什么预兆 1992年出生的是什么命 海绵是什么材料做的 于谦为什么加入国民党 脂肪粒是什么
芥末是什么做的 palladium是什么牌子 殊胜的意思是什么 penis什么意思 九霄云外是什么生肖
猫头鹰吃什么xinmaowt.com 一声什么hcv9jop1ns9r.cn 医院规培是什么意思kuyehao.com 肝火旺失眠吃什么药hcv9jop5ns3r.cn 睾丸痛挂什么科hcv7jop6ns6r.cn
gm眼镜是什么牌子hcv9jop3ns3r.cn tct检查什么项目hcv9jop6ns0r.cn 白细胞酯酶弱阳性是什么意思ff14chat.com 咀嚼食用是什么意思imcecn.com 国历是什么意思helloaicloud.com
六十岁是什么之年hcv9jop4ns5r.cn 玉兰花什么季节开hcv8jop7ns2r.cn 咳嗽能吃什么水果beikeqingting.com 六月份出生的是什么星座hcv9jop3ns7r.cn 支气管炎吃什么药最好sscsqa.com
白细胞降低是什么原因hcv8jop5ns1r.cn 属牛的本命佛是什么佛hcv8jop9ns1r.cn 血常规检查什么hcv8jop2ns4r.cn 琴酒是什么酒hcv8jop3ns0r.cn 深深是什么意思hcv7jop6ns3r.cn
百度