• 音视频编解码——YUV视频格式详解


    一、YUV 介绍

    YUV是一种颜色编码方方式,通常由彩色摄像机进行取像,然后把取得的彩色图像信号经过分色、分别放大校正后得到RGB,再经过矩阵变换得到亮度信号Y和两个色差信号B-Y(即U)、R-Y(即V),最后将亮度和色差三个信号分别编码,用同一信道发送出去。这种色彩的表示方法就是所谓的YUV色彩空间表示。采用YUV色彩空间的重要性就是它的亮度信号Y和色度信号U、V是分离的。

    YUV 的优点

    YUV主要用于优化彩色视频信号的传输。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽(RGB要求三个独立的视频信号同时传输)。

    其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面─色调与饱和度,分别用Cr和Cb来表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。

    采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像。彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。

    YUV采样

    YUV的优点之一是色度通道可以具有比Y通道更低的采样率而不会显着降低感知质量。称为A:B:C符号的符号用于描述U和V相对于Y的采样频率:

    • 4:4:4 表示没有对色度通道进行缩减采样。
    • 4:2:2 意味着2:1的水平缩减采样,没有垂直下采样。每扫描一行,每两个U或V采样包含四个Y采样。
    • 4:2:0 表示2:1水平缩减采样,2:1垂直缩减采样。
    • 4:1:1 表示4:1水平缩减采样,没有垂直下采样。每个扫描线对于每个U或V采样包含四个Y采样。4:1:1采样比其他格式少见。

    换句话说来说,可以理解为:

    • YUV 4:4:4采样,每一个Y对应一组UV分量。
    • YUV 4:2:2采样,每两个Y共用一组UV分量。
    • YUV 4:2:0采样,每四个Y共用一组UV分量。

    下面三个图分别是各自的采集方式:

    YUV存储

    下面的图给出了常见的YUV码流的存储方式,并在存储方式后面附有取样每个像素点的YUV数据的方法,其中,Cb、Cr的含义等同于U、V。

    YUVY 格式 (属于YUV422)


    YUYV为YUV422采样的存储格式中的一种,相邻的两个Y共用其相邻的两个Cb、Cr,分析,对于像素点Y'00、Y'01 而言,其Cb、Cr的值均为 Cb00、Cr00,其他的像素点的YUV取值依次类推。

    UYVY 格式 (属于YUV422)


    UYVY格式也是YUV422采样的存储格式中的一种,只不过与YUYV不同的是UV的排列顺序不一样而已,还原其每个像素点的YUV值的方法与上面一样。

    YUV422P(属于YUV422)


    YUV422P也属于YUV422的一种,它是一种Plane模式,即打包模式,并不是将YUV数据交错存储,而是先存放所有的Y分量,然后存储所有的U(Cb)分量,最后存储所有的V(Cr)分量,如上图所示。其每一个像素点的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即两个Y共用一个UV。比如,对于像素点Y'00、Y'01 而言,其Cb、Cr的值均为 Cb00、Cr00。

    YV12,YU12格式(属于YUV420)

    NV12、NV21(属于YUV420)


    NV12和NV21属于YUV420格式,是一种two-plane模式,即Y和UV分为两个Plane,但是UV(CbCr)为交错存储,而不是分为三个plane。其提取方式与上一种类似,即Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00

    yuv420p 和 YUV420的区别

    二者在存储格式上有区别:
    yuv420p:yyyyyyyy uuuuuuuu vvvvv
    yuv420: yuv yuv yuv
    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
    

    二、 YUV格式与RGB格式的换算

    关于YUV与RGB转换相关的介绍,可以参见 http://www.fourcc.org/fccyvrgb.php。 下面是转换的时候的标准公式:

    RGB 转换成 YUV

    Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
    Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
    Cb = U = -( 0.148 * R) - (0.291 * G) + (0.439 * B) + 128
    

    YUV 转换成 RGB

    B = 1.164(Y - 16) + 2.018(U - 128)
    G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
    R = 1.164(Y - 16) + 1.596(V - 128)
    

    取值范围

    RGB取值范围均为0255,Y=0255,U=-122+122,V=-157+157

    简化后的换算公式

    RGB转YUV

    Y = 0.299R + 0.587G + 0.114B
    U'= (BY)*0.565
    V'= (RY)*0.713
    

    YUV转RGB

    R = Y + 1.403V'
    G = Y - 0.344U' - 0.714V'
    B = Y + 1.770U'
    

    三、总结

    现在大家应该对几种常见的YUV码流格式就简单地列在上面了,大家在处理YUV码流前,先了解清楚自己的码流到底属于哪一种,然后对应进行处理。
    最后,再回答一个疑问,即分析清楚YUV码流格式了,我们可以做什么?最常用的一点就是,提取出所有的Y分量,然后利用vc或者matlab把你采集的图像的灰度(Y分量)显示处理,这样你就可以很快地知道你采集的图像是否有问题了。

    四、参考文档

    1. https://msdn.microsoft.com/en-us/library/aa904813(VS.80).aspx
    2. https://baike.baidu.com/item/YUV/3430784?fr=aladdin
    3. https://blog.csdn.net/yangyasong/article/details/80681135
  • 相关阅读:
    B树/[oracle]connect BY语句
    使用vmware vconverter从物理机迁移系统到虚拟机P2V(多图)
    goldengate常用命令
    GoldenGate 之 Bounded Recovery说明
    RAC环境中threads变更后如何确保goldengate继续正常复制
    简述Oracle IOT(Index Organized Table)
    mybatis-spring最新版下载地址
    12 个 CSS 高级技巧汇总
    Linux命令:useradd
    PHP date()函数详解
  • 原文地址:https://www.cnblogs.com/renhui/p/8432612.html
Copyright © 2020-2023  润新知