2.17. 详细色彩空间描述¶
2.17.1. 色彩空间 SMPTE 170M (V4L2_COLORSPACE_SMPTE170M)¶
SMPTE 170M 标准定义了 NTSC、PAL 以及一般 SDTV 所使用的色彩空间。默认的传输函数是 V4L2_XFER_FUNC_709
。默认的 Y'CbCr 编码是 V4L2_YCBCR_ENC_601
。默认的 Y'CbCr 量化是有限范围。原色和白参考的色度如下:
颜色 |
x |
y |
---|---|---|
红 |
0.630 |
0.340 |
绿 |
0.310 |
0.595 |
蓝 |
0.155 |
0.070 |
白参考 (D65) |
0.3127 |
0.3290 |
红、绿、蓝的色度也常被称为 SMPTE C 集,因此这个色彩空间有时也称为 SMPTE C。
SMPTE 170M 定义的传输函数与 Rec. 709 中定义的传输函数相同。
逆传输函数
亮度 (Y') 和色差 (Cb 和 Cr) 通过以下 V4L2_YCBCR_ENC_601
编码获得:
Y' 被限制在 [0…1] 范围内,Cb 和 Cr 被限制在 [-0.5…0.5] 范围内。这种 Y'CbCr 转换与 ITU BT.601 标准中定义的转换相同,并且此色彩空间有时也称为 BT.601,尽管 BT.601 未提及任何原色。
默认的量化是有限范围,但全范围也是可能的,尽管很少见。
2.17.2. 色彩空间 Rec. 709 (V4L2_COLORSPACE_REC709)¶
ITU BT.709 标准定义了 HDTV 一般使用的色彩空间。默认的传输函数是 V4L2_XFER_FUNC_709
。默认的 Y'CbCr 编码是 V4L2_YCBCR_ENC_709
。默认的 Y'CbCr 量化是有限范围。原色和白参考的色度如下:
颜色 |
x |
y |
---|---|---|
红 |
0.640 |
0.330 |
绿 |
0.300 |
0.600 |
蓝 |
0.150 |
0.060 |
白参考 (D65) |
0.3127 |
0.3290 |
此标准的完整名称是 Rec. ITU-R BT.709-5。
传输函数。通常 L 在 [0…1] 范围内,但对于扩展色域 xvYCC 编码,允许超出该范围的值。
逆传输函数
亮度 (Y') 和色差 (Cb 和 Cr) 通过以下 V4L2_YCBCR_ENC_709
编码获得:
Y' 被限制在 [0…1] 范围内,Cb 和 Cr 被限制在 [-0.5…0.5] 范围内。
默认的量化是有限范围,但全范围也是可能的,尽管很少见。
上面描述的 V4L2_YCBCR_ENC_709
编码是此色彩空间的默认设置,但可以使用 V4L2_YCBCR_ENC_601
进行覆盖,在这种情况下,将使用 BT.601 Y'CbCr 编码。
此色彩空间还支持两种额外的扩展色域 Y'CbCr 编码:
xvYCC 709 编码(V4L2_YCBCR_ENC_XV709
,xvYCC)与 Rec. 709 编码类似,但它允许 R'、G' 和 B' 的值超出 [0…1] 范围。生成的 Y'、Cb 和 Cr 值根据有限范围公式进行缩放和偏移:
xvYCC 601 编码(V4L2_YCBCR_ENC_XV601
,xvYCC)与 BT.601 编码类似,但它允许 R'、G' 和 B' 的值超出 [0…1] 范围。生成的 Y'、Cb 和 Cr 值根据有限范围公式进行缩放和偏移:
Y' 被限制在 [0…1] 范围内,Cb 和 Cr 被限制在 [-0.5…0.5] 范围内,并进行量化,不进行额外的缩放或偏移。通过选择 V4L2_YCBCR_ENC_XV709
或 V4L2_YCBCR_ENC_XV601
可以使用非标准的 xvYCC 709 或 xvYCC 601 编码。从 xvYCC 公式可以看出,这些编码始终使用有限范围量化,没有全范围变体。这些扩展色域编码的全部意义在于,超出有限范围的值仍然有效,尽管它们映射到超出 [0…1] 范围的 R'、G' 和 B' 值,因此超出了 Rec. 709 色彩空间的色域。
2.17.3. 色彩空间 sRGB (V4L2_COLORSPACE_SRGB)¶
sRGB 标准定义了大多数网络摄像头和计算机图形使用的色彩空间。默认的传输函数是 V4L2_XFER_FUNC_SRGB
。默认的 Y'CbCr 编码是 V4L2_YCBCR_ENC_601
。默认的 Y'CbCr 量化是有限范围。
请注意,sYCC 标准规定了全范围量化,但目前内核支持的所有捕获硬件都将 R'G'B' 转换为有限范围的 Y'CbCr。因此,将全范围设为默认值会破坏应用程序解释量化范围的方式。
原色和白参考的色度如下:
颜色 |
x |
y |
---|---|---|
红 |
0.640 |
0.330 |
绿 |
0.300 |
0.600 |
蓝 |
0.150 |
0.060 |
白参考 (D65) |
0.3127 |
0.3290 |
这些色度与 Rec. 709 色彩空间相同。
传输函数。请注意,L 的负值仅用于 Y'CbCr 转换。
逆传输函数
亮度 (Y') 和色差 (Cb 和 Cr) 通过 sYCC 定义的以下 V4L2_YCBCR_ENC_601
编码获得:
Y' 被限制在 [0…1] 范围内,Cb 和 Cr 被限制在 [-0.5…0.5] 范围内。此转换与 SMPTE 170M/BT.601 中定义的转换相同。Y'CbCr 量化是有限范围。
2.17.4. 色彩空间 opRGB (V4L2_COLORSPACE_OPRGB)¶
opRGB 标准定义了使用 opRGB 色彩空间的计算机图形所使用的色彩空间。默认的传输函数是 V4L2_XFER_FUNC_OPRGB
。默认的 Y'CbCr 编码是 V4L2_YCBCR_ENC_601
。默认的 Y'CbCr 量化是有限范围。
请注意,opRGB 标准规定了全范围量化,但目前内核支持的所有捕获硬件都将 R'G'B' 转换为有限范围的 Y'CbCr。因此,将全范围设为默认值会破坏应用程序解释量化范围的方式。
原色和白参考的色度如下:
颜色 |
x |
y |
---|---|---|
红 |
0.6400 |
0.3300 |
绿 |
0.2100 |
0.7100 |
蓝 |
0.1500 |
0.0600 |
白参考 (D65) |
0.3127 |
0.3290 |
传输函数
逆传输函数
亮度 (Y') 和色差 (Cb 和 Cr) 通过以下 V4L2_YCBCR_ENC_601
编码获得:
Y' 被限制在 [0…1] 范围内,Cb 和 Cr 被限制在 [-0.5…0.5] 范围内。此转换与 SMPTE 170M/BT.601 中定义的转换相同。Y'CbCr 量化是有限范围。
2.17.5. 色彩空间 BT.2020 (V4L2_COLORSPACE_BT2020)¶
ITU BT.2020 标准定义了超高清电视(UHDTV)使用的色彩空间。默认的传输函数是 V4L2_XFER_FUNC_709
。默认的 Y'CbCr 编码是 V4L2_YCBCR_ENC_BT2020
。默认的 Y'CbCr 量化是有限范围。原色和白参考的色度如下:
颜色 |
x |
y |
---|---|---|
红 |
0.708 |
0.292 |
绿 |
0.170 |
0.797 |
蓝 |
0.131 |
0.046 |
白参考 (D65) |
0.3127 |
0.3290 |
传输函数(与 Rec. 709 相同)
逆传输函数
请注意,尽管 ITU BT.2020 标准将 Rec. 709 定义为默认传输函数,但实际上此色彩空间通常与传输函数 SMPTE 2084 (V4L2_XFER_FUNC_SMPTE2084) 结合使用。特别是超高清蓝光光盘使用这种组合。
亮度 (Y') 和色差 (Cb 和 Cr) 通过以下 V4L2_YCBCR_ENC_BT2020
编码获得:
Y' 被限制在 [0…1] 范围内,Cb 和 Cr 被限制在 [-0.5…0.5] 范围内。Y'CbCr 量化是有限范围。
还有一种替代的恒定亮度 R'G'B' 到 Yc'CbcCrc(V4L2_YCBCR_ENC_BT2020_CONST_LUM
)编码:
亮度
Yc' 被限制在 [0…1] 范围内,Cbc 和 Crc 被限制在 [-0.5…0.5] 范围内。Yc'CbcCrc 量化是有限范围。
2.17.6. 色彩空间 DCI-P3 (V4L2_COLORSPACE_DCI_P3)¶
SMPTE RP 431-2 标准定义了使用 DCI-P3 色彩空间的电影放映机所使用的色彩空间。默认的传输函数是 V4L2_XFER_FUNC_DCI_P3
。默认的 Y'CbCr 编码是 V4L2_YCBCR_ENC_709
。默认的 Y'CbCr 量化是有限范围。
注意
请注意,此色彩空间标准未指定 Y'CbCr 编码,因为它不旨在编码为 Y'CbCr。因此,选择此默认 Y'CbCr 编码是因为它是 HDTV 编码。
原色和白参考的色度如下:
颜色 |
x |
y |
---|---|---|
红 |
0.6800 |
0.3200 |
绿 |
0.2650 |
0.6900 |
蓝 |
0.1500 |
0.0600 |
白参考 |
0.3140 |
0.3510 |
传输函数
逆传输函数
未指定 Y'CbCr 编码。V4L2 默认为 Rec. 709。
2.17.7. 色彩空间 SMPTE 240M (V4L2_COLORSPACE_SMPTE240M)¶
SMPTE 240M 标准是 HDTV 早期(1988-1998 年)使用的一个临时标准。它已被 Rec. 709 取代。默认的传输函数是 V4L2_XFER_FUNC_SMPTE240M
。默认的 Y'CbCr 编码是 V4L2_YCBCR_ENC_SMPTE240M
。默认的 Y'CbCr 量化是有限范围。原色和白参考的色度如下:
颜色 |
x |
y |
---|---|---|
红 |
0.630 |
0.340 |
绿 |
0.310 |
0.595 |
蓝 |
0.155 |
0.070 |
白参考 (D65) |
0.3127 |
0.3290 |
这些色度与 SMPTE 170M 色彩空间相同。
传输函数
逆传输函数
亮度 (Y') 和色差 (Cb 和 Cr) 通过以下 V4L2_YCBCR_ENC_SMPTE240M
编码获得:
Y' 被限制在 [0…1] 范围内,Cb 和 Cr 被限制在 [-0.5…0.5] 范围内。Y'CbCr 量化是有限范围。
2.17.8. 色彩空间 NTSC 1953 (V4L2_COLORSPACE_470_SYSTEM_M)¶
此标准定义了 NTSC 在 1953 年使用的色彩空间。实际上,此色彩空间已过时,应改用 SMPTE 170M。默认的传输函数是 V4L2_XFER_FUNC_709
。默认的 Y'CbCr 编码是 V4L2_YCBCR_ENC_601
。默认的 Y'CbCr 量化是有限范围。原色和白参考的色度如下:
颜色 |
x |
y |
---|---|---|
红 |
0.67 |
0.33 |
绿 |
0.21 |
0.71 |
蓝 |
0.14 |
0.08 |
白参考 (C) |
0.310 |
0.316 |
注意
此色彩空间使用 C 光源而不是 D65 作为白参考。要将此色彩空间中的图像正确转换为使用 D65 的图像,需要应用色度适应算法,例如 Bradford 方法。
NTSC 1953 的传输函数从未被正确定义。文献中推荐使用 Rec. 709 传输函数:
逆传输函数
亮度 (Y') 和色差 (Cb 和 Cr) 通过以下 V4L2_YCBCR_ENC_601
编码获得:
Y' 被限制在 [0…1] 范围内,Cb 和 Cr 被限制在 [-0.5…0.5] 范围内。Y'CbCr 量化是有限范围。此转换与 SMPTE 170M/BT.601 中定义的转换相同。
2.17.9. 色彩空间 EBU Tech. 3213 (V4L2_COLORSPACE_470_SYSTEM_BG)¶
EBU Tech 3213 标准定义了 1975 年 PAL/SECAM 所使用的色彩空间。请注意,HDMI 接口不支持此色彩空间。相反,EBU Tech 3321 建议 HDMI 改用 Rec. 709。默认的传输函数是 V4L2_XFER_FUNC_709
。默认的 Y'CbCr 编码是 V4L2_YCBCR_ENC_601
。默认的 Y'CbCr 量化是有限范围。原色和白参考的色度如下:
颜色 |
x |
y |
---|---|---|
红 |
0.64 |
0.33 |
绿 |
0.29 |
0.60 |
蓝 |
0.15 |
0.06 |
白参考 (D65) |
0.3127 |
0.3290 |
此色彩空间的传输函数从未被正确定义。文献中推荐使用 Rec. 709 传输函数:
逆传输函数
亮度 (Y') 和色差 (Cb 和 Cr) 通过以下 V4L2_YCBCR_ENC_601
编码获得:
Y' 被限制在 [0…1] 范围内,Cb 和 Cr 被限制在 [-0.5…0.5] 范围内。Y'CbCr 量化是有限范围。此转换与 SMPTE 170M/BT.601 中定义的转换相同。
2.17.10. 色彩空间 JPEG (V4L2_COLORSPACE_JPEG)¶
此色彩空间定义了大多数 (Motion-)JPEG 格式使用的色彩空间。原色和白参考的色度与 sRGB 相同。使用的传输函数是 V4L2_XFER_FUNC_SRGB
。Y'CbCr 编码是 V4L2_YCBCR_ENC_601
,采用全范围量化,其中 Y' 被缩放到 [0…255],Cb/Cr 被缩放到 [-128…128],然后裁剪到 [-128…127]。
注意
JPEG 标准实际上并不存储色彩空间信息。因此,如果使用 sRGB 以外的色彩空间,驱动程序将必须显式设置该信息。实际上,V4L2_COLORSPACE_JPEG
可以被认为是 V4L2_COLORSPACE_SRGB
、V4L2_XFER_FUNC_SRGB
、V4L2_YCBCR_ENC_601
和 V4L2_QUANTIZATION_FULL_RANGE
的缩写。
2.18. 详细传输函数描述¶
2.18.1. 传输函数 SMPTE 2084 (V4L2_XFER_FUNC_SMPTE2084)¶
SMPTE ST 2084 标准定义了高动态范围内容使用的传输函数。
- 常量
m1 = (2610 / 4096) / 4
m2 = (2523 / 4096) * 128
c1 = 3424 / 4096
c2 = (2413 / 4096) * 32
c3 = (2392 / 4096) * 32
- 传输函数
L' = ((c1 + c2 * Lm1) / (1 + c3 * Lm1))m2
- 逆传输函数
L = (max(L'1/m2 - c1, 0) / (c2 - c3 * L'1/m2))1/m1
在此传输函数与非 HDR 传输函数之间转换时请注意:HDR 内容的线性 RGB 值 [0…1] 映射到 0 到 10000 cd/m2 的亮度范围,而非 HDR(即标准动态范围或 SDR)的线性 RGB 值映射到 0 到 100 cd/m2 的亮度范围。
要从 SDR 转换为 HDR,您必须首先将 L 除以 100。要反向转换,您必须将 L 乘以 100。当然,这将所有超过 100 cd/m2 的亮度值限制为 100 cd/m2。
还有更好的方法,例如,有关此内容的更多深入信息,请参阅 colimg。