zoukankan      html  css  js  c++  java
  • 80.YCrCb

    一,引言

            YUV(亦称YCrCb)是被欧洲电视系统所采用的一种颜色编码方法(属于PAL)。YUV主要用于优化彩色视频信号的传输,使其向后兼容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只需占用极少的带宽(RGB要求三个独立的视频信号同时传输)。

           "Y"表示明亮度(Lumina nce或Luma),也就是灰阶值;是个基带信号。而"U"和"V"表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。U和V不是基带信号,它俩是被正交调制了的。

            "亮度"是通过RGB输入信号来创建的,方法是将RGB信号的特定部分叠加到一起。"色度"则定义了颜色的两个方面 - 色调与饱和度,分别用Cr和CB来表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而CB反映的是RGB输入信号蓝色部分与RGB信号亮度值之同的差异。通过运算,YUV三分量可以还原出R(红),G(绿),B(兰)。

    二,概念

           1)RGB 颜色空间

                在色度学中,为了确切表示某一种彩色,采用亮度色调色饱和度三个基本参量。

                              彩色视觉是人眼对这个三个参量的总体感觉。亮度是光作用于人眼所引起的明亮程度的感觉。

                              色调是反映了彩色的类别。也就是通常所说的红,绿,蓝等就指的是色调。

                              色和度是指彩色光所呈现彩色的深浅程度。

                对于同一中颜色的彩色光,彩色越浓,色饱和度越高。根据色度学的介绍,不同波长的单色光会引起不同的彩色感觉,但相同的彩色感觉却可以来源于不同的光谱成分组合。自然界中几乎所有的颜色都能用三种基本彩色混合配出,在彩色电视技术中选择红色、绿色、和蓝色作为三基色。其他的颜色都可以用红色、绿色和蓝色按照不同的比例混合而成。所选取的红色、绿色和蓝色三基色空间。简称为 RGB 颜色空间。

          2)在彩色的广播电视中,并不是直接传送 RGB 三基色信号的。而是把三基色经过转换成可以代表三基色信号的新的三个基本参量来传输的。也就是一个亮度信号 Y 和两个色差信号 Cb 和 Cr。新的亮度信号和色差信号同三基色信号的转换关系如下:
                     Y = 0.30 R + 0.59G + 0.11B
                    ( R − Y ) = 0.70 R − 0.59G − 0.11B
                    ( B − Y ) = −0.30 R − 0.59G + 0.89 B

              在发送时,把经过平衡正交调制的色差信号同亮度信号叠加组成符合信号

                     Y + C sin(ω sc t + θ ) 作为彩色电视图像信号。其中经过正交平衡调制的色差信号如下:

                      U c (t ) = ( B − Y ) sin ω sc t + ( R − Y ) cos ω sc t = C sin(ω sc t + θ )

              由于得到的彩色图像的动态范围比较大,其对高电平为(Y+C) 最低电平为(Y-C)所以要对色差信号进行压缩,公式如下:

                       U = 0.493( B − Y )

                       V = 0.877( R − Y )

              经过压缩的色差信号同前面的亮度信号组成新的色度空间,简称为 YUV 空间。

    三,YUV与YCbCr和RGB之间换算公式的差异

             yuv<-->rgb

                   Y''= 0.299*R'' + 0.587*G'' + 0.114*B''

                   U''= -0.147*R'' - 0.289*G'' + 0.436*B'' = 0.492*(B''- Y'')

                   V''= 0.615*R'' - 0.515*G'' - 0.100*B'' = 0.877*(R''- Y'')

                   R'' = Y'' + 1.140*V''

                   G'' = Y'' - 0.394*U'' - 0.581*V''

                   B'' = Y'' + 2.032*U''

            yCbCr<-->rgb

                   Y’ = 0.257*R'' + 0.504*G'' + 0.098*B'' + 16

                   Cb'' = -0.148*R'' - 0.291*G'' + 0.439*B'' + 128

                   Cr'' = 0.439*R'' - 0.368*G'' - 0.071*B'' + 128

                   R'' = 1.164*(Y’-16) + 1.596*(Cr''-128)

                   G'' = 1.164*(Y’-16) - 0.813*(Cr''-128) - 0.392*(Cb''-128)

                   B'' = 1.164*(Y’-16) + 2.017*(Cb''-128)

    Note: 上面各个符号都带了一撇,表示该符号在原值基础上进行了gamma correction


    三、  来源上的差异

               yuv色彩模型来源于rgb模型,该模型的特点是将亮度和色度分离开,从而适合于图像处理领域。

                      应用:basic color model used in analogue color TV broadcasting.用在模拟彩色电视广播的基本颜色模型中

               YCbCr模型来源于yuv模型。YCbCr is a scaled and offset version of the YUV color space.

                     应用:数字视频,ITU-R BT.601 recommendation

               ps:通过上面的比较可以确定,我们在h.264,mpeg等编码标准中用的yuv其实是YcbCr,大家不要被名称搞混淆了。
     

    四,知识汇总

             人类视觉系统(HVS)相比亮度来说对于颜色不是那么敏感的。在RGB颜色空间中,三种颜色被平等地看待,并用相同的分辨率存放起来。但是通过把亮度与颜色信息分离,并对亮度值取更高的分辨率可以更有效地表示一个颜色图像。

             YCbCr颜色空间和它的变换(通常写为YUV)是一种流行而高效的表示一个颜色图像的方法。Y是亮度值,由R,G,B的加权平均可以得到: Y=krR + kgG + kbB  这里k是加权因子。

             颜色信号可以由不同的颜色差别来表示:

                      Cb = B-Y

                      Cr = R-Y

                      Cg = G-Y

            对于一个颜色图像的完整的描述由给定Y和三个色差:Cb,Cr,Cg来表示。

           目前为止,我们的表示方法好像并不那么好,因为相比RGB表示来说,我们这次用了四个参数。然后Cb+Cr+Cg是一个常数,那么我们只需要两个色度参数就可以了,第三个可以通过其他两个计算出来。在YCbCr空间中,只有Y和Cb,Cr值被传输和存储,而且Cb和Cr的分辨率可以比Y低,因为人类视觉系统对于亮度更加敏感。这就减少了表示图像的数据量。通常的观察情况下,RGB和YCbCr表示的图像看上去没有什么不同。对于色度采用比亮度低的分辨率进行采样是一种简单而有效的压缩办法

           一个RGB图像可以在捕捉之后转换为YCbCr格式用来减少存储和传输负担。在显示图象之前,再转回为RGB.注意没有必要去指明分别的加权值kg(因为kb+kr+kg=1),而且G可以从YCbCr中解压出来,这说明不需要存储和传输Cg参数。

              Y = kr R + (1-kb-kr)G + kb B

              Cb = 0.5/(1-kb) * (B-Y)

              Cr = 0.5/(1-kr) * (R-Y)

              R = Y + (1-kr)/0.5 * Cr

              G = Y - 2kb(1-kb)/(1-kb-kr) * Cb - 2kr(1-kr)/(1-kb-kr) * Cr

              B = Y + (1-kb)/0.5 * Cb

    ITU-R的BT.601决议定义了kb=0.114,kr=0.299,那么代换参数就有了如下等式:

              Y = 0.299R + 0.587G + 0.114B

              Cb = 0.564(B - Y )

              Cr = 0.713(R - Y )

              R = Y + 1.402Cr

              G = Y - 0.344Cb - 0.714Cr

              B = Y + 1.772Cb

    五, YCbCr采样格式

              4:4:4采样就是说三种元素Y,Cb,Cr有同样的分辨率,这样的话,在每一个像素点上都对这三种元素进行采样。数字4是指在水平方向上对于各种元素的采样率,比如说,每四个亮度采样点就有四个Cb的Cr采样值。4:4:4采样完整地保留了所有的信息值。

             4:2:2采样中(有时记为YUY2),色度元素在纵向与亮度值有同样的分辨率,而在横向则是亮度分辨率的一半(4:2:2表示每四个亮度值就有两个Cb和Cr采样)4:2:2视频用来构造高品质的视频彩色信号。

             4:2:0采样格式中(常记为YV12)Cb和Cr在水平和垂直方向上有Y分辨率的一半.4:2:0有些不同,因为它并不是指在实际采样中使用4:2:0,而是在编码史中定义这种编码方法是用来区别于

    4:4:4和4:2:2方法的)。4:2:0采样被广泛地应用于消费应用中,比如视频会议,数字电视和DVD存储中。因为每个颜色差别元素中包含了四分之一的Y采样元素量,那么4:2:0YCbCr视频需要刚好4:4:4或RGB视频中采样量的一半。

             4:2:0采样有时被描述是一个"每像素12位"的方法。这么说的原因可以从对四个像素的采样中看出。使用4:4:4采样,一共要进行12次采样,对每一个Y,Cb和Cr,就需要12*8=96位,平均下来要96/4=24位。使用4:2:0就需要6*8=48位,平均每个像素48/4=12位。

            在一个4:2:0隔行扫描的视频序列中,对应于一个完整的视频帧的Y,Cb,Cr采样分配到两个场中。可以得到,隔行扫描的总采样数跟渐进式扫描中使用的采样数目是相同的。

  • 相关阅读:
    pycharm安装,svn使用,远程开发调试,接口测试,连接服务器
    scrapy回调函数传递参数
    python发送邮件
    python开发部署时新增数据库中表的方法
    python更新数据库脚本三种方法
    python中json.loads,dumps,jsonify使用
    chmod 命令
    find
    find 命令
    locate 命令
  • 原文地址:https://www.cnblogs.com/geekite/p/5577987.html
Copyright © 2011-2022 走看看