颜色模型
颜色模型是图像展示的最基础的理论。颜色模型有 RGB 模型,CMY 模型, HSI 模型 等,这里只介绍一下 RGB 模型和 YUV 模型,因为 RGB 模型是在视频采样中常用的模式。本文参考对象和知乎文章。
RGB 模型
上图摘自《计算机图形学》。
颜色值
红,绿,蓝三个值的取值范围为 0 ~ 1。不同权重的色值加和后算出不同的颜色。
色相
色相代表的就是对人感觉而言有颜色的色彩,如酒红,紫红,绿色。代表的是颜色属性。
饱和度
饱和度是一种纯色被白光稀释的程度的度量。通常是颜色中混入灰色。饱和度其实是色差产生。
明度
明度代表的就是光线亮度,调整明度时,就相当于调节发光量,其实就是加入了额外的白色或黑色。
以上概念参考了这篇文章。可以稍微扩展一下看看其应用。
使用上面的色彩模型可以混合出的颜色如下图,其余的我们看到的颜色都是增加饱和度和明度来调整。
增加饱和度的呢?
总结一下关系:
- 三个色值相等时变现上是从黑色到白色,处于中间时为灰色
- 三个色值中,最大的两个值决定颜色
- 每个色值通道从0到1(对于 RGB24 为0~255,下面会讲到)代表的该颜色的亮度
看几个例子
灰色,所有色值均等
偏红色,红色值偏大一些
升高绿色,现在变成红色和绿色的混合显示效果
单个颜色的色阶变化引起的亮度变化
单个颜色的饱和度变化
RGB24
RGB24 每个通道分成256阶,总的可表示的颜色总数为由 (28 )3 = 16777216。一个像素点由三个颜色组成,那么大小就是3Bytes。在一些图片中会采用 RGB32 ,最后一个代表的是透明度,在 Photoshop 中也称作 Alpha 通道。
YUV 模型
YUV 是一种颜色编码,在对图片或视频编码时考虑到人的感知能力,允许降低色度的带宽。Y 表示明亮度,U 和 V 代表的是蓝色通道和红色通道,但是并不是知 RGB 中的值,而是色差。使用 RGB 可以转换为 YUV。 YCbCr 和 YPbPr 也是值 YUV 格式,YCbCr 是计算机上可以用的编码。转换格式如下,RGB 颜色中将亮度分散在每个色值中。
使用 YUV 反算 RGB
通过上面的公式也可以看出 U 和 V 其实是是蓝色和红色与 Y 通道的差值。
色度采样
YUV 色彩模型的采样方式如下(有没有其他色彩采样方式?)
屏幕显示目前是采用逐行扫描的方式进行,在采样的时候使用 4:x:y
的比例方式说明。这里4代表逐行扫描一行时,每扫描4个 Y 采样,就有 x 个 (U) Cb (V) Cr,y 代表第二行色度的采样。比如常用的 YUV 4:2:0 的含义是每4个 Y 采样,2个 (U)Cb 和(V)Cr 采样,但是第二行色度采样为0。采样后的颜色空缺在解码的时候由解码器填充(内插值,内环滤波等)。
YUV422
先看一下 4:2:2 的采样如下,每个格子是一个像素,可以看到灰色是 Y 采样,蓝色是 U Cb 的采样,红色的是V Cr 的采样。可以看到每四个像素有两组个颜色的采样值,四个亮度采样值。
表示2:1的水平取样,垂直完全采样
YUV411
411 的同理如上。每四个像素有4个 Y 亮度和1组颜色采样。水平4:1 采样,垂直全部采样。
YUV420
420 的特殊一些,见下图。每四个像素有两组颜色采样和4个亮度采样。但是是隔行的。
表示2:1的水平取样,垂直2:1采样。
YUV444
444 就是每四个像素有4组颜色采样和4个亮度采样。图像效果是最好的,也就没有了压缩比。表示完全取样。
总结
以安防常用的 YUV420 原始的大小应该为
比特率 = 宽高颜色深度*帧每秒
1秒30帧,每个像素为24 bits,分辨率为480240,比特率为 4802403024 = 82,944,000 比特每秒或 82.944 Mbps。
使用 YUV420后平均每个像素为 (88 + 84)/8=12 bits。大小降了一半,但是这还远远不够。