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

在视频处理中,经常会用到不同色彩空间:非线性RGB,线性 RGB,YUV,XYZ……为什么需要这么多的色彩空间呢?
1、视频采集时的线性RGB颜色空间
由数码相机中的 CMOS 传感器产生并写入原始文件(Raw File)的数据(线性RGB图像)是线性的。与普通照片相比,线性数据通常看起来非常暗且对比度较低。
在这里插入图片描述2、人类视觉系统需要非线性的图像颜色空间
研究表明,人类视觉系统是非线性感知光亮度,是以对数函数的方式来感知光亮度。这意味着,人眼会提高暗部的敏感度,降低高光部分的敏感度。

在这里插入图片描述从数学角度看,感知光强度和测量光强度之间存在一个近似的平方关系,具体如下式所示。
在这里插入图片描述
3、如上,人类视觉感知系统不是以线性方式工作的,必须使用非线性曲线来对拍摄生成 的线性数据进行变换,从而使得拍摄的图像色调与我们的视觉系统的工作方式相匹配,这个过程就是 伽马校正。
在这里插入图片描述
这样,在从线性 RGB 空间转换到非线性 RGB 空间时,需要 γ \gamma γ 作为转换参数。相机中的 ISP 模块负责对图像传感器的线性 RGB 进行伽马校正进而产生对应的符合人眼感知的非线性 RGB 数据。
在这里插入图片描述显示设备支持的色域空间不同,对于不同的显示设备而言,伽马校正之后的 RGB 数值也不同。从这个角度讲,RGB 是设备依赖型的色彩空间

4、视频压缩所需的颜色空间
根据如上信息可知,相机系统经过 ISP 处理后,最终得到非线性的RGB (sRGB)信息。对于视频而言,如果以 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\H264)对获取的数据进行视频编码,最终得到视频文件(此处忽略音频采集编码及合流的操作)。
到目前为止,视频图像整个处理过程如下:
在这里插入图片描述
5、视频转码涉及的颜色空间
出于各种原因,例如:
终端用户的带宽受限
终端用户支持的视频编解码算法和相机压缩视频的编解码算法不一致
……

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

在视频转码阶段,如果我们希望对原视频进行色域的变换,例如从 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 之间的转换

6、视频解码&播放涉及到的颜色空间
转码之后的视频,通过各种渠道分发到终端用户进行消费。大部分显示设备,例如CRT显示器、LCD、OLED,屏幕上的每个像素是通过驱动三个非常靠近但仍然分开的小型 RGB 光源构建的。 因此,显示屏(监视器,电视机,屏幕等等)仅使用 RGB 模型,以不同的方式组织,显示最终的图像。在这里插入图片描述如前所述,RGB 是一种设备依赖型颜色模型,不同显示设备采用 RGB 色域不一定相同。在 Mac 电脑上,可以通过显示器配置来选择显示器支持不同的 RGB 色域。
在这里插入图片描述

下面分几种情况介绍显示中涉及的颜色空间
(1)显示设备和相机的色域一致
在这里插入图片描述
编码视频和播放视频的显示器的 RGB 色域是一致的,比如都是 sRGB。视频解码获取 YUV 数据,根据标准YUV 数据->成非线性的 sRGB 数据,显示器根据 sRGB 数据显示即可。
(2)显示设备和相机的色域不一致
若显示设备支持色域从 sRGB(Standard-Definition下的色域) 变为 Rec. 2020 ,直接显示 sRGB 色域下的数据,会导致比较严重的颜色失真。
在这里插入图片描述
和转码阶段色域转换类似,在不同的色域空间进行 RGB 数据转换(色彩管理)以保证相同视频在不同输入、输出、显示设备上都呈现出最好的颜色。
对于显示设备而言,sRGB->RGB(Rec. 2020)的转换过程如下所示:
在这里插入图片描述这种情况下,拍摄设备和显示设备色域不同,视频从采集到播放增加了颜色管理,如图示:
在这里插入图片描述
7、视频观看涉及的颜色空间
虽然视频采集和最终终端播放采用都是 RGB 颜色模型,但对人眼而言,RGB 其实并不直观,比如我们很难马上反应出天青色的 RGB 色值?

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

