工作空间

色彩流程

相机或扫描仪的色彩特性文件用来转换输入图像,显示器或打印机的色彩特性文件用来转换输出图像,但它们最终都是为了跟编辑图片时用的工作色彩空间对接。色彩管理里一个重要的决定就是选一个合适的工作色彩空间。

但为什么搞得这么复杂呢?就不能直接在相机色彩特性文件描述的色彩空间里编辑图片吗?毕竟相机色彩特性文件应该最贴合你相机记录的颜色啊,也最贴合你的 RAW 处理流程,对吧?工作色彩空间,比如 sRGB 或 Adobe RGB,是为了让编辑过程更顺手。比如,编辑图片时,如果某个像素的 RGB 值相等(R=G=B),它在屏幕上应该看起来是中性的灰色、黑色或白色。但很多相机配置文件并不满足这个“中性”条件。

还有一个很重要的理由,听了你就不会想在相机色彩空间里编辑图片了。相机色彩特性文件的文件大小通常在 250KB 到 500KB 甚至更大。为了让 RAW 处理器输出的 RGB 值颜色表现得准确,相机色彩特性文件里塞满了关于原始场景中不同颜色和色调区域需要调整的信息。这些色彩特性文件对目标颜色很精确,但数学上并不“平滑”。相比之下,工作空间的色彩特性文件超级小(只有几百字节,而不是几百 KB),因为它们用平滑、连续的数学函数(比如伽马校正的函数)来描述色域。工作空间色彩特性文件不用考虑现实世界传感器的那堆“乱七八糟”的特性,所以编辑图片时的数学运算会更快、更精确。如果你在相机色彩空间里编辑,效率和精度都会打折扣。

sRGB 可能是最常见的工作色彩空间,同时也常用于输出,比如给网页或显示器显示的图片。如果你的新显示器色域比 sRGB 大,你可能想用一个能充分发挥你那台校准好的高端显示器的色彩特性文件。不过,分享图片给朋友前,记得先把图片转成 sRGB。很多家用或批量生产的商业打印机也默认图片是 sRGB 格式。如果图片没嵌入色彩特性文件,大多数程序也会假设它是 sRGB 来解读 RGB 值。所以,如果你不想搞色彩管理,简单点——全用 sRGB 就行。

要注意,色彩管理不只和拍 RAW 有关。不管你是从 RAW 文件开始,自己去马赛克转成 TIFF,还是直接用相机生成的 JPEG 或 TIFF,色彩管理都会影响图像处理流程的每个阶段。

选择工作色彩空间

在 digiKam 里该选哪个工作色彩空间呢?像 sRGB 或 Adobe RGB 这样的工作色彩空间,能让编辑图片时效果更好。比如,RGB 值相等的像素应该看起来是中性的(无色)。用色域大的工作色彩空间可能导致色调分离(posterization),而用色域小的可能会导致颜色裁切(clipping)。这在图像编辑器里是个需要权衡的问题。

如下图所示,大多数工作色彩空间的特性文件都部分基于 CIE 色度图 (1) ,这个图展示了普通人眼能看到的所有颜色。色度图边缘标注的数值,从蓝色到绿色再到红色,代表纯光谱颜色的波长,单位是纳米(nanometers)。

  • The Gamut (2) triangle defines the range of RGB colors that the profile spans. In other words, the color space can only represent colors lying within this triangle. RGB primaries define the corners of the triangle. The Red point is on the bottom right corner, Green is on the top, Blue is on the left bottom.

  • The White point (3) defines the neutral point in the gamut. The total dynamic range of the profile is measured relative to this neutral point.

  • The Gamma defines the usually nonlinear transfer function that is applied to the data (not displayed in the gamut).

digiKam 中显示的 CIE 色度图的色彩特性文件详情

使用不同的 RGB 原色点会导致色域大小不同的工作色彩空间,具体影响我们稍后会聊。不同伽马值的实际影响也会在后面讨论。不过,选择不同工作色彩空间白点的实际影响,超出了这份手册的范围。

想在 digiKam 里设置工作色彩空间,点开 设置 ‣ 配置 digiKam… ‣ 色彩管理页面 ‣ 行为选项卡 ,从菜单里选你想要的工作色彩空间。更多详情可以看看手册的 色彩管理设置 部分。

digiKam 中设置工作色彩空间的对话框

一旦设好了工作色彩空间,你还可以让 digiKam 自动把图像转到这个空间,比如当图像的色彩特性文件跟工作色彩空间不匹配,或者压根没指定特性文件时。

digiKam 可设置为色彩空间不匹配时自动转换到工作色彩空间

你还可以在图像编辑器里直接切换色彩空间。点右边侧栏的工具选项卡,找到色彩空间转换器就能切换到其他色彩特性文件。

digiKam 图像编辑器的色彩空间转换器可切换到其他色彩特性文件

