颜色空间YUV简单介绍

YUV概念:YUV是被欧洲电视系统所採用的一种颜色编码方法(属于PAL,Phase Alternation Line),是PAL和SECAM模拟彩色电视制式採用的颜色空间。

当中的Y、U、V几个字母不是英文单词的组合词,Y代表亮度,事实上Y就是图像的灰度值;UV代表色差,U和V是构成彩色的两个分量。在现代彩色电视系统中。通常採用三管彩色摄影机或彩色CCD摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号B--Y(即U)、R--Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这样的色彩的表示方法就是所谓的YUV色彩空间表示。

採用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的

假设仅仅有 Y信号分量而没有U、V信号分量,那么这样表示的图像就是黑白灰度图像。彩色电视採用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的相容问题。使黑白电视机也能接收彩色电视信号。

YUV颜色空间属于非线性亮度/色度(luma/chroma)型颜色空间,用一个分量表示非色彩的感知,用两个独立的分量表示色彩的感知。

YUV主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视。与RGB视频信号传输相比,它最大的长处在于仅仅需占用极少的频宽(RGB要求三个独立的视频信号同一时候传输)。当中"Y"表示明亮度(Luminance或Luma)。也就是灰阶值;而"U"和"V"表示的则是色度(Chrominance或Chroma)。作用是描写叙述影像色彩及饱和度,用于指定像素的颜色。"亮度"是透过RGB输入信号来建立的。方法是将RGB信号的特定部分叠加到一起。"色度"则定义了颜色的两个方面----色调与饱和度,分别用Cr(V)和Cb(U)来表示。当中。Cr反映了GB输入信号红色部分与RGB信号亮度值之间的差异。而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之同的差异。

採用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。假设仅仅有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像。

彩色电视採用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。

广播、视频和成像标准使用YUV色彩空间另一个重要的原因,就是与人的视觉系统非常有关系。人类的眼睛对低频信号比对高频信号具有更高的敏感度。

事实上,人类的眼睛对明视度的改变也比对色彩的改变要敏感的多。

因此对人类而言,Y分量比U分量重要,依据人眼的这一特征,在不使用不论什么复杂算法的前提下, 能够适当地抛弃U和V分量以达到压缩的目的,这就是部分取样(subsampling)。

YUV与YCrCb的差别:YCrCb颜色空是由YUV颜色空间派生的一种颜色空间。

YCbCr是在世界数字组织视频标准研制过程中作为ITU-R BT.601建议的一部分。事实上是YUV经过缩放和偏移的翻版。

YCrCb中的Y与YUV中的Y含义一致,Cb、Cr相同都指色彩,仅仅是在表示方法上不同。YCbCr中,Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。在YUV家族中,YCbCr是在计算机系统中应用最多的成员。其应用领域非常广泛。JPEG、MPEG均採用此格式。一般人们所讲的YUV大多是指YCbCr。YCbCr有很多取样格式。

YUV与RGB相互转换的公式

   Y = 0.299R + 0.587G+ 0.114B

   U = -0.147R -0.289G + 0.436B

   V = 0.615R - 0.515G- 0.100B

   R = Y + 1.14V

   G = Y - 0.39U -0.58V

   B = Y + 2.03U

YUV主要採样格式: YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4。

(1)、YUV 4:4:4:无压缩。YUV三个信道的抽样率相同,因此在生成的图像里。每一个象素的三个分量信息完整(每一个分量通常8比特),经过8比特量化之后。未经压缩的每一个像素占用3个字节。

以下的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

存放的码流为: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3

(2)、YUV 4:2:2:压缩33.3%,每一个色差信道的抽样率是亮度信道的一半,所以水平方向的色度抽样率仅仅是4:4:4的一半。对非压缩的8比特量化的图像来说。每一个由两个水平方向相邻的像素组成的宏像素须要占用4字节内存。

以下的四个像素为:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

存放的码流为:Y0 U0 Y1 V1 Y2U2 Y3 V3

映射出像素点为:[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]

(3)、YUV 4:1:1: 压缩50%,4:1:1的色度抽样,是在水平方向上对色度进行4:1抽样。

对于低端用户和消费类产品这仍然是能够接受的。对非压缩的8比特量化的视频来说。每一个由4个水平方向相邻的像素组成的宏像素须要占用6字节内存。