在摄影后期,HSL 调整作品是最方便的一种方式。简单几步就可以让灰暗的马路随拍秒变街头大片,如下:
原始图像在这里插入图片描述
HLS模型处理后的图像在这里插入图片描述

总结
虽然颜色还是那个颜色,但是不同的颜色空间的适用范围并不相同:
RGB:面向采集和显示设备
YUV:面向存储
HSL:面向人类视觉感知
XYZ:RGB之间的转换桥梁

从视频采集到视频消费的过程,涉及到不同的设备和标准,而不同的设备和标准所支持的色域空间又不相同。正是通过不同的颜色模型转换和不同的色域转换,才得以让我们实现:在不同输入、输出、显示设备上都呈现出最好的颜色,才得以让我们实现以近似相同的观看体验来消费视频。
参考 https://wangwei1237.github.io/2022/08/14/Why-so-much-color-space-in-video/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/574983.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习检测算法YOLOv5的实战应用

在当前的检测项目中,需要一个高效且准确的算法来处理大量的图像数据。经过一番研究和比较,初步选择了YOLOv5作为算法工具。YOLOv5是一个基于深度学习的检测算法,以其快速和准确而闻名。它不仅能够快速处理图像数据,还能提供较高的…

区块链技术与应用学习笔记(12-13节)——北大肖臻课程

目录 12.BTC-匿名性 一、什么是匿名? 1,有可能破坏比特币匿名性的两个方面 2,如何提高匿名性 一个比特币用户能采用什么样的方法尽量提高个人的匿名性? 分解: 1、网络层怎么提高匿名性? 2、应用层怎么提高匿名性? 零知…

揭露 FileSystem 引起的线上 JVM 内存溢出问题

作者:来自 vivo 互联网大数据团队-Ye Jidong 本文主要介绍了由FileSystem类引起的一次线上内存泄漏导致内存溢出的问题分析解决全过程。 内存泄漏定义(memory leak):一个不再被程序使用的对象或变量还在内存中占有存储空间&#x…

无人机生态环境监测、图像处理与 GIS 数据分析

原文链接:无人机生态环境监测、图像处理与 GIS 数据分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247602414&idx6&sn950b55bc2cc4812c838c66af2118d74e&chksmfa821109cdf5981f2af51bd27e459a1c46dd783cdceba5aa3693461260bbf7b0101ac8…

Vim学习笔记01~04

第01章: 遁入空门,模式当道 1.什么是vim Vim是一个高效的文本编辑工具,并且可以在编程开发过程中发挥越来越重要的作用。 事实上,有不少编程高手使用他们来进行代码的开发,并且对此赞不绝口。 2.本系列目的 但是让…

Java作业7-Java异常处理

异常处理这块有些不太理解,看看Bz网课-异常 编程1-计算器输入异常 题目 计算器输入异常 在实验三中实现的命令行计算器已有功能基础上,添加异常处理机制,当用户输入的操作数为非整数时,利用异常处理机制显示错误提示信息。如&a…

网易云热评加密函数逆向(Jsrpc)

