Table of Contents
什么是RGB
在RGB模式下(如下图), 每一种颜色都是红、绿、蓝三种颜色的混合, 这种模式被称为叠加, 这三种颜色被称为是主颜色(primary colors)。可以通过对主颜色的叠加, 来得到二级颜色(secondary colors), 洋红色(红加蓝),青色(绿加蓝),黄色(红加绿)。在RGB 颜色空间上,当任何一个基色的亮度值为零时,即在原点处,就显示为黑色。当三种基色都达到最高亮度时,就表现为白色。
RGB 模型是目前常用的一种彩色信息表达方式,它使用红、绿、蓝三原色的亮度来定量表示颜色。该模型也称为加色混色模型,是以RGB三色光互相叠加来实现混色的方法,因而适合于显示器等发光体的显示。
Primary and Secondary Colors for RGB
RGB 颜色空间可以看作是三维直角颜色坐标系中的一个正立方体。如上右图所示。红绿蓝三色在立方体的三个顶点上;洋红、青、黄色在立方体的立方体的另外三个顶点;黑色在坐标原点;而白色在离原点最远的定点上。在连接黑色与白色的对角线上,是亮度等量的三基色混合而成的灰色,该线称为灰色线。
什么是YUV
YUV基本概念
YUV是编译true-color颜色空间(color space)的种类,Y'UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠。“Y”表示明亮度(Luminance或Luma),也就是灰阶值,“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。在 最近十年中,视频工程师发现人眼对色度的敏感程度要低于对亮度的敏感程度。在生理学中,有一条规律,那就是人类视网膜上的视网膜杆细胞要多于视网膜锥细 胞,说得通俗一些,视网膜杆细胞的作用就是识别亮度,而视网膜锥细胞的作用就是识别色度。所以,你的眼睛对于亮和暗的分辨要比对颜色的分辨精细一些。基于此原理, 在使用YUV的时候, 保证Y分量的前提下, 可以舍弃一部分UV分量,来减少对带宽的需求。却也并不会太影响图像的质量。
YUV颜色空间是彩色电视兴起后, 对黑白电视兼容的产物。因为RGB颜色空间中, 每一个像素都需要三个分量的叠加, 就需要三通道的信号,即便是表示黑白像素。 但是在YUV颜色空间中,Y就表示了灰度信息, 也就是黑白图像。所以YUV像素编码, 成功的兼容了黑白电视信号。
能看到这篇文章的朋友肯定都知道RGB颜色模式。可能会像我一样, 总是在想, RGB三色代表了红绿蓝, YUV三个分量就究竟长啥样呢, 能不能举例直观的看一下呢??需要看视频中YUV分量的请移步我的另一篇博客:ffmpeg 分离视频中的YUV分量
下图演示了RGB 和YUV的关系,以及Y对UV的影响
UV组成的颜色平面如下:
当Y取不一样的值对UV平面影响几何呢?
来个更加直观YUV色彩空间立方体:
左上立方体前面Y = 0, 他的正中心是纯黑的, 此处为YUV坐标系的零点。
右上立方体前面Y = 1, 他的正中心是纯白色的;此立方体只是改变了左边立方体的方位。
YUV 和RGB 的转化:
Y'= 0.299*R' + 0.587*G' + 0.114*B'
U'= -0.147*R' - 0.289*G' + 0.436*B' = 0.492*(B'- Y')
V'= 0.615*R' - 0.515*G' - 0.100*B' = 0.877*(R'- Y')
R' = Y' + 1.140*V'
G' = Y' - 0.394*U' - 0.581*V'
B' = Y' + 2.032*U'
英文水平不错的朋友一定要好好读读以下的英文原文,可以更好的理解:
The YUV color model is the basic color model used in analogue color TV broadcasting. Initially YUV is the re-coding of RGB for transmission efficiency (minimizing bandwidth) and for downward compatibility with black-and white television. The YUV color space is “derived” from the RGB space. It comprises the luminance (Y) and two color difference (U, V) components. The luminance can be computed as a weighted sum of red, green and blue components; the color difference, or chrominance, components are formed by subtracting luminance from blue and from red.
The principal advantage of the YUV model in image processing is decoupling of luminance and color information. The importance of this decoupling is that the luminance component of an image can be processed without affecting its color component. For example, the histogram equalization of the color image in the YUV format may be performed simply by applying histogram equalization to its Y component.
There are many combinations of YUV values from nominal ranges that result in invalid RGB values, because the possible RGB colors occupy only part of the YUV space limited by these ranges. Figure "RGB Colors Cube in the YUV Color Space" shows the valid color block in the YUV space that corresponds to the RGB color cube RGB values that are normalized to [0..1]).
The Y'U'V' notation means that the components are derived from gamma-corrected R'G'B'. Weighted sum of these non-linear components forms a signal representative of luminance that is called luma Y'. (Luma is often loosely referred to as luminance, so you need to be careful to determine whether a particular author assigns a linear or non-linear interpretation to the term luminance).
叨叨了半天重点是 Y分量是 RGB三色的加权和, U、V 分量则可以视为 是亮度减去蓝、红
PS:大家一定要十分的清楚,YUV色彩空间是一种表示颜色的方法,RGB才是真正的物理色彩,也就是说,不管你咋表示, 最后要显示的时候, 还得要依靠红、绿、蓝三色叠加而成。铁证就是各种屏幕都是由红、绿、蓝三种发光点组成的。
下图就是某oled的像素点排布
YUV 的分类:
YUVFormats分成两个格式:
-
紧缩格式(packedformats):将Y、U、V值存储成MacroPixels数组,和RGB的存放方式类似。
-
平面格式(planarformats):将Y、U、V的三个分量分别存放在不同的矩阵中。
YUV采样:
色度通道相比较亮度通道,可以采用较低的采样率,并不会太影响图像质量。通常用A:B:C的形式来描述 U、V相对于Y的采样比。
ps: 大家对采样要有个基本的概念,也就是以点盖面的意思,通过密集的取点,利用人眼分辨率有限的特点来达到面的效果。在图像采集的时候,按照采样格式对呈面的图像进行采集。
因为本人从事CT相关工作,举个例子:CT是利用射线透过人体之后会衰减来成像。就需要收集透过人体后的射线强度。所以会在发射端的180°上安置一个接收器,接收器就是在一个板子上密集排列射线敏感元件。射线敏感元件的排列方式就可以认为是一种采样格式。
- 4:4:4 表示不对色度(UV)下采样。(也就是说Y、U、V都是一样的采样次数)
- 4:2:2 表示按照2:1横向下采样,纵向不下采样。每4次Y采样,对应两次U、V采样。
- 4:2:0 表四横纵均2:1下采样。
- 4:1:1 means 4:1 horizontal downsampling, with no vertical downsampling. Every scan line contains four Y samples for each U and V sample. 4:1:1 sampling is less common than other formats, and is not discussed in detail in this article.
下图是根据我的理解画出的采样示例:
下图是微软官网给出的示范。十字代表亮度点,圆代表色度采样点。
上面两幅图的采样示例有一些差异,主要是YUV420的图解。不知道在采样的时候是不是真的采样图中的点,还是采样后整理成这种像素格式。但是有一点是一定的:四个Y分量,共用一组UV分量。此处还有疑问,期待大神的指点,十分感谢。
PS:在此,大家务必要明白YUV在应用中所处的位置,像素采集设备---->编码----->显示设备, 在此过程中, 只有编码是用的YUV, 两端靠的还是RGB,每个像素均有三个通道,所谓的采样,也就是采用各个像素不同的RGB分量, 来转化为YUV色彩模式,这种转化是基于人眼对色度不太敏感的理论基础。等到了显示端,还得再转换为RGB呢。
YUV格式:
个人理解。所谓的YUV格式,指的是针对一帧图像的数据组织形式。请与YUV采样对比理解。
YUV444格式:
YUV是最好理解的采样格式。请大家结合下面的YUV422和YUV420自行脑补以下哈。
YUV422格式:
YUYV为YUV422采样的存储格式中的一种,相邻的两个Y共用其相邻的两个U、V,分析,对于像素点Y1、Y2 而言,其U、V的值均为 U1、V1,其他的像素点的YUV取值依次类推。YUVY422:
UYVY422:
UYVY格式也是YUV422采样的存储格式中的一种,只不过与YUYV不同的是UV的排列顺序不一样而已,还原其每个像素点的YUV值的方法与上面一样.
YUV422P:
YUV422P也属于YUV422的一种,它是一种Plane模式,即平面模式,并不是将YUV数据交错存储,而是先存放所有的Y分量,然后存储所有的U(Cb)分量,最后存储所有的V(Cr)分量,如上图所示。其每一个像素点的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即两个Y共用一个UV。比如,对于像素点Y'00、Y'01 而言,其U、V的值均为 U1、V1。
YUV420P(YU12和YV12)格式
YUV420P又叫plane平面模式,Y , U , V分别在不同平面,也就是有三个平面,它是YUV标准格式4:2:0,主要分为:YU12和YV12
YU12格式
在android平台下也叫作I420格式,首先是所有Y值,然后是所有U值,最后是所有V值。
在SDL中对应的是SDL_PIXELFORMAT_IYUV, 大家不要换个马甲就不认识了
YU12:亮度(行×列) + U(行×列/4) + V(行×列/4)