每一个点保存一个8bit的亮度值(也就是Y值),每2x2个点保存一个Cr和Cb值, 图像在肉眼中的感觉不会起太大的变化。所以,原来用RGB(R,G,B都是8bit unsigned)模型,1个点须要8x3=24bits。(全採样后,YUV仍各占8bit)。按4:1:1採样后,而如今平均仅须要 8+(8/4)+(8/4)=12bits(4个点,8*4(Y)+8(U)+8(V)=48bits), 平均每一个点占12bits。这样就把图像的数据压缩了一半。

以下的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

存放的码流为: Y0 U0 Y1 Y2 V2 Y3

映射出像素点为:[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]

(4)、YUV4:2:0: 压缩50%。4:2:0并不意味着仅仅有Y、Cb而没有Cr分量。它指得是对每行扫描线来说,仅仅有一种色度分量以2:1的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,假设一行是4:2:0的话。下一行就是4:0:2,再下一行是4:2:0...以此类推。

对每一个色度分量来说。水平方向和竖直方向的抽样率都是2:1。所以能够说色度的抽样率是4:1。对非压缩的8比特量化的视频来说,每一个由2x2个2行2列相邻的像素组成的宏像素须要占用6字节内存。绝大多数视频编解码器都採用这样的格式作为标准的输入格式。

以下八个像素为:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

                                  [Y5 U5 V5] [Y6 U6 V6] [Y7 U7 V7] [Y8 U8 V8]

存放的码流为:Y0 U0 Y1 Y2 U2Y3

Y5 V5 Y6 Y7 V7 Y8

映射出的像素点为:[Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7]

                                      [Y5 U0 V5] [Y6 U0 V5] [Y7U2 V7] [Y8 U2 V7]

YUV格式:通常有两大类:打包(packedformats)格式和平面(planar format)格式。

打包格式将YUV分量存放在同一个数组中,一般是几个相邻的像素组成一个宏像素(macro-pixel)。和RGB的存放方式相似。在这样的格式下每一个像素点的YUV数据混合放在一个矩阵中。

平面格式使用三个数组分开存放YUV三个分量,就像是一个三维平面一样。

打包格式中的YUV是混合在一起的。对于YUV4:4:4和YUV4:2:2格式而言,用打包格式是非常合适的,因此就有了UYVY、YUYV等。

平面格式是指每Y份量,U份量和V份量都是以独立的平面组织的。即Y、U、V是分开存储的,每一个分量占一块地方,当中Y为width*height,而U、V合占Y的一半。该中格式每一个像素栈12bits。平面格式有I420(4:2:0)、YV12、IYUV等。

依据U、V的顺序,分出2种格式:U前V后即YUV420P。也叫I420,V前U后,叫YV12(YV表示Y后面跟着V。12表示12bits)。另外。另一种半平面格式(semi-planar),即Y单独占一块地方,但其后U、V又紧挨着排在一起,依据U、V的顺序,又有2种,U前V后叫NV12;V前U后叫NV21。

YUV的表示法称为A:B:C表示法:

(1)、4:4:4 。表示全然取样,色度频道没有下採样。

(2)、4:2:2 ,表示2:1的水平採样。没有垂直下採样。对于每2个U例子或V例子。每一个扫描行都包括4个Y例子。

(3)、4:2:0 ,表示2:1的水平採样,2:1的垂直下採样。

(4)、4:1:1 ,表示4:1的水平下採样,没有垂直下採样。

对于每一个U例子或V例子,每一个扫描行都包括4个Y例子。

假设须要对YUV颜色空间有更进一步了解。能够学习下libyuv库

以上内容主要整理自:

1.        http://baike.baidu.com/item/YUV

2.        http://www.chinadmd.com/file/tpoiow33o66zritpt3aucpsz_1.html

3.        http://www.chinadmd.com/file/zzaevvxtpzpsc3ec6rppcoci_1.html

4.        http://www.fourcc.org/yuv.php

时间: 2024-11-03 05:42:41

颜色空间YUV简单介绍的相关文章

python的列表,元组和字典简单介绍