今天给大家来个jsrpc实战教程,让大家继续加深对jsrpc的理解和认识。 1、因为网易云音乐热评的加密并不在cookie上,而是参数加密,所以这里就不需要进行hook住cookie了。 2、之前就知道网易云音乐热评的加密存在之地是在下图的位置,是那个函数window.asrsea(JSON.stringify(…

项目实战 | 责任链模式 (下)

案例二:工作流,费用报销审核流程 同事小贾最近刚出差回来,她迫不及待的就提交了费用报销的流程。根据金额不同,分为以下几种审核流程。报销金额低于1000元,三级部门管理者审批即可,1000到5000元除了三级部…

免费分享一套SpringBoot+Vue家政服务管理平台管理系统,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue家政服务管理平台管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue家政服务管理平台系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue家政服务管理平台系统 Ja…

coverage,一个有趣的 Python 库!

更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - coveragepy。 Github地址:https://github.com/nedbat/coveragepy 在软件开发中,测试是确保代码质量和稳定性的关键步骤之一。而代码覆盖率则是衡量…

2024新版计算机网络视频教程65集完整版(视频+配套资料)

今日学计算机网络,众生皆叹难理解。 却见老师神乎其技,网络通畅如云烟。 协议层次纷繁复杂,ARP、IP、TCP、UDP。 路由器交换机相连,数据包穿梭无限。 网络安全重于泰山,防火墙、加密都来添。 恶意攻击时刻存在&#xf…

深圳证券交易所Binary行情数据接口规范

对接深圳证券交易所Binary行情数据接口其实并不难,你需要具备以下知识。 1、需要了解Binary报文设计结构,消息头消息体消息尾。 消息体: 如果是纯map结构的比较简单,字段平铺开来即可。如{"id":"1","…

与AI对话:探索最佳国内可用的ChatGPT网站

与AI对话:探索最佳国内可用的ChatGPT网站 🌐 链接: GPTGod 点击可注册 🏷️ 标签: GPT-4 支持API 支持绘图 Claude 📝 简介:GPTGod 是一个功能全面的平台,提供GPT-4的强大功能&…

多线程(安全 同步 线程池)

线程安全问题 多线程给我们的程序带来了很大性能上的提升,但是也可能引发线程安全问题线程安全问题指的是当多个线程同时操作同一个共享资源的时候,可能会出现的操作结果不符预期问题 取钱的线程安全问题 线程安全问题出现的原因? 存在多线…

idea创建完项目如何隐藏不重要的文件

如果您不打算直接使用这些脚本,而是更倾向于通过IDEA的内置工具来运行Maven命令,那么您可以选择隐藏这些文件。但是,隐藏这些文件并不会影响它们的功能,只是在项目视图中不再显示它们。 1.转到 File > Settings(Wi…

时间,空间复杂度讲解——夯实根基

前言:本节内容属于数据结构的入门知识——算法的时间复杂度和空间复杂度。 时间复杂度和空间复杂度的知识点很少, 也很简单。 本节的主要篇幅会放在使用具体例题来分析时间复杂度和空间复杂度。本节内容适合刚刚接触数据结构或者基础有些薄弱的友友们哦。…

【threejs教程7】threejs聚光灯、摄影机灯和汽车运动效果

【图片完整效果代码位于文章末】 在上一篇文章中我们实现了汽车模型的加载,这篇文章主要讲如何让汽车看起来像在运动。同时列出聚光灯和摄像机灯光的加载方法。 查看上一篇👉【threejs教程6】threejs加载glb模型文件(小米su7)&…

详解23种设计模式——单例模式

单例模式 | CoderMast编程桅杆单例模式 单例模式是最常用的设计模式之一,他可以保证在整个应用中,某个类只存在一个实例化对象,即全局使用到该类的只有一个对象,这种模式在需要限制某些类的实例数量时非常有用,通常全局…

The Clock and the Pizza [NeurIPS 2023 oral]

本篇文章发表于NeurIPS 2023 (oral),作者来自于MIT。 文章链接:https://arxiv.org/abs/2306.17844 一、概述 目前,多模态大语言模型的出现为人工智能带来新一轮发展,相关理论也逐渐从纸面走向现实,影响着人们日常生活…

WebAssembly学习记录

1.WebAssembly 1.1 指令集 概念:二进制编码集合。 依据计算机组成原理和计算机概论,指令集是一组二进制编码。 作用:控制硬件。 这些二进制指令直接作用于硬件电路,控制硬件完成指定操作。 例如:控制数据进入某个寄存…