色阶与色域大小

一张数字图像里有多少个离散的色阶?在一张 8 位图像中,从纯黑到纯白有 256 个色阶。在 16 位图像中,理论上有 65,536 个色阶。但别忘了,这些 16 位数值其实是从相机模数转换器生成的 10 位(1,024 个色阶)、12 位(4,096 个色阶)或 14 位(16,384 个色阶)开始的——多出来的位数最初只是“零填充”。这意味着可用色调并不是从亮到暗均匀分布的。线性伽马模式(相机传感器记录的方式)下,高光部分的色阶远多于阴影部分。所以,拍 RAW 的经典建议是:尽量向右曝光,但别让高光过曝。

选择工作色彩空间的一个重要考虑是,有些色彩空间比其他的大,覆盖了更多可见光谱(甚至可能包含一些“虚构颜色”——数学上存在但现实中没有的颜色)。这些大色域空间的好处是能保留相机捕捉、并通过 Lcms 从相机色彩特性文件转换到超大配置文件连接空间的所有颜色。

从左到右分别是:digiKam 中显示的 sRGB、AdobeRGB、WideGamutRGB 和 ProPhotoRGB 色彩特性文件

但保留所有可能的颜色是有代价的。实际上,任何一张数字图像(颜色鲜艳的黄水仙是个常见例外)可能只包含相机能捕捉的所有可见颜色中的一小部分。这小部分颜色完全可以被较小的色彩空间容纳。使用超大色域的工作色彩空间,意味着编辑图片(比如调整曲线、饱和度等)时,可能会产生你的输出设备(打印机、显示器)根本显示不下的颜色。

所以,从工作色彩空间转换到输出设备空间(比如打印机)时,编辑后的图片色域(可能还包含虚构颜色)得重新映射到打印机的较小色域。这映射过程轻则导致颜色不准,重则导致色调分离(posterization,也叫跳阶)——比如蓝天上本该平滑的颜色过渡出现明显间隙,或者裁切(clipping)——你精心调整的红色渐变,可能在转到打印机色彩空间后变成一块单调的暗红色。

digiKam 色彩特性文件属性对话框显示 BestRGB 信息

换句话说,处理不当的大色域工作色彩空间,输出时可能会丢失信息。小色域工作色彩空间则可能在输入时裁切色彩信息。这里有些老生常谈的建议:

  • 如果图片是给网页用的,选 sRGB。

  • 为了编辑图片时获得最高精度(充分利用你选定的 色深 ,同时尽量减少转换到输出空间时的色调分离或裁切风险),选一个刚好能包含你拍摄场景所有颜色的最小工作色彩空间,再留点余地给你编辑时有意添加的新颜色。

  • 如果用 8 位色深的图像,选较小的色彩空间,而不是大的。大的色域空间就得用 16 位图像来处理。

  • 为了存档,把 RAW 文件转成 16 位 TIFF,用大色域工作色彩空间,避免丢失颜色信息。然后把这个存档 TIFF 转到你选的工作色彩空间(当然,另存为新文件名)。详情可以看这里。

digiKam 批处理管理器支持批量转换色彩空间

再现意图

Rendering intent refers to the way color gamuts are handled when the intended target color space (for example, the monitor or the printer) cannot handle the full gamut of the source color space (for example the working space).

常用的再现意图有以下四种:

  • Perceptual, also called Image or Maintain Full Gamut. This is generally recommended for photographic images. The color gamut is expanded or compressed when moving between color spaces to maintain consistent overall appearance. Low saturation colors are changed very little. More saturated colors within the gamuts of both spaces may be altered to differentiate them from saturated colors outside the smaller gamut space. Perceptual rendering applies the same gamut compression to all images, even when the image contains no significant out-of-gamut colors.

  • Relative Colorimetric, also called Proof or Preserve Identical Color and White Point. Reproduces in-gamut colors exactly and clips out-of-gamut colors to the nearest reproducible hue.

  • Absolute Colorimetric, also called Match or Preserve Identical Colors. Reproduces in-gamut colors exactly and clips out-of-gamut colors to the nearest reproducible hue, sacrificing saturation and possibly lightness. On tinted papers, whites may be darkened to keep the hue identical to the original. For example, cyan may be added to the white of a cream-colored paper, effectively darkening the image. Rarely of interest to photographers.

  • Saturation, also called Graphic or Preserve Saturation. Maps the saturated primary colors in the source to saturated primary colors in the destination, neglecting differences in hue, saturation, or lightness. For block graphics; rarely of interest to photographers.

Perceptual and Relative colorimetric rendering are probably the most useful conversion types for digital photography. Each places a different priority on how they render colors within the gamut mismatch region. Relative colorimetric maintains a near exact relationship between in gamut colors, even if this clips out of gamut colors. In contrast, Perceptual rendering tries to also preserve some relationship between out of gamut colors, even if this results in inaccuracies for in gamut colors.

