zoukankan      html  css  js  c++  java
  • YUV 4:2:0 格式和YUV411格式区别

     版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/coloriy/article/details/6668447

    MPEG 储存的 YU(Cb)V(Cr) 格式是遵循 CCIR601,也就是 ITU-R BT.601 的规范,Y 亮度的范围是 16~235,UV(CbCr) 色度是以无色 =128 为中心,范围是 16~240。 
    一般民生消费产品使用的 MPEG 压缩,大都采用 YUV 4:2:0 的格式,也就是如果分办率是 720x576,则每个 Frame,Y 有 720x576 个点,U 只有 360x288 个点,V 也只有 360x288 个点。色度的信息只有亮度的 1/4。那么为什么不写 YUV 4:1:1(UV 和 Y 的比例是 1:4) 而要写 YUV 4:2:0?这是因为要区分取样的方式不同。YUV 4:1:1 是指水平 Y 取样四个点,UV 各只取样一个点,水平的 Y 和 UV 的取样比例是 4:1,也就是 
    Y Y Y Y 一个 U 一个 V .... 

    YUV 4:2:0 是指水平和垂直 Y 各取样两个点,UV 各只取样一个点,水平的取样比例是 2:1,重直的取样比例 2:1,也就是 
    Y Y 
    Y Y 一个 U 一个 V .... 

    和 YUV 4:1:1 一样,色度和亮度差 1/2 * 1/2 = 1/4,只是取样的方式不同。 

    而 MPEG 最常采用的 YUV 4:2:0 格式,其 UV 的取样位置,MPEG-1 和 MPEG-2 又不同(MPEG-4 是用和 MPEG-2 一样的取样位置) 
    MPEG-1 
    Y Y 
    _x 
    Y Y 

    x 是 UV 的取样位置 

    MPEG-2 
    Y Y 

    Y Y 

    x 是 UV 的取样位置

    通常我们用RGB表示一种彩色。计算机系统里的LCD显示的数据就是RGB来表示每个像素的颜色。
    而在我们生活里,有黑白电视机与彩色电视机两种,拍摄节目源时不可以用两种不同的摄像机来存放两种图像数据。
    所以为了兼容两种电视机,专家就引入YUV格式代替RGB,其中Y表示亮度, U和V表示色差。 黑白电视机只用Y信号, 而彩色电视机可由YUV转换成RGB再显示颜色。

    通常我们所用的YUV格式是 ITU-R 的标准 , 也叫YCbCr.

    YUV是由RGB格式的数据转换得来。

    Y     Y = 0.299 x R + 0.587 x G + 0.114 x B + 0 
    U    Cb = -0.169 x R - 0.331 x G + 0.499 x B + 128 
    V    Cr = 0.499 x R - 0.418 x G - 0.0813 x B + 128 
    
    Y    Y = 0.299 x R + 0.587 x G + 0.114 x B + 0 
    U    Cb = -0.169 x R - 0.331 x G + 0.499 x B + 128 
    V    Cr = 0.499 x R - 0.418 x G - 0.0813 x B + 128

    ///////
    YUV4:4:4 
    其实就是YUV的数据各占用8位, 每个像素都由YUV组成

    同一行的相邻4个像素数据:   Y0U0V0    Y1U1V1   Y2U2V2  Y3U3V3
                  存储时:    Y0 U0 V0  Y1 U1 V1 Y2 U2 V2 Y3 U3 V3  //即每个像素YUV的数据都会存放起来
    为什么叫4:4:4 , 意思就是4个像素里的数据有4个Y, 4个U, 4个V

    //////
    YUV4:2:2
    其实绝大部分相邻的两个像素,数据差异应不大。所以为了节点空间便于存储,丢失每个像素的部分数据。
    专家研究表明我们人对亮度比较敏感,而对色彩不怎么敏感。所以每个像素的亮度Y数据是绝对不动的,而色差数据可以进行丢弃。

    同一行的相邻4个像素数据:   Y0U0V0    Y1U1V1   Y2U2V2  Y3U3V3
              存储时:    Y0 U0  Y1 V1 Y2 U2 Y3 V3  // 每两个相邻的像素, 一个丢弃V数据,一个丢弃U数据
    为什么叫4:2:2,  意思就是相邻的4个像素里有4个Y, 2个U, 2个V。 按上面存储的顺序也叫YUYV.
    
    但还原成RGB数据必须需要YUV, 像第一个像素只有Y0U0是没法还原的,这时只能用下一像素的V1数据。
          还原时的YUV:  [Y0U0V1] [Y1U0V1] [Y2U2V3] [Y3U2V3]  //这样还原理论上会对图像的质量有影响的,但我们看不出来的.

    /////
    YUV4:2:0
    专家们进一步研究表示,每一行的相邻两个像素与下一行同位置的两个像素数据差异不大,可以进一步的丢数据。

    如两行的像素数据:
               Y00U00V00   Y01U01V01   Y02U02V02   Y03U03V03  ....  
               Y88U88V88   Y89U89V89   Y90U90V90   Y91U91V91  ....
    
    存储时:        Y00U00 Y01 Y02U02  Y03    //每个像素的Y数据保留, 两个像素数据只保留一个U数据。这一行不保留V数据(YUV:  420)
               Y88V88 Y89 Y90V90  Y91    // ....  两个像素数据只保留一个V数据, 这行不保留U数据(YUV:  402)
    
    还原时只能相同位置的上下两行4个像素结合还原:
            Y00U00V88  Y01U00V88  Y02U02V90  Y03U02V90
            Y88U00V88  Y89U00V88  Y90U02V90  Y91U02V90

    yuv数据还分成打包的,平面的。 打包的意思是: yuv数据是顺序存放Y,接着U,再接着V数据存放。 平面的意思是: yuv数据是分成三个地方存放, 一个地方只存Y数据, 一个只存U数据, 一个只存V数据

     
     
  • 相关阅读:
    asp.net log4net
    SQLServer客户端连接工具(支持2000,20005,2008)
    html中的table导出Excel
    贝叶斯网(2)Netica:从数据中学习CPT
    贝叶斯网(1)尝试用Netica搭建简单的贝叶斯网并使用贝叶斯公式解释各个bar的结果
    IIPP迷你项目(四)"Pong"
    Coursera课程《Machine Learning》学习笔记(week2)
    IIPP迷你项目(二)"Guess the Number!"
    Coursera课程《Machine Learning》学习笔记(week1)
    IIPP迷你项目(三)“Stopwatch: The Game”
  • 原文地址:https://www.cnblogs.com/sddai/p/10359536.html
Copyright © 2011-2022 走看看