YUV与RGB

作者: 丸疯 | 来源:发表于2020-09-03 16:44 被阅读0次

    我们都知道屏幕上的每个像素点都是由RGBA组成,R:red(红)、G:green(绿)、B:blue(蓝)、A:alpha(透明度)。那么YUV是干什么的呢?

    YUV

    • 什么是YUV
      YUV是一种颜色编码方法。常使用在各个视频处理组件中。YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。其中Y代表亮度(Luminance、Luma),UV代表色度(Chrominance、Chroma)。
    • 为什么要使用YUV颜色编码方式
      首先我们先了解RGB颜色编码方式,在图像显示中,一张1280 * 720大小的图片,代表他有1280 * 720个像素点。其中每一个像素点都采用RGB编码方式,每个原色都占用8bit,也就是一个字节,一个像素点就占用24bit,也就是三个字节。所以一张图片占用的存储空间就是:
    1280 * 720 * 3 / 1024/ 1024 = 2.63M
    

    YUVRGB类似,每个像素点都包含了三个分量:YUV分量。与RGB编码不同的是,Y分量和UV分量是可以分离的,如果没有UV分量我们看到的就是一张黑白图片,就像以前的黑白电视机。对于YUV图像来说,并不是每个像素点,都必须包含UV分量,没有UV分量我们只是看不到彩色,所以我们可以合理调整UV分量的采样方式,来达到节约存储空间的目的。Y分量是负责亮度的,所以Y分量是每个像素点都必须采样的。

    此图来源AVFoundation

    YUV采样格式

    • YUV4:4:4
      4:4:4表示Y、U、V三个分量的采样比重一样,所以产生的每个像素点也都是3个字节。与RGB颜色编码没有区别。
    原图像:
    [y0, u0, v0], [y1, u1, v1], [y2, u2, v2], [y3, u3, v3],....
    
    按YUV4:4:4采样的码流:
    y0,u0,v0,y1,u1,v1,y2,u2,v2,y3,u3,v3,...
    
    映射还原的像素点:
    [y0, u0, v0], [y1, u1, v1], [y2, u2, v2], [y3, u3, v3],....
    
    • YUV4:2:2
      4:2:2表示Y、U、V三个分量的采样比重。我们知道Y分量我们肯定是每个像素点都会采样,那么UV分量交叉采样,就是第一个像素点采样了U分量不采样V分量,第二个像素点就不再采样U分量转为采样V分量。相邻的两个像素点共用一套UV分量,达到4:2:2的采样比重。
      同样一张1280*720的图片,使用YUV4:2:2时的大小为:
    原图像:
    [y0, u0, v0], [y1, u1, v1], [y2, u2, v2], [y3, u3, v3],....
    
    按YUV4:2:2采样的码流:
    y0,u0,y1,v1,y2,u2,y3,v3,...
    
    映射还原的像素点:
    [y0, u0, v1], [y1, u0, v1], [y2, u2, v3], [y3, u2, v3],....
    
    所占存储空间大小:
    (1280 * 720 * 8 + 1280 * 720 * 0.5 * 8 * 2) / 8 / 1024 / 1024 = 1.76 MB
    
    YUV4:2:2图解
    • YUV4:2:0
      YUV4:2:0并不是说不采样V分量,而是指,在每一行扫描时,只扫描一种色度分量(U分量或者V分量),与Y分量按照2:1的方式进行采样。比如,第一行扫描时,YU按照2:1的方式进行采样,不采样V分量。第二行扫描时,YV按照2:1的方式进行采样,不采样U分量,如此交替的进行逐行采样。就是我们所说的YUV4:2:0
      同一张1280*720的图像采用YUV4:2:0采样:
    原图像:
    [y0,   u0,  v0], [y1,   u1,  v1], [y2,   u2,  v2], [y3,   u3,  v3]
    [y4,   u4,  v4], [y5,   u5,  v5], [y6,   u6,  v6], [y7,   u7,  v7]
    [y8,   u8,  v8], [y9,   u9,  v9], [y10, u10, v10], [y11, u11, v11]
    [y12, u12, v12], [y13, u13, v13], [y14, u14, v14], [y15, u15, v15]
    
    按YUV4:2:0采样的码流:
    y0,u0,y1,y2,u2,y3,y4,v4,y5,y6,v6,y7,y8,u8,y9,y10,u10,y11,y12,v12,y13,y14,v14,y15,...
    
    映射还原的像素点:
    [y0,   u0,  v4], [y1,   u0,  v4], [y2,   u2,  v6], [y3,   u2,  v6]
    [y4,   u0,  v4], [y5,   u0,  v4], [y6,   u2,  v6], [y7,   u2,  v6]
    [y8,   u8, v12], [y9,   u8, v12], [y10, u10, v14], [y11, u10, v14]
    [y12,  u8, v12], [y13,  u8, v12], [y14, u10, v14], [y15, u10, v14]
    
    所占存储空间大小
    (1280 * 720 * 8 + 1280 * 720 * 0.25 * 8 * 2) / 8 / 1024 / 1024 = 1.32 MB
    
    YUV4:2:0图解

    YUV和RGB的转换

    显示器都是通过RGB模型来显示图像的,因为需要节省带宽,我们选择YUV模型来进行传输。所以我们需要采集图像的时候,先将RGB模型转换成YUV模型,在显示的时候再将YUV模型转换成RGB模型
    RGBYUV的转换,就是将图像所有像素点的R、G、B分量量转换到 Y、U、V分量。RGB模型和YUV模型之间的相互转换的公式如下:

    • RGB转换成YUV:
      Y = 0.299 * R + 0.587 * G + 0.114 * B
      U = -0.147 * R - 0.289 * G + 0.436 * B
      V = 0.615 * R - 0.515 * G - 0.100 * B

    • YUV转RGB
      R = Y + 1.14 * V
      G = Y - 0.39 * U - 0.58 * V
      B = Y + 2.03 * U

    相关文章

      网友评论

          本文标题:YUV与RGB

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