引 入 java                                   python 存取多个值:数组或list集合 ------------------------> 列表,元组 key-value格式:    Map        ------------------------>    字典 自己学习发现,java跟python这两门面向对象语言在数据类型的定义上,很多思想都是互通的,这里不说java,简单介绍一下python的列表,元组和字典. 一.列表 List: 最通

javascript的return语句简单介绍

javascript的return语句简单介绍:return语句在js中非常的重要,不仅仅具有返回函数值的功能,还具有一些特殊的用法,有个清晰的把握是非常有必要的.下面就结合实例简单介绍一下return语句的作用.一.用来返回控制和函数结果:通常情况,return语句对于一个函数是很有必要的,因为往往需要函数在一系列的代码执行后会得到一个期望的返回值,而此值就是通过return语句返回,并且将控制权返回给主调函数.语法格式: return 表达式 代码实例如下: function add(){

Object-c集合的简单介绍

一.简单介绍 NSArray/NSMutableArray NSSet/NSMutableSet NSDictionary/NSMutableDictionary NSArray.NSSet.NSDictionary是不可变的,创建的时候初始化 NSMutableArray.NSMutableSet.NSMutableDictionary是可变的 二.使用介绍 NSArray是有序的数组 NSMutableArray *myArray=[[NSMutableArray alloc] init];

plsql的环境与介绍:环境的搭建和plsql的简单介绍

PLSQL编程 1.环境的搭建 (1)创建一个存储表空间 SQL> conn /as sysdbaConnected. SQL> create tablespace plsql datafile '/u01/oracle/oradata/ORCL/plsql01.dbf' size 1G; Tablespace created. (2)创建PLSQL用户SQL> create user plsql identified by plsql default tablespace plsql;

CSS之box-sizing的用处简单介绍

前几天才发现有 box-sizing 这么个样式属性,研究了一番感觉很有意思, 通过指定容器的盒子模型类型,达到不同的展示效果 例如:当一个容器宽度定义为 width:100%;  之后,如果再增加 padding 或者 border 则会溢出父容器,是向外扩张的 如果使用该样式,指定为 box-sizing: border-box; 则 padding 和 border 就不会再溢出,而是向内收缩的,这个效果感觉非常实用, 特别是 input 和 textarea 等 现在设置 100% 再直

【玩转微信公众平台之七】 PHP语法简单介绍

经过多篇的努力,我们终于成为了微信公众平台的开发者.但是别高兴的太早,就跟修真小说一样:修炼多年武破虚空,飞升到仙界后本以为成为了天仙即可跳出三界外,不在五行中.可实际到了仙界才发现,成仙只是修行的第一步......没错,成为开发者也才只是第一步,因为现在你的微信公众平台还没有任何功能,说难听点就是小白,说好听点就是白马王子,说可爱点就是小白白,说黄色点就是洗白白,说...----------------要想在微信公众平台添加功能,那就需要写代码:既然说到写代码,那么肯定是要用php(如果用AS

Zookeeper简单介绍

转自:ZooKeeper学习第一期---Zookeeper简单介绍 一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术--分布式协调技术.那么什么是分布式协调技术?那么我来告诉大家,其实分布式协调技术 主要用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种临界资源,防止造成"脏数据"的后果.这时,有人可能会说这个简单,写一个调 度算法就轻松解决了.说这句话的人,可能对分布式系统不是很了解,所以才会出现这种误解.如果这些进程全部是跑在一台机上的

七、变量与常量的简单介绍

七.变量与常量的简单介绍 本文将介绍VB语言中的变量与常量. 基本概念 首先大家要明白变量和常量是很重要的东西,因为他们储存着程序运行中的各种数据.顾名思义,变量就是可以变的量,而常量就是不变的,这个概念和数学上的有点接近. 接下来我简单讲讲这两个重要的东西:计算机程序在不运行的时候,程序文件保存在硬盘上,当用户运行程序之后,系统就会把程序文件装进计算机的内存里面,无论在硬盘中还是内存中,程序数据都是以二进制的形式保存着的.当程序在运行的时候,可以把计算机的内存理解为一个超级大的棋盘,每个格子都

TensorFlow简单介绍和在centos上的安装

##tensorflow简单介绍: TensorFlow? is an open source software library for numerical computation using data flow graphs.https://www.tensorflow.org/TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从图