相机色彩格式及其转换

发布时间 2023-04-05 14:26:45作者: qi-xmu

2023年04月05日 相机色彩格式及其转换

参考文章

RAW、RGB、YUV 图像格式区别 - 知乎 (zhihu.com)

YUV - 维基百科,自由的百科全书 (wikipedia.org)

YUV格式

YUV的发展历史

YUV的发明是彩色电视和黑白电视的过渡时期,黑白视频只有Y(Luma, Luminance,明度)视频,也就是灰阶值。到了彩色电视规格的制定,是以YUV/YIQ(NTSC,National Television Standards Committee)的格式来处理彩色电视图像,把UV视作表示彩度的C(Chrominance或Chroma),如果忽略C信号,那么剩下的Y(Luma)信号就跟之前的黑白电视频号相同,这样一来便解决彩色电视机与黑白电视机的兼容问题。Y'UV最大的优点在于只需占用极少的带宽。

因为UV分别代表不同颜色信号,所以直接使用R与B信号表示色度的UV。 也就是说UV信号告诉了电视要偏移某象素的的颜色,而不改变其亮度。 或者UV信号告诉了显示器使得某个颜色亮度依某个基准偏移。 UV的值越高,代表该像素会有更饱和的颜色。

彩色图像记录的格式,常见的有RGB、YUV、CMYK等。彩色电视最早的构想是使用RGB三原色来同时传输。这种设计方式是原来黑白带宽的3倍,在当时并不是很好的设计。RGB诉求于人眼对色彩的感应,YUV则着重于视觉对于亮度的敏感程度,Y代表的是亮度,UV代表的是彩度(因此黑白电影可省略UV,相近于RGB),分别用Cr和Cb来表示,因此YUV的记录通常以Y:UV的格式呈现。

** 来自wiki

我们常说的YUV,通常是指YCbCr, 其中Y指的是明度,Cb指蓝色色度分量,Cr指红色色度分量。

YUV格式分类

分类依据

数据采样方式

根据Y和UV数据量的占(为了节省带宽,对数据抽样),可以将YUV格式分成一下几类:

  1. 4:4:4表示完全采样。

    每一个像素分别对应一个Y,U,V分量。

  2. 4:2:2表示水平2:1取样,垂直完全采样。

    每一个像素对应一个Y分量,在图像的每一行中,相邻两个像素共用一个U分量和一个V分量。数据压缩到原来的2/3。

  3. 4:2:0表示水平2:1取样,垂直2:1取样。(android设置默认格式)

    每一个像素对应一个Y分量,在2x2的像素格子中,(4个像素)共用一个U分量和一个V分量。数据压缩到原来的1/2。

  4. 4:1:1表示水平4:1取样,垂直完全采样。(这类格式不常用)

    每一个像素对应一个Y分量,在图像的每一行中,相邻四个像素共用一个U分量和一个V分量。数据压缩到原来的1/2。

数据在内存中的分布方式

根据YUV在内存不同的排列方式不同,可以主要分成下面三种类型:

  • Packed Formats: 将Y,U,V值存储为Macro Pixels(宏像素)数组,类似RGB的存放方式。
  • Planner Formats: 将Y,U,V三个分量分别存储在不用的矩阵中。
  • Semi-Planner Formats: 将Y分量单独存储在一个矩阵中,UV分量存储为Macro Pixels数组。(Andorid采用这种模式)

具体类型(4x4像素为例)

YUV格式

标题 类型 说明 采样
I420 YU12 Planner Formats 三个分量分开存储,按照Y, U, V顺序存放在内存中。 420
YV12 Planner Formats 三个分量分开存储,按照Y, V, U顺序在存放内存中。 420
NV12 Semi-Planner Formats Y 分量单独存放,UV 分量交错存放,UV 在排列的时候,从 U 开始。 420
NV21 Semi-Planner Formats Y 分量单独存放,UV 分量交错存放,UV 在排列的时候,从 V 开始。(Android默认格式) 420
I422 Planner Formats 三个分量分开存储,按照Y, U, V顺序在存放内存中。 422
YV16 Planner Formats 三个分量分开存储,按照Y, V, U顺序在存放内存中。 422
NV16 Semi-Planner Formats Y 分量单独存放,UV 分量交错存放,UV 在排列的时候,从 U 开始。 422
NV61 Semi-Planner Formats Y 分量单独存放,UV 分量交错存放,UV 在排列的时候,从 V 开始。 422
YUVY Packed Formats 在 Packed 内部,YUV 的排列顺序是 Y U V Y,两个 Y 共用一组 UV。 422
VYUY Packed Formats 在 Packed 内部,YUV 的排列顺序是 V Y U Y,两个 Y 共用一组 UV。 422
UYVY Packed Formats 在 Packed 内部,YUV 的排列顺序是 U Y V Y,两个 Y 共用一组 UV。 422
I444 Planner Formats 三个分量分开存储,按照Y, U, V顺序存放在内存中。 444
YV24 Planner Formats 三个分量分开存储,按照Y, V, U顺序在存放内存中。 444
NV24 Semi-Planner Formats Y 分量单独存放,UV 分量交错存放,UV 在排列的时候,从 U 开始。 444
NV42 Semi-Planner Formats Y 分量单独存放,UV 分量交错存放,UV 在排列的时候,从 V 开始。 444
YUV444 Packed Formats 在 Packed 内部,YUV 的排列顺序是 Y U V,每一个像素对应一组Y,U,V分量。 444

RGB格式

使用宏像素(Micro pixels)模式排列,每一个分量占用8bit,也称为24比特模式。RGBA中加入了透明度分量(Alpha)。

RAW格式

RAW 图像就是图像感应器将捕捉到的光源信号转化为数字信号的原始数据,是无损的,包含了物体原始的颜色信息等。RAW 数据格式一般采用的是 Bayer 排列方式,通过滤波光片,产生彩色滤波阵列(CFA),鉴于人眼对绿色波段的色彩比较敏感,Bayer 数据格式中包含了50%的绿色信息,以及各25%的红色和蓝色信息。 Bayer 排列格式有以下4种:

  1. | R | G | | G | B |
  2. | B | G | | G | R |
  3. | G | R | | B | G |
  4. | G | B | | R | G |

补充内容

YUV格式和RGB格式互换。

\[ \begin{array}{rll} Y &= 0.299 * R + 0.587 * G + 0.114 * B \\ U &= -0.169 * R - 0.331 * G + 0.5 * B + 128 \\ V &= 0.5 * R - 0.419 * G - 0.081 * B + 128 \end{array} \]

\[ \begin{array}{rll} R & = Y + 1.13983 * (V - 128) \\ G & = Y - 0.39465 * (U - 128) - 0.58060 * (V - 128) \\ B & = Y + 2.03211 * (U - 128) \end{array} \]

矩阵形式

\[ \begin{bmatrix} Y \\ U \\ V \end{bmatrix} = \begin{bmatrix} 0.299 & 0.587 & 0.114 \\ -0.169 & -0.331 & 0.5 \\ 0.5 & -0.419 & -0.081 \end{bmatrix} \begin{bmatrix} R \\ G \\ B \end{bmatrix} + \begin{bmatrix} 0 \\ 128 \\ 128 \end{bmatrix} \]

\[ \begin{bmatrix} R \\ G \\ B \end{bmatrix} = \begin{bmatrix} 1 & -0.00093 & 1.401687 \\ 1 & -0.3437 & -0.71417 \\ 1 & 1.77216 & 0.00099 \end{bmatrix} \begin{bmatrix} Y \\ U - 128 \\ V - 128 \end{bmatrix} \]