YV12格式 :
YV12格式与YU12基本相同,首先是所有Y值,然后是所有V值,最后是所有U值。只要注意从适当的位置提取U和V值,YU12和YV12都可以使用相同的算法进行处理。
YV12占用内存:亮度Y(行×列) + V(行×列/4) + U(行×列/4)
YUV420SP(NV21和NV12)
YUV420SP格式的图像阵列,首先是所有Y值,然后是UV或者VU交替存储,NV12和NV21属于YUV420SP格式,是一种two-plane模式,即Y和UV分为两个plane,但是UV(CbCr)为交错存储,而不是分为三个平面。
NV21格式
android手机从摄像头采集的预览数据一般都是NV21,存储顺序是先存Y,再VU交替存储,NV21存储顺序是先存Y值,再VU交替存储:YYYYVUVUVU,以 4 X 4 图片为例子,占用内存为 4 X 4 X 3 / 2 = 24 个字节

NV12格式:
NV12与NV21类似,也属于YUV420SP格式,NV12存储顺序是先存Y值,再UV交替存储:YYYYUVUVUV,以 4 X 4 图片为例子,占用内存为 4 X 4 X 3 / 2 = 24 个字节。
写在后面的话:
YUV颜色空间,是视频像素格式(每一帧视频数据的组织形式)。大家在理解的时候最好能知道它在视频传递中所处的位置。视频在采集和显示的两端,还得仰仗RGB,在流通环节,才是YUV的势力范围。
本文参看学习了很多资料, 足足收集整理了一周才搞完,有很多自己的理解。困于能力有限,水平一般,肯定有一些下次,还望各位不吝赐教,共同进步。
参考文献:
https://scc.ustc.edu.cn/zlsc/sugon/intel/ipp/ipp_manual/IPPI/ippi_ch6/ch6_color_models.htm