YUV和RGB

作者: CodingTom | 来源:发表于2020-03-30 14:15 被阅读0次

色彩空间

我们经常用到的色彩空间主要有RGB、YUV, CMYK, HSB, HSL等等,其中YUV和RGB是视讯通信领域用的较多的二种色彩空间。

RGB

RGB的所谓 多少 就是指亮度,并使用整数来表示。

在用8位表示时,RGB各有256级亮度,用数字量化表示为从0、1、2...直到255。

注意虽然数字最高是255,但0也是数值之一,因此共256级。

YUV

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

如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像。

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

YCbCr

YCbCr是被ITU定义在标准 ITU-R BT.601(标清)ITU-R BT.709(高清)ITU-R BT.2020(超高清) 中的一种色彩空间,用于数字电视系统。

YCbCr不是一种绝对色彩空间,是一种针对RGB所做的编码,是YUV压缩和偏移的版本,其中 Y 与 YUV 中的 Y 含义一致,Cb,Cr 同样都指色彩,只是在表示方法上不同而已,Cb,Cr是差值。

在视频通信系统中(特别是视频编解码)的“YUV”图像就是YCbCr。在平常的工作交流中,所称的YUV也是YCbCr。

Y = Kry · R + Kgy · G + Kby · B (R,G,B代表RGB色彩空间的红色,绿色,蓝色)

Cb = B – Y (Cb是差值)

Cr = R – Y (Cr是差值)

Kry + Kgy + Kby = 1(K 是比值或称权重, BT.601, BT.709,BT.2020中的权重是不同的。)

上面的公式中

Kru = - Kry; 
Kgu = - Kgy; 
Kbu = 1 - Kby; 
Krv = 1 – Kry; 
Kgv = -Kgy; 
Kbv = -Kby

关于为什么要量化?

YUV是模拟信号,Y的取值范围是0到1伏。

未量化YUV取值 :

Y ~ [0,1]

U,V ~ [-0.5,0.5]

包括未量化 : 
Y ∈ [0,1]   
U ∈ [-0.5,0.5]       (-0.436,0.436)
V ∈ [-0.5,0.5]       (-0.615,0.615)

量化后 :
Y ∈ [16,235] 
U ∈ [16,240] 
V ∈ [16,240]

从YUV 转到 RGB 如果值小于0要取0,如果大于255要取255

1.众所周知,RGB的范围是【0,255】;
如果把R=0,G=0,B=255 带入公式 U = -0.169 * R - 0.331 * G + 0.5 * B;
得到的U = 127.5, 而char的范围是【-128,127】,无法表示到127.5,

那么,我们就需要将 Y U V 数据进行量化;

2. 量化后,我们进行 RGB 转 YUV 的时候, 如果我们就要进行边界判断,
类似于 Y = Y_int < 0 ? 0 : (Y_int > 255 ? 255 : Y_int); 
这个语句非常消耗CPU,如果 YUV 进行量化之后,那么RGB转YUV的时候就不需要进行边界判断;

3. 进行量化后,编码时压缩率变大,因为色阶数变少了

关于如何判断图像是否经过量化?

在完全黑画面的时候打印出图像的Y数据, 如果 Y=16 左右 说明Y经过量化, 如果Y=0左右 说明Y未经过量化。
Y ~ [16,235]
U ~ [16-240]
V ~ [16-240]

量化就是让通过线性变换让 Y 或 U 或 V 处于一定的范围内, 
 
比如让 Y【0,1】变到 Y' (16,235) 就这样来实行: 
 
Y' = Y *(235-16)/ (1-0) + 16  即 Y' = 219 * Y + 16   

量化后的公式写成整数的形式(减小计算量)

YUV --> RGB

R = (298 * Y + 411 * V - 57344) >> 8
G = (298 * Y - 101 * U - 211 * V + 34739) >> 8
B = (298 * Y + 519 * U - 71117) >> 8

RGB --> YUV 

Y = (66 * R + 129 * G + 25 * B) >> 8 + 16 

U = (-38 * R - 74 * G + 112 * B) >> 8 + 128

V = (112 * R - 94 * G - 18 * B) >> 8 + 128

