什么是颜色
颜色是通过眼、脑和我们的生活经验所产生的对光的视觉感受,我们肉眼所见到的光线,是由波长范围很窄的电磁波产生的,不同波长的电磁波表现为不同的颜色,对色彩的辨认是肉眼受到电磁波辐射能刺激后所引起的视觉神经感觉。
颜色的数字化
在相机系统中,外部世界的光信息(光子,photon)通过透镜或其他光学器件聚焦之后达到相机的图像传感器(CCD 或者 CMOS)。
- 图像传感器可以将一个入射光子转换为对应的一个电子(electron)。
- 在曝光时间内,图像传感器对转换的电子进行电荷积累。
- 然后,图像传感器会将积累的电荷信号转换成对应的电压信号。
- 最后,利用 ADC(模数变换器,analog-to-digital converter)把电信号转换成数字信号,而转换后的数字信号则为某个范围内的整数值。
ADC 转换之后的数字信号的取值范围受限于 ADC 设备。对于 8-bit 的 ADC 而言,数字信号的取值范围为 [0, 2^8-1],因此,对于每一个像素而言,会用 [0, 255] 之间的整数来进行编码。
ADC 转换的数字信号的数值是一个线性编码的过程,这意味着如果将图像传感器上的光量增加1倍,则 ADC 转换之后对应的数值也会增加1倍。这是一个非常有用的特性:无论是增加物理世界的光量,还是增加 ADC 转换之后的数值,对图片而言,都会带来相同的效果。线性编码意味着我们所处理的数据和光发射的强度成正比关系。
实际上,研究表明,人类视觉系统是以对数函数的方式来感知光亮度。这意味着,人眼会提高暗部的敏感度,降低高光部分的敏感度。
由于人类视觉感知系统不是以线性方式工作的,因此必须使用非线性曲线来对 ADC 生成的线性数据进行变换,从而使得拍摄的图像色调与我们的视觉系统的工作方式相匹配。这个过程也就是我们所说的伽马校正。
RGB颜色空间/模型
RGB(Red, Green, Blue)颜色空间最常用的用途就是显示器系统,彩色阴极射线管,彩色光栅图形的显示器 都使用R、G、B数值来驱动R、G、B 电子枪发射电子,并分别激发荧光屏上的R、G、B三种颜色的荧光粉 发出不同亮度的光线,并通过相加混合产生各种颜色;扫描仪也是通过吸收原稿经反射或透射而发送来 的光线中的R、G、B成分,并用它来表示原稿的颜色。RGB色彩空间称为与设备相关的色彩空间,因为不同 的扫描仪扫描同一幅图像,会得到不同色彩的图像数据;不同型号的显示器显示同一幅图像,也会有不同 的色彩显示结果。显示器和扫描仪使用的RGB空间与CIE 1931 RGB真实三原色表色系统空间是不同的,后者 是与设备无关的颜色空间。btw:Photoshop的色彩选取器(Color Picker)。可以显示HSB、RGB、LAB和CMYK 色彩空间的每一种颜色的色彩值。
RGB模型表示的图像由3个分量图像组成,每种原色一幅分量图像。当送入RGB监视器时,这3幅图像在屏幕上混合生成一幅合成的彩色图像。考虑一幅RGB图像,其中每一幅图红绿蓝图像都是一幅8比特图像。在这种情况下,可以说每个RGB彩色像素有24比特的深度。在24比特RGB图像中,颜色总数是{({28})3} = 16777216。下图为分别为RGB彩色立方体示意图 和 对应的RGB24比特彩色立方体。
常用RGB/YUV格式
constexpr int32_t COLOR_Format12bitRGB444
constexpr int32_t COLOR_Format16bitARGB1555
constexpr int32_t COLOR_Format16bitARGB4444
constexpr int32_t COLOR_Format16bitBGR565
constexpr int32_t COLOR_Format16bitRGB565
constexpr int32_t COLOR_Format18bitARGB1665
constexpr