以下图片与部分结论来自论文"Why You Should Forget Luminance Conversion and Do Something Better, Rang M. H. Nguyen, Michael S. Brown, CVPR2017"
1. CIE 1931 XYZ color space
CIE 1931 XYZ 色彩空间是由国际照明委员会(CIE)于1931年制定的一种色彩表示系统,目的是为了提供一种客观且可量化的方法来描述人类视觉系统对颜色的感知。该色彩空间基于一个标准观察者模型,即一个典型的具有标准视角和视野的人的颜色感知特性。
XYZ三个色度值
X主要与红色感知相关。
Y主要与绿色感知相关,同时 Y 也表示亮度(luminance)
Z主要与蓝色感知相关。
为光源的光谱功率分布(spectral power distribution),
是波长(wavelength),
是visible spectrum 380 − 720nm。
色度图(Chromaticity Diagram)
CIE 1931 XYZ 色彩空间的一个重要特征是色度图(Chromaticity Diagram),它展示了颜色的色度(Chromaticity)分布。计算公式如下:
,
色度图中的每一个点代表一种颜色的色度,不同波长的光谱颜色在图中形成一个马蹄形曲线(Spectral Locus)(见图1),这个曲线包含了所有可见光颜色。
2. sRGB (standard Red Green Blue) color space
sRGB(standard Red Green Blue)是由惠普和微软在1996年提出的一种标准色彩空间,目的是为计算机显示器、打印机和互联网使用提供一个一致的色彩再现标准。现已成为Web和电子设备中的默认色彩空间。
- sRGB 是基于CIE 1931 XYZ色彩空间,并且定义了其红、绿、蓝三基色的色度值和白点(通常为D65)。
- sRGB 使用非线性伽马校正函数,以更好地匹配人类视觉系统对亮度的非线性感知。这种伽马校正通常约为2.2。
- 色度坐标:
- 红色原色:x=0.6400,y=0.3300
- 绿色原色:x=0.3000,y=0.6000
- 蓝色原色:x=0.1500,y=0.0600
- 白点(D65):x=0.3127,y=0.3290
3. NTSC(National Television System Committee) color space
美国国家电视系统委员会定义的一种色彩空间标准,主要用于模拟电视广播。NTSC 色彩空间在1953年首次引入,用于美国和其他一些国家的电视系统。
NTSC 色彩空间也是基于CIE 1931 XYZ色彩空间,并且定义了其红、绿、蓝三基色的色度值。
- 红色原色:x=0.67,y=0.33
- 绿色原色:x=0.21,y=0.71
- 蓝色原色:x=0.14,y=0.08
- 白点(CIE 标准光源 C):x=0.310,y=0.316
4. YIQ color space
YIQ颜色空间是NTSC(国家电视标准委员会)为彩色电视广播系统定义的颜色空间。它由三个分量组成:
- Y(Luminance,亮度):表示图像的亮度信息
- I(In-phase,色度):表示图像中的橙色-青色信息。
- Q(Quadrature,色度):表示图像中的紫色-绿色信息。
sRGB to YIQ:
5. YUV color space
YUV颜色空间广泛应用于PAL(相位交替线路)、SECAM(顺序颜色与记忆)、和数字视频(如JPEG、MPEG)等标准。
- Y(Luminance,亮度):表示图像的亮度信息。
- U(Chrominance,色度):表示图像中的蓝色-亮度差。
- V(Chrominance,色度):表示图像中的红色-亮度差。
sRGB to YUV:
YIQ和YUV色彩空间通过将亮度和色度分量分离,提高了视频信号的传输和压缩效率。
Gamma encoding & decoding
处理图像和视频信号中亮度的一种非线性操作。
Gamma 编码是将图像的线性光强度(luminance)转换为非线性光强度的过程。
- 匹配人类视觉系统:人类视觉系统对亮度的感知是非线性的,更接近对数关系。Gamma 编码可以提高暗部细节的表现力,减少高亮部分的细节损失。
- 提高效率:在图像压缩和传输中,Gamma 编码可以使得信号分布更加均匀,提升压缩效率。
, gamma值通常在2.2到2.4之间。
其中,L是输入信号(线性光强度),V是编码后的输出信号。
Gamma 解码是将经过Gamma 编码的非线性光强度信号转换回线性光强度的过程,以便于显示设备能正确再现图像的原始亮度。确保多显示设备的显示一致性。
色彩转换矩阵(Color Space Transformation Matrix)
每个色彩空间都有特定的原色(红、绿、蓝)和白点,通过这些定义,可以计算出3x3转换矩阵。转换矩阵将特定色彩空间的RGB值映射到CIE XYZ色彩空间中的XYZ值。确保不同色彩空间之间的颜色一致性。
sRGB back to CIE XYZ:
NTSC (1987) back to CIE XYZ:
注意!上述RGB为linear RGB,即未经过Gamma encoding的RGB值。
Camera Imaging Pipeline
相机拍摄的RGB图像在它们各自的raw-RGB color space,我们需要一系列处理让它成为sRGB图像。
White-balancing
校正图像中的颜色,使得图像在不同光源下都能正确再现颜色。核心思想是将图像中的白色区域调整到中性白色,这样其他颜色也能得到准确的表现。
在理想情况下,白色物体在图像中应该显示为中性白色(achromatic line,即红、绿、蓝三通道值相等)。然而,由于不同光源(如日光、钨丝灯、荧光灯等)具有不同的光谱分布,同一个白色物体在不同光源下会呈现出不同的颜色偏移(如偏蓝、偏黄等)。
白平衡通过对图像中的RGB通道进行比例调整,来补偿光源的颜色偏移,从而使图像中的白色物体恢复到中性白色。这一调整过程涉及计算每个通道的增益(gain),使得白色物体在图像中的红、绿、蓝值达到平衡。
- 设置参考白点,在参考白点下,红、绿、蓝通道的理想值为Rr,Gr,Br
- 计算各通道增益:设目前各通道实际值为R,G,B,则
,
,
- 平衡:
,
,
颜色校正矩阵(Color Correction Matrix)
在不同设备或不同光照条件下,确保颜色的准确再现。经过白平衡的Raw-RGB图像通过颜色校正矩阵转换为CIE XYZ色彩空间中的颜色值。
颜色渲染(Color Rendering)
将线性sRGB颜色值进行颜色渲染,以适应显示设备或打印设备的色域。
A. Chakrabarti, Y. Xiong, B. Sun, T. Darrell, D. Scharstein, T. Zickler, and K. Saenko. Modeling radiometric uncertainty for vision with tone-mapped color images. TPAMI, 36(11):2185–2198, 2014.
S. J. Kim, H. T. Lin, Z. Lu, S. S ̈ usstrunk, S. Lin, and M. S. Brown. A new in-camera imaging model for color computer vision and its application. TPAMI, 34(12):2289–2302, Dec 2012.
H. Lin, S. J. Kim, S. S ̈ usstrunk, and M. S. Brown. Revisiting radiometric calibration for color computer vision. In ICCV, pages 129–136, 2011.
Y. Xiong, K. Saenko, T. Darrell, and T. Zickler. From pixels to physics: Probabilistic color de-rendering. In CVPR, pages 358–365, 2012.
色调映射(Tone Mapping)
调整图像的对比度和亮度,以适应人类视觉系统的非线性响应。
linear-sRGB to sRGB可以使用上面提到的Gamma encoding,不过,大多数相机应用自己的tone mapping。
经过上述一系列过程,相机的raw-RGB图像转为sRGB。若直接将sRGB转为CIE XYZ中的Y值(luminance),公式如下:
与实际场景中的luminance一定会发生巨大偏差!
目前常有的偏差
1. 对nonlinear RGB images,直接计算average RGB values。一定会与实际的光线产生巨大偏差
2. YIQ&YUV:
YIQ与YUV都来源于NTSC 1987 color space,并且由经过gamma encoding之后的RGB值定义而来。因此它们之中的Y与表示luminance的Y有本质不同。用‘luma’来定义它们的Y。图像处理与图形界总是将luma与luminance混淆。
即未经过gamma decoding step,计算的Y只能称之为luma,而非luminance。
3. Equation of NTSC color space:
若直接根据NTSC转为CIE XYZ中的Y值:
只有图像是在NTSC颜色空间中捕获的,并且应用了适当的gamma decoding,那么它才是有效的转换。直接用sRGB图像转换是错误的!
有许多著名的方法都使用了这种转换,包括Matlab的rgb2gray函数和OpenCV的cv2.cvtColor函数。
归纳上节,我们可以发现直接将RGB转为自然场景中准确的luminance是十分困难的,概括为3点:
1. incorrect white-balance;
2. incorrect gamma/tone-curve correction;
3. incorrect equations