• 图像识别___YUV学习手记


      视觉专家很早以前就知道,人眼对亮度分辨率的敏感度高于对色彩分辨率的敏感度。

      这就是早期模拟和数字压缩形式的主要动因。视频信号会分解为亮度和色度,这两个是组成色彩的元素,这类似于图像可以分解为红、绿、蓝三个元素。

    亮度和色度元素被称为YUV(模拟信号)或YCbCr(数字信号)而不是RGB。

      YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

      与我们熟知的RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。

      主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr4:1:1和 YCbCr 4:4:4。

      一般来说,直接采集到的视频数据是RGB24的格式,RGB24一帧的大小size=width×heigth×3 Bit,RGB32的size=width×heigth×4,如果是I420(即YUV标准格式4:2:0)的数据量是 size=width×heigth×1.5 Bit。

      YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0,关于其详细原理,可以通过网上其它文章了解,这里我想强调的是如何根据其采样格式来从码流中还原每个像素点的YUV值,因为只有正确地还原了每个像素点的YUV值,才能通过YUV与RGB的转换公式提取出每个像素点的RGB值,然后显示出来。

    用三个图来直观地表示采集的方式吧,以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量。

    先记住下面这段话,以后提取每个像素的YUV分量会用到。

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

    (1) YUV 4:4:4

    YUV三个信道的抽样率相同,因此在生成的图像里,每个象素的三个分量信息完整(每个分量通常8比特),经过8比特量化之后,未经压缩的每个像素占用3个字节。

      下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2][Y3 U3 V3]

      存放的码流为: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3V3

    (2) YUV 4:2:2

      每个色差信道的抽样率是亮度信道的一半,所以水平方向的色度抽样率只是4:4:4的一半。对非压缩的8比特量化的图像来说,每个由两个水平方向相邻的像素组成的宏像素需要占用4字节内存。

      下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2][Y3 U3 V3]

      存放的码流为:     Y0 U0 Y1 V1 Y2 U2 Y3 V3

      映射出像素点为:[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3][Y3 U2 V3]

    (3) YUV 4:1:1

    4:1:1的色度抽样,是在水平方向上对色度进行4:1抽样。对于低端用户和消费类产品这仍然是可以接受的。对非压缩的8比特量化的视频来说,每个由4个水平方向相邻的像素组成的宏像素需要占用6字节内存

      下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2][Y3 U3 V3]

      存放的码流为: Y0 U0 Y1 Y2 V2 Y3

      映射出像素点为:[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2][Y3 U0 V2]

    (4)YUV4:2:0

    4:2:0并不意味着只有Y,Cb而没有Cr分量。它指得是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0...以此类推。对每个色度分量来说,水平方向和竖直方向的抽样率都是2:1,所以可以说色度的抽样率是4:1。对非压缩的8比特量化的视频来说,每个由2x2个2行2列相邻的像素组成的宏像素需要占用6字节内存。

      下面八个像素为:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2][Y3 U3 V3][Y5 U5 V5] [Y6 U6 V6] [Y7U7 V7] [Y8U8 V8]

      存放的码流为:Y0 U0 Y1 Y2 U2 Y3Y5 V5 Y6 Y7 V7 Y8

      映射出的像素点为:[Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7][Y3 U2 V7][Y5 U0 V5] [Y6 U0 V5] [Y7U2V7] [Y8 U2 V7]

    关于更多图像视频的可以去看雷神(雷霄骅)的博客https://blog.csdn.net/leixiaohua1020/article/details/50534150

  • 相关阅读:
    win7下的nginx小demo
    破解navicat
    MVC下用C#实现Excel导出
    使用IE10登录,URL出现SessionId的解决办法
    C#错误:The Controls collection cannot be modified
    更改数据库排序规则
    windows server 2008 r2电脑历史操作记录
    jquery easyui无法绑定下拉框内容
    Jquery实现自动提示下拉框
    CLSID {91493441-5A91-11CF-8700-00AA0060263B}错误
  • 原文地址:https://www.cnblogs.com/libra13179/p/10020703.html
Copyright © 2020-2023  润新知