Absolute is similar to relative colorimetric in that it preserves in gamut colors and clips those out of gamut, but they differ in how each handles the white point… Relative colorimetric skews the colors within gamut so that the white point of one space aligns with that of the other, while absolute colorimetric preserves colors exactly (without regard to changing white point). Saturation rendering intent tries to preserve saturated colors.

想在 digiKam 里设置渲染意图,点开 设置 ‣ 配置 digiKam… ‣ 色彩管理页面 ‣ 高级选项卡

digiKam 色彩管理设置对话框支持自定义再现意图

在显示器上显示内容时,通常选“相对比色”。我们建议别用“绝对比色”,除非你想要很奇怪的效果。

警告

再现意图在从一个色彩特性文件转换到另一个时是否可用,取决于目标特性文件。不是每个特性文件都支持所有再现意图。如果选了不支持的再现意图, Lcms 会悄悄用目标特性文件的默认再现意图,可能会出问题。

伽马特性

一个色彩特性文件中的伽马值,决定了在进行色彩转换时需要怎样的幂函数处理。也就是说,如果你要把图像从它原本内嵌的色彩特性文件(比如你的工作色彩空间,或相机的色彩特性文件)转换到另一个伽马值不同的色彩特性文件(比如你设定的工作空间,或者用于屏幕显示的显示器色彩特性文件,又或者是打印机的色彩空间),就需要按照这个伽马值进行相应的转换。 Libraw 这类工具在导出图像时会输出一个 16 位的线性伽马图像。这意味着图像文件中的直方图反映的是相机感光元件在曝光时实际捕捉到的光线强度(也就是每个像素实际记录到的光的量)。正因如此,如果你打算给 Libraw 的输出应用一个相机的色彩特性文件,那通常也需要配套地进行伽马转换,才能让图像呈现出你想要的工作空间效果(除非这个相机色彩特性文件本身就是线性伽马,即伽马值为 1)。

在实际应用中,工作色彩空间的伽马值也会对图像的编辑产生影响。一般来说,伽马值越高,图像在阴影部分(暗部)可用的色调层次就越丰富,但高光部分的层次就相对少一些;而伽马值越低,则相反。因此,改变图像的伽马值,其实就是在重新分配图像中明暗区域的色调细节。比如说,如果你处理的是一张整体偏暗的图(我们叫它低调图像),那你可能会更偏向选用一个伽马值较高的工作空间;反之,如果是一张大中午拍的雪地婚纱照这种明亮高调图像,那可能更适合伽马值低一些的工作空间,这样能保留更多高光部分的细节。

不过这些理论归理论,在实际图像编辑工作中,大多数人用的工作色彩空间的伽马值其实就两个主流:1.8 或 2.2。当然也有些例外,比如 sRGB 和 L*-RGB。

sRGB 的转换函数和老式 CRT 显示器比较接近(也就是说,其实跟现在的 LCD 显示器或图像编辑关系不大)。sRGB 的伽马不像其他常见的 RGB 色彩空间那样可以用一个单一的数值来表示。它的整体伽马大约是 2.2,但结构更复杂:在接近黑色的区域,它是线性的(伽马为 1.0),其他部分则是非线性的,涉及到 2.4 的幂指数,并且它的伽马值(也就是输出与输入对数之间的斜率)从 1.0 变化到大约 2.3。这种复杂的变化在图像处理时会带来一定的数学计算难度。

至于 L*-RGB,它采用的是和 CIELab 色彩空间一样的“感知均匀”转换函数。用这种方式存储颜色,即 使在精度有限的情况下 ,也能更好地 还原图像中的色调细节

除了伽马 1.8 和 2.2,工作空间中还有一种常见但比较特殊的伽马值,那就是线性伽马(伽马 = 1.0)。就像前面说的,如果你要求 Libraw 输出 16 位图像,它就是线性伽马的。线性伽马常用于 HDR(高动态范围)图像处理,也适合那些希望尽量减少伽马误差的人在处理普通图像时使用。

这里提到的 伽马误差 ,虽然不是本文重点,但简单说,就是在非线性的 RGB 色彩空间中错误地进行亮度或颜色的计算所导致的问题。比如,在这些非线性空间中混合颜色时,可能会出现原图中并没有的新颜色。当然,如果先把颜色值都转换回线性状态,再去混合,就可以避免这种问题。

不过话说回来,尽管线性伽马在理论和数学上确实有不少优势,但它在实际编辑中却并不太好用。因为在 8 位图像中,线性伽马下阴影部分的色调实在太少,几乎无法正常处理。即使在 16 位图像中,也还是不太够用。或许等将来我们的 HDR 相机能直接拍出 32 位图像文件,而我们每个人都在用超级计算机修图的那一天,线性伽马的工作空间才会真正普及吧。