YUV 颜色编码详解

YUV 简介

YUV是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制式采用的颜色空间。在现代彩色电视系统中,通常采用三管彩色摄影机或彩色CCD摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号R-Y(即U)、B-Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这种色彩的表示方法就是所谓的YUV,采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的.

YUV 即是一种表示色彩模型。基于人类眼睛对亮度高度敏感、对颜色敏感度低于亮度的生理特征 YUV在对照片或视频编码时完整保存像素的亮度分量(Y),根据不同要求采样保存UV分量。

YUV 将亮度和色度分离,使用Y(明亮度)、U和V(色度、浓度)三个分量表示一个颜色(图1),三个分量中UV分量只有颜色信息,如果图像只有Y分量图像就是黑白图像(图2)。

(图1)

(图2)

不同的YUV采样格式和存储大小

YUV 图像的主流采样方式有如下三种 (有的博客称这种采样方式为 “空间-间 数据划分”,弄的名字云里雾里的,吐了…):

YUV 4:4:4 采样

YUV 4:2:2 采样

YUV 4:2:0 采样

一个像素点, Y、U、V每个分量占用8bit位(=1byte字节),下面的计算假设图像像素为1920*1080。

YUV 4:4:4 采样,意味着 Y、U、V 三个分量的采样比例相同,因此在生成的图像里,每个像素的三个分量信息完整,Y、U、V分别都是 8 bit,

也就是一个像素里占用3个字节存储, 那该图片内存大小为总像素乘以3:

Y U V

size= (192010801) + (192010801) + (192010801) = 1920*1080 * 3

YUV 4:2:2 采样,意味着 UV 分量是 Y 分量采样的一半,Y 分量和 UV 分量按照 2:1 的比例采样。如果水平方向有 8 个像素点,那么采样了 8 个 Y 分量,而只采样了 4 个 UV 分量。

也就是一个像素里占用2个字节存储,那该图片内存大小为总像素乘以2:

Y U V

size= (19201080 * 1) + (192010800.5) + (192010800.5) = 19201080 * 2

YUV 4:2:0 采样,并不是指只采样 U 分量而不采样 V 分量。而是指,在每一行扫描时,只扫描一种色度分量(U 或者 V),和 Y 分量按照 2:1 的方式采样。比如,第一行扫描时,YU 按照 2:1 的方式采样,那么第二行扫描时,YV 分量按照 2:1 的方式采样。对于每个色度分量来说,它的水平方向和竖直方向的采样和 Y 分量相比都是 2:1。

对于每个Y、U、V分量用8比特量化的视频来说,每个由2x2个2行2列相邻的4个像素组成的宏像素需要占用6字节内存。1920x1080的图像,其中每个像素点都有Y分量,其中四分之一的像素点含有U分量,其中四分之一的像素点含有V分量,

所以总共占用字节为

size = 19201080 1 + 19201080 0.25 + 19201080 0.25 (这个公式里0.25是按照宏像素来计算) = 192010801.5

注: 采样通常用3部分的比例表示J🅰️b(例如4:2:2)。如果有alpha通道,也用4个数的比例(例如4:2:2:4)

YUV 存储格式

YUV 数据有三种存储格式(有的博客称这种采样方式为 “空间-内 数据划分”…):

平面格式(planar format): 即先存储Y平面,再存储U平面,再存储V平面;

semi-planar:先存储Y平面,再存储UV平面;

打包格式(packed format):即先存储一个YUV,再存储下一个YUV;

YUV420 类型

YUV420P:又叫planer平面模式,Y ,U,V分别在不同平面,也就是有三个平面。

420P(YU12): 也叫I420, 安卓的模式,YUV 分量分别依次存放,先是 w * h 长度的 Y(Y平面),后面跟 w * h * 0.25 长度的 U(U平面), 最后是 w * h * 0.25 长度的 V(V平面),存储大小为 w * h * 1.5

420P(YV12) : 和I420唯一不同,YVU分量依次存放, 先是 w * h 长度的 Y(Y平面),后面跟 w * h * 0.25 长度的V(V平面), 最后是 w * h * 0.25 长度的 U(U平面),存储大小为 w * h * 1.5

YUV420SP: 又叫bi-planer或two-planer双平面,Y一个平面,UV在同一个平面交叉存储。

420SP(NV12) : 12代表先U再V,然后交替存储, 即 YYYYUVUVUV… (IOS 只有这一种模式).

420SP(NV21) : 21代表先V再U, 然后交替存储,即 YYYYVUVUVU… (安卓的模式)

NV系列都属于semi-plane系列。

YUV422 类型

YUV422各种存储格式如下

针对上图中的NV12、NV21、NV16、NV61说明:

◆NV:NV系列都属于semi-plane系列,NV的“12”、“16”代表先U后V,NV的“21”、“61”代表先V后U

◆ 12、16:代表一个像素占的位数

YUV和 RGB 转换

RGB:即red,green,blue三色存储空间,因音视频主要用的是YUV的色彩空间,感兴趣的小伙伴可以拓展下RGB相关知识,本文不再详述。介绍下RGB和YUV的转换公式:

◆ RGB 转 YUV:

Y = 0.299R + 0.587G + 0.114B

U= -0.147R - 0.289G + 0.436B

V = 0.615R - 0.515G - 0.100B

◆ YUV 转 RGB:

R = Y + 1.14V

G = Y - 0.39U - 0.58V

B = Y + 2.03U

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值