YUV420P 和 YUV420SP 的区别

YUV420P,Y,U,V三个分量都是平面格式,分为I420和YV12。I420格式和YV12格式的不同处在U平面和V平面的位置不同。在I420格式中,U平面紧跟在Y平面之后,然后才是V平面(即:YUV);但YV12则是相反(即:YVU)。

YUV420SP, Y分量平面格式,UV打包格式, 即NV12。 NV12与NV21类似,U 和 V 交错排列,不同在于UV顺序。

I420: YYYYYYYY UU VV =>YUV420P
YV12: YYYYYYYY VV UU =>YUV420P
NV12: YYYYYYYY UVUV =>YUV420SP
NV21: YYYYYYYY VUVU =>YUV420SP

快速了解yuv4:4:4 yuv4:2:2 yuv 4:1:1 yuv 4:2:0四种YUV格式区别

主流的采样方式有三种,YUV4:4:4, YUV4:2:2, YUV4:2:0, YUV4:1:1
YUV 4:4:4采样,每一个Y对应一组UV分量。
YUV 4:2:2采样,每两个Y共用一组UV分量。
YUV 4:2:0采样,每四个Y共用一组UV分量。

四种YUV格式区别如下:

1.YUV  4:4:4抽样方式:

Y: Y0  Y1  Y2  Y3

U: U0  U1  U2  U3

V: V0  V1  V2  V3


2.YUV   4:2:2抽样方式:

Y   : Y0  Y1  Y2  Y3

U/V : U0  V1  U2  V3
 

3.YUV   4:2:0抽样方式:

Y: Y0    Y1    Y2     Y3       ...   Yn-1      第一行n个像素

U: U0                     U2

Y: Yn  Yn+1  Yn+2  Yn+3 ...     Y2n-1    第二行n个像素

V: Vn         Vn+2 


4.YUV   4:1:1抽样方式:

Y   : Y0  Y1  Y2  Y3

U/V : U0     V2

参考连接

https://www.cnblogs.com/huxiaopeng/p/5653257.html

https://www.cnblogs.com/luoyinjie/p/7219319.html

https://blog.csdn.net/asahinokawa/article/details/80596655

https://www.cnblogs.com/cyyljw/p/9006490.html

相关文章

  • 图像处理学习资料

    RGB、YUV和HSV颜色空间模型 RGB立方体模型RGB YUV:其中“Y”表示明亮度(Luminance或Lu...

  • RGB、YUV

    RGB和YUV是什么? RGB和YUV是色彩空间模型,还有诸如HSV不是存储格式,如PEG、BMP、JPEG、GI...

  • RGB和YUV简单学习记录

    RGB和YUV是一种颜色编码格式。这里简单介绍一下RGB、YUV和HSV。 出处:一文读懂 YUV 的采样与格式h...

  • YUV420转换RGB公式

    YUV420转换RGB YUV420转换RGB公式

  • YUV和RGB

    色彩空间 我们经常用到的色彩空间主要有RGB、YUV, CMYK, HSB, HSL等等,其中YUV和RGB是视讯...

  • RGB和YUV

    RGB和YUV 多媒体编程 一、概念 1.什么是RGB? 对一种颜色进行编码的方法统称为“颜色空间”或“色域”。用...

  • YUV和RGB

    YUV 的采样与格式 YUV 是⼀种颜⾊编码⽅法,和它等同的还有 RGB 颜⾊编码⽅法。 RGB 颜⾊编码 R G...

  • 转码的四个案例

    一,swcale实现rgb24转yuv420p 二,swcale实现YUV转RGB

  • FFmpeg - 播放YUV,视频帧格式转换

    播放YUV 定时读取YUV的视频帧 将YUV转换为RGB数据 用RGB数据生成CGimage 在view上绘制CG...

  • bitmap简单学习记录

    在对RGB和YUV有了一定的了解后,来看看Bitmap。一般设备(例如相机)采集的数据是RGB或者YUV等格式的,...

网友评论

      本文标题:YUV和RGB

      本文链接:https://www.haomeiwen.com/subject/nnhvuhtx.html