RGB与YUV

news2024/11/26 0:46:40

什么是YUV

YUV也叫YCbCr模型,是相对于RGB模型的一种广泛使用的颜色表示模型,YUV格式是1938年由一个法国通信工程师M. Georges Valensi发明的。

YUV中的Y表示亮度luminance,UV表示色度chrominance;

 我们知道人眼是个复杂的器官,有许多部分组成,但我们最感兴趣的是视锥细胞和视杆细胞。眼睛有1.2亿个视杆细胞和6百万个视锥细胞。让我们把颜色和亮度放在眼睛的功能部位上。视杆细胞主要负责亮度,而视锥细胞负责颜色,有三种类型的视锥,每个都有不同的颜料,叫做:S-视锥(蓝色),M-视锥(绿色),L-视锥(红色)。既然我们的视杆细胞(亮度)比视锥细胞多很多,一个合理的推断是相比颜色,我们有更好的能力去区分黑暗和光亮。

一旦我们知道我们对亮度(图像中的亮度)更敏感,我们就可以利用它,这样另一种模型被发明出来,能将亮度(光亮)和色度(颜色)分离开,它被称为 YCbCr*,也就是我们熟知的的YUV。

为什么用YUV

YUV主要是解决了两个问题,导致其被广泛运用。

1.YUV 可以完美兼容黑白电视机,黑白电视收到YUV信号时只需要丢掉UV显示Y即可。全球两大主要的电视广播制式(PAL/NTSC)都使用YUV作为信号传输格式。

2.YUV采样可以大大的节约存储空间和传输带宽。并且不会造成太多的信息丢失。如使用YUV420采样相较于RGB可以节约1/2的存储空间。

采样分类

  • 4:4:4表示完全取样。

  • 4:2:2表示2:1的水平取样,垂直完全采样。

  • 4:2:0表示2:1的水平取样,垂直2:1采样。

  • 4:1:1表示4:1的水平取样,垂直完全采样。

未采样前:

第一行四个像素为:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]  

第二行四个像素为:[Y4 U4 V4] [Y5 U5 V5] [Y6 U6 V6] [Y7 U7 V7]  

4:2:0 采样

它指得是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储。

相邻的扫描行存储不同的色度分量, 也就是说,如果一行是4:2:0的话,下一行就是4:0:2

第一行采样像素为:[Y0 U0     ] [Y1           ] [Y2 U2      ] [Y3           ]  

第二行采样像素为:[Y4      V4] [Y5           ] [Y6       V6] [Y7           ]  

映射的像素:             [Y0 U0 V4] [Y1 U0 V4] [Y2 U2 V6] [Y3 U2 V6]                              

                                [Y4 U0 V4] [Y5 U0 V4] [Y6 U2 V6] [Y7 U2 V6]

4:1:1 采样

在水平方向上对色度进行4:1抽样

第一行采样像素为:[Y0 U0     ] [Y1           ] [Y2       V2 [Y3           ]  

映射的像素:             [Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]

存储格式

YUV 在存储上通常分为平面格式(Planar),半平面格式(Semi-Planar)以及打包格式(Packed)。

平面格式

平面格式有时也称为三面格式(Triplanar),即 Y, U, V 三个分量各自使用单独的数组保存,这种三平面分离的格式比较方便视频编码。

半平面格式

半平面格式有两个平面而不是三个,一个平面用于亮度,一个平面用于两个色度分量。它们有时也被称为双平面格式。

打包格式

在打包格式中,通常只有一个平面,所有亮度和色度数据交错。这类似于 RGB 像素格式,只是使用不同的颜色空间。

打包格式在网络摄像头中非常流行。在硬件中,使用单独的平面效率低下:每个像素需要多次内存访问。打包格式更容易,因此使用起来更便宜。

另一方面,数据包格式通常无法处理垂直子采样。否则,扫描线将具有不同的大小。因此,通常,打包格式是水平子采样的,尤其是 2 倍(即 YUV 4:2:2)。

存储格式采样形式格式名称格式说明第一平面第二平面第三平面
PlanarYUV 4:2:0I420/YU2

12bits per Pixel

3planars

YYYY...U...V...
PlanarYUV 4:2:0J420于I420存储相同,但具有完整范围(0-255,full range)的亮度(Y)分量,而不是有限范围(16-240,limited range,在 iOS 上也叫做 video range)YYYY...U...V...
PlanarYUV 4:2:0YV12改变UV存储顺序YYYY...V...U...
PlanarYUV 4:2:0IMC1

16 Bits per Pixel

3 Planars

YYYY...V...U...
PlanarYUV 4:2:0IMC3

16 Bits per Pixel

3 Planars

YYYY...U...V...
PlanarYUV 4:2:2I422

16 Bits per Pixel

3 Planars

YYYY...UU...VV...
PlanarYUV 4:2:2J422与I422相同,但具有完整范围(0-255,full range)的亮度(Y)分量,而不是有限范围(16-240,limited range,在 iOS 上也叫做 video range)YYYY...UU...VV...
PlanarYUV 4:4:4I444

24 Bits per Pixel

3 Planars

YYYY...UUUU...VVVV...
Semi-PlanarYUV 4:2:0NV12

12 Bits per Pixel

2 Planars

YYYY...UV...
Semi-PlanarYUV 4:2:0NV21

12 Bits per Pixel

2 Planars

YYYY...VU...
PackedYUV 4:2:2YUYV (V422 / YUY2 / YUNV)

16 Bits per Pixel

1 Planars

YUYV YUYV YUYV ...
PackedYUV 4:2:2YVYU

16 Bits per Pixel

1 Planars

YVYU YVYU YVYU ...
PackedYUV 4:2:2UYVY(Y422 / UYNV)

16 Bits per Pixel

1 Planars

UYVY UVUY UVUY ...
PackedYUV 4:4:4AYUV

24 Bits per Pixel

1 Planars

A 指 alpha 通道

VUYA VYUA VYUA ...

1.为什么系数有变化?

由RGB计算YUV的系数有非常多种版本:BT601、BT709、BT2020、甚至PAL、NTSC等,都规定了不同版本的加权系数,上表只标明了BT601和BT709的。

2.YUV和YCbCr什么关系?
以前YUV特指模拟信号,YCbCr特指数字信号;但现在说法已经没有那么严格,基本可以等同了

3.为什么Y的取值范围是16~235?
为了规避吉布斯现象。YUV的取值范围有以下两种,适用于不同的传输方式:

Studio swing/TV levels:用于电视广播传输,Y的范围是16~235,UV范围是16~240。传输时由于频域可能丢失或截断,接收端的空域像素值会失真,出现吉布斯现象。失真与原始空域信号的最大差值为8.9%,因此传输端将有效信号值限制在一定范围内,避免接受端产生小于0或大于255的无效值。 注:(255-235)/(235-16)=9.1%,16/(235-16)=7.3%

转换

RGB 与 YUV 转换

4:2:0与4:2:2转换

最简单的方式:
YUV4:2:2 —> YUV4:2:0 Y不变,将U和V信号值在行(垂直方向)在进行一次隔行抽样。
YUV4:2:0 —> YUV4:2:2 Y不变,将U和V信号值的每一行分别拷贝一份形成连续两行数据。

(5条消息) 详解 YUV 格式(I420/YUV420/NV12/NV12/YUV422)_yuv格式_2012newborn的博客-CSDN博客

图文详解YUV420 数据格式 | Technology Blog (markrepo.github.io)

(2条消息) RGB与YUV的来源_有了rgb ,为何引入yuv__沥川往事的博客-CSDN博客

图文详解YUV420 数据格式 | Technology Blog (markrepo.github.io)

(4条消息) YUV RGB 相互转换矩阵_yuv与rgb的转换矩阵_xhh-cy的博客-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2.x 学习笔记

div标签(HTML) div标签的作用是,设定字、画、表格等的摆放位置。 DIV元素,是用来为HTML文档内大块(block-level)的内容提供结构和背景的元素。 DIV标签,称为区隔标记。 什么是vue vue是响应式…

天猫商品详情数据接口,京东商品详情数据接口,品牌商品数据分析,品牌店铺商品数据分析,监控商品价格销量接口代码封装教程

最近做一个品牌电商公司内部ERP系统分发的采集淘宝、天猫、京东商品详情页API接口的投标工作,集成的接口,其中有一个需求就是监控品牌授权店铺的价格、销量,标题、主图等等,具体需求如下描述:所有授权店铺的公开数据都…

04、SpringBoot运维实用篇

一、配置文件1、临时属性设置目前我们的程序包打好了,可以发布了。但是程序包打好以后,里面的配置都已经是固定的了,比如配置了服务器的端口是8080。如果我要启动项目,发现当前我的服务器上已经有应用启动起来并且占用了8080端口&…

浅谈工厂模式

文章目录01 | 抽象工厂02 | 工厂方法03 | 未完待续创建模式在什么被创建,谁创建它,它是怎么被创建的,以及何时创建这些方面提供了很强的灵活性。通常创建模式允许用结构和功能差别很大的“产品”对象来配置一个系统 01 | 抽象工厂 抽象工厂模…

决策树算法介绍

决策树目录1. 决策树基础1.1 决策树定义1.2 熵以及信息熵介绍2. 决策树的划分依据2.1 信息增益2.1.1信息增益应用举例2.2 信息增益率2.2.1 信息增益率使用举例2.2.2 信息增益率使用举例22.3 基尼值和基尼指数2.3.1 基尼值和基尼指数介绍2.3.2 基尼值和基尼指数实现案例1. 决策树…

e-STUDIO2010AC•2520AC安装步骤

注意!在室内室外温差比较大的情况下,设备需要在室内静置240分钟以上才可以进行安装。

如何训练个人的ChatGpt4

如何在自己的计算机上安装类似 ChatGPT 的个人 AI 并在没有互联网的情况下运行它 个人 AI 的“第一台 PC”时刻 这是个人AI的“第一台PC”时刻,随之而来的是限制,就像在车库里生产第一台Apple 1一样。你是先驱。今天,任何人都可以使用私人和…

一个从培训学校走出来的测试工程师自述....

简单介绍一下我自己,1997年的,毕业一年了,本科生,专业是机械制造及其自动化。 在校度过了四年,毕业,找工作,填三方协议,体检,入职。我觉得我可能就这么度过我平平无奇的…

【LeetCode】剑指 Offer 56. 数组中数字出现的次数 p275 -- Java Version

1. 题目介绍(56. 数组中数字出现的次数) 面试题56.:数组中数字出现的次数, 一共分为两小题: 题目一:数组中只出现一次的两个数字题目二:数组中唯一只出现一次的数字 2. 题目1:数组中…

学术速运|利用深度学习和分子动力学模拟设计抗菌肽

题目: Designing antimicrobial peptides using deep learning and molecular dynamic simulations 文献来源:Briefings in Bioinformatics, 2023, 1–13 代码:https://github.com/gc-js/Antimicrobial-peptide-generation 简介:随着多药耐…

Springboot实现文件断点续传-基于GridFS

Springboot实现文件断点续传-基于GridFS 需求介绍 我们后台是使用GridFS存储文件对象的,之前客户端都是Web浏览器,网络环境相对较为稳定,所以我们直接提供文件下载就行。但最近新增需求需要在移动端进行文件下载,这就有问题了。…

c++函数重载

C函数重载(Function Overloading)是指在同一个作用域,可以定义多个名称相同但参数列表不同的函数。在调用这些同名函数时,编译器根据实参与各个形参的类型、个数或顺序等特征来确定调用哪一个函数。 通过函数重载,我们…

UE4/5多人游戏详解(三、创建会话,委托绑定回调函数)

目录 基础的创建 回调函数绑定到委托: 实现创建会话的函数createGameSession: 回调函数实现判断验证是否成功: 添加会话设置: 测试 基础的创建 [提示:中途如果有无法编译则删除Binaries,saved,Intermediate后重…

倍增?最近公共祖先?——从定义到实现,帮你一步步吃掉它!

倍增?最近公共祖先?——从定义到实现,帮你一步步吃掉它! 一、倍增倍增——翻倍的增长 倍增是一种思想,实际上的操作就是通过不断翻倍来缩短我们的处理时间: 它可以把线性级别的处理优化到指数级。 举个…

5.redis-哨兵模式

01-哨兵模式概述 如果master宕机, 我们该怎么办? ①关闭所有slave②选举新的master, 建立新的主从结构 存在的问题 ①关闭期间, 谁来提供数据服务②选举新master的标准是什么③原来的master恢复了怎么办 哨兵模式 sentinel是一个分布式系统,用于对主从结构中的每…

【多线程】Thread类

1. Java中如何进行多线程编程?线程是操作系统中的概念,操作系统内核实现了线程这样的机制,并且对用户层提供了一些 API 供用户使用(如 Linux 中的 pthread 库)。所以本身关于线程的操作,是依赖操作系统提供的的 API,而…

练习,异常,异常处理,try-catch,throws

package com.jshedu.homework_;/*** author Mr.jia* version 1.0*/ //匿名内部类 public class Homework04 {public static void main(String[] args) {Cellphone cellphone new Cellphone();//1.匿名内部类,同时也是一个对象/*new computer() {Overridepublic dou…

JavaClient With HDFS

序言 在使用Java创建连接HDFS的客户端时,可以设置很多参数,具体有哪些参数呢,只要是在部署HDFS服务中可以设置的参数,都是可以在连接的时候设置. 我没有去验证所有的配置是否都可以验证,只是推测cuiyaonan2000163.com 依据 创建HDFS的构造函数如下所示: 网上比较常用的是get…

gdb 跟踪调式core

自己编译的问题出现段错误: 编译:使用gdb调试core文件来查找程序中出现段错误的位置时,要注意的是可执行程序在编译的时候需要加上-g编译命令选项。 gdb调试core文件的步骤 gdb调试core文件的步骤常见的有如下几种,推荐第一种。 具体步骤一: (1)启动gdb,进入core文…

【剑指 offer】旋转数组的最小数字

✨个人主页:bit me👇 ✨当前专栏:算法训练营👇 旋 转 数 组 的 最 小 数 字核心考点:数组理解,二分查找,临界条件 描述: 有一个长度为 n 的非降序数组,比如[1,2,3,4,5]…