• 一张图理清所有的RAW RGB YUV图像格式


    0. 引言

    之前一直做着和camera有关的工作,所以常常会涉及到图像格式的问题。感觉接触的名字和种类很多,索性好好整理一下,分个类,也方便后面再整理。

    1. 直接上结论

    直接总结了一张图
    在这里插入图片描述

    2. 图像格式

    2.1 RAW

    RAW图像是sensor出来的最原始的数据。
    是光线透过滤镜之后直接得到的数据,每个像素只有一种颜色的数据。通常情况下,每个像素的数据量是10bits或者12bits,当然也有sensor有其他的8,14,16等等。
    RAW的基本介绍可以看这篇文章.
    一般的摄像头都会支持RAW格式的输出,这样我们拿到RAW数据之后,是没有办法直接使用的,还要在host端做ISP,做色彩纠正,增强,HDR,插值成RGB,转成YUV,最后再使用。像amba平台就是直接读取RAW数据,送入idsp来做一系列的3A操作的。另外记录一下,Amba平台对RAW数据有packed和compressed两种设定选择。如果未设置packed,每个像素不管是10位,12位,14位,都会占据2个字节16位,如果选择了packed,则会按照真实的位数排列。如果设置了compressed,则会进行数据压缩,整体数据量平均每个像素达到27/32个字节。
    有些项目,不追求很高的sensor的3A效果,就会直接使用sensor输出的YUV或者RGB,这就是使用了sensor内置的一些差值算法,直接得到图像,比较方便,并且省host的运算资源,但是不够自由,可以调节的东西不多。
    对于RAW数据,会有不同的bayer类型,是GBRG,GRBG,RBBG,GBBR的一种,其实也就是透镜的类型。

    但是不管在senosr做还是在host主机做,RAW想用起来,都是要做插值得到真正的RGB图像的。

    2.2 RGB

    RGB是大家很熟悉的一种类型。三原色的原理就不做太多介绍了。
    在windows的绘图板中,我们就可以通过调试三原色不同的比例得到不同的颜色。
    在这里插入图片描述
    RGB常用的数据格式有 RGB888,RGB565,RGB555这么几种。

    2.3 YUV

    YUV 是一个比较不好理解的类型,而且种类很多.
    也是这篇文章的重点。
    什么是YUV?RGB很好用,但是他对黑白图像的支持不是很好,因此,人们又会把RGB转成YUV格式。YUV中的Y,表示明亮度(Luma),就是灰度图。U和V分别对应Cb和Cr,代表色度(Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

    2.3.1 采样方式

    分类方式根据采样的不同,分为YUV444,YUV422,YUV420.

    • YUV444:每个像素点同时包含Y/U/V 3个参数
    • YUV422:每2个像素点共享一组U/V参数,同时每个像素拥有自己的Y参数
    • YUV420:每4个像素点共享一组u/v参数,同时每个像素拥有自己的Y参数

    2.3.2 排列方式

    确定了采样方式之后,数据的排列又分为3种:

    • planar(注意不是planer,也不是plannar):把Y数据,U数据和V数据单独放置3块位置,形成3个平面
    • semi-planar:把Y数据独立,UV数据放在一起,形成2个平面。
    • packed:YUV数据打包在一起,无论单独的Y数据U数据还是V数据,地址都不是连续的。

    2.3.3 命名方式

    YUV的命名规则也有好几种,因此同一个类型有可能会有好几种名字,

    • YUVxxxP, YUVxxxSP
      e.g. YUV422P,YUV420SP
      根据plannar,semi-planner 和 packed的类型来定义的,这种感觉最好记。
      plannar就是P,注意顺序都是Y前U中V后
      semi-plannar就是SP,注意顺序都是Y前UV后。
    • Ixxx
      e.g. I422,I420
      感觉是plannar的别称
      I422就是YUV422P
      I420就是YUV420P
    • NVxx,YVxx
      e.g NV12,NV21,NV16,YV12
      NV代表属于semi-plannar,12代表一个像素所占的实际bits。NV12是YUV420SP,每个像素占据1个Y(8Bit)+1/4 个UV(8 * 2 / 4 = 4bit) = 12bits

    2.3.4 类型

    YUV根据采样方式不同,排列方式不同,命名方式不同,有N多类型。
    我基本都总结在文章开头的表格里了,感觉要细分的话还能再分,但是暂时不用这么细吧,实际也用不到,全部记住没什么意义,记住一些常用的即可。
    毕竟开发平台定下来之后,几种常用的数据类型也就随之确定了。安霸这边主要就是用NV12和NV16.

    参考链接

  • 相关阅读:
    数组排序与二维数组
    函数-头文件//Calculator.h
    [hiho1586]Minimum
    后缀数组模板整理
    [spoj694&spoj705]New Distinct Substrings(后缀数组)
    [poj3261]Milk Patterns(后缀数组)
    [poj3450]Corporate Identity(后缀数组)
    [poj1236]Network of Schools(targin缩点SCC)
    [hdu2087]剪花布条(KMP)
    [hdu2594]Simpsons’ Hidden Talents
  • 原文地址:https://www.cnblogs.com/lidabo/p/16801656.html
Copyright © 2020-2023  润新知