美文网首页
YUV 颜色编码格式

YUV 颜色编码格式

作者: 1999c1b720cd | 来源:发表于2018-01-29 00:48 被阅读0次

    背景

    音视频、直播、短视频等图像处理过程中涉及到 YUV 信息,在维基百科阅读 YUV 协议、编写代码实现、输出可用的 API 模块之后,记录问题和解决方案,便于后续应用类似思想解决问题

    是什么

    • 一种颜色编码方法
    • 记录颜色信息的一种数据结构,颜色的编码方法有多种(RGB, YUV, CMYK),它是其中一种。最常见的是 RGB
    • Y 明亮度,U 色度,V 浓度,UV 彩色
    • 一个像素点包含一个 YUV 信息
    • 计算机需要解决时间和空间问题,YUV 属于解决空间问题范畴,因此需要重点关注它如何解决问题的

    为什么

    • 解决黑白电视和彩色电视的图像兼容性问题
    • 解决图像信息在传输过程中占用过大的带宽问题
    • 解决图像信息在存储过程中占有空间过大的问题
    • 服务器将同一段数据分发给黑白和彩色电视,它们可以根据需要把一帧 YUV 图像解码成 RGB 渲染

    使用方法

    • 在传输之前把颜色编码成 YUV 格式,降低带宽占用和减少流量消耗
    • 在接收到 YUV 格式之后解码成 RGB 格式,用于后续渲染

    内部原理

    紧凑 / 平面格式

    • 紧凑型
      在像素点字节流里面 YUV 三个分量紧紧挨着,如 YUV YUV YUV YUV,这种排列方式跟 RGB 很类似
    • 平面型
      在像素字节流里面 YUV 三个分量分开存储,同一分量存储在一起,如 YYYY YYYY UU VV
      这两种设计方式和对象中信息记录方式类似,如多个对象依次排列称为紧凑型,把多个对象中同一维度的信息拿出来用数组记录,多个数组连在一起称为平面型

    采样格式

    • YUV444
      • 每个像素点都采样单独的 YUV 分量信息
      • 一个像素点占用 3 字节,每个分量占 1 字节。一帧图像占用总空间 W * H * 3 bytes
      • 包含了最全面的 YUV 信息,是 YUV 空间内部转换以及和 RGB 空间转换的桥梁
    • YUV422
      • 在 YUV444 编码的基础上采用 2 * 1 的矩阵进行二次取样,也就是在水平方向上隔一列采样一次 UV 信息,在垂直方向上进行完全取样
    • YUV420
      解决 YUV444 占用空间过大问题。在 YUV444 格式的基础上使用 2 * 2 矩阵对像素点进行二次取样(只取左上角像素点,其他不取,还是取四个之后平均?),4 个像素点具有单独 Y 分量且共享同一个 UV 信息,总 6 字节。一帧图像占用总空间 (W * H + W * H / 2) bytes,比 YUV444 少一半空间。
      • I420
        字节排列 YYYY YYYY UU VV,全部都是平面型排列
      • NV21
        字节排列 YYYY YYYY UV UV,Y 平面和 UV 平面, UV 内部是紧凑型
      • YV12
        字节排列 YYYY YYYY VV UU,平面型,V 在 U 前面

    优缺点

    • 兼容黑白和彩色电视
    • 占用空间少,带宽要求低

    练习题

    • 完成单个像素点 YUV 和 RGB 颜色空间转换 API
    • 完成一帧图像 YUV 和 RGB 颜色转换 API,关键在于计算 U/V 变量在字节流中的偏移量
    • 完成 NV21、YV12、I420 到 RGB888 的编解码
    • 完成和别人编解码 API 的相互转换,验证编解码正确

    总结

    • 通过对比 RGB 和对象多维度信息存储,理解 YUV 如何解决信息兼容和空间占用的问题
    • 实战单个像素、一帧图像的多种格式之间编解码,理解了 YUV 背后在干一件什么事情
    • 图像的编解码也没有那么高不可攀
    • 通过学习协议、编码实现、输出可用 API 、整理输出博客这样的学习方法学得会更加扎实

    后记

    到现在的时间点我们完成了一帧图像的编码,输出数据结构是 YUV 。YUV420 相对于 ARGB8888 模式节省空间 (4-1.5)/ 4 = 62.5%.下一步是多帧图像组成视频时的编码优化空间,也就是 H.264 视频编码原理,敬请期待

    参考

    维基百科

    相关文章

      网友评论

          本文标题:YUV 颜色编码格式

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