色域映射
- Color
- 三十分钟系列
色域映射
无处不在的溢色(Out of Gamut)
使用色彩管理的时候,最经常发生的一个问题就是溢色。OOG
全称是 Out of Gamut
,也就是某些色彩落在了某个色彩空间外。
我们来看上面的示例。图中列举了一些常见的色彩空间的色度范围(暂时不考虑亮度),我们有三个颜色A、B、C。
这三种颜色对于不同的色彩空间来说可能是:
颜色/色彩空间 | Rec 709 | DCI P3 | Rec 2020 |
---|---|---|---|
A | 色域内 | 色域内 | 色域内 |
B | 色域外 | 色域外 | 色域内 |
C | 色域外 | 色域外 | 色域外 |
如果一个色彩在某个色域内,那么理论上该色域的显示设备就可以“准确” 的还原出这个颜色。
相反,如果一个颜色在某个色域外,那么你应该永远无法看到这个颜色!
举个最简单的例子,比方说一个色彩的亮度是1.4
,但是你的显示器最高亮度只有1.0
,那么你永远不可能在这个显示器看到“准确” 的亮度。
你可能会说:“我虽然遇到过溢色,但是情况非常少呢!”
有的溢色已经造成了一些不正常,所以会显得非常明显。但是很多溢色其实“溢出”的很少。你可能就与正常的颜色混在一起过去了。这里给出两个图片,不知道你是不是可以发现是哪里溢色了?
很明显的溢色
不太明显的溢色
色域映射(Gamut Mapping)
色域的物理极限无法超越,但是我们依旧需要在不同的介质上观看,如何在不同的显示介质上得到一个相似的“观感”呢?
这时候就要用到色域映射了。
说到映射,就是把一个集合通过“某种方法”,变成另一个集合。大家常说的LUT
就是一种“映射”。
那么色域映射,就是通过“某种方法”,把一种颜色变成另一种颜色,并且让这个颜色可以在某个色彩空间内。
听起来很简单,但是不幸的是,目前并没有一种“万灵药”的方法可以完美的解决这个问题。
因为评价一个色域映射算法的好坏,会涉及到客观 + 主观 的结合。外加还有一大堆人类感知的特性……
总之,如果你说某个映射算法的客观色度坐标差异误差最小,那这个方法可不一定是人眼看起来最好的!
色域映射算法(Gamut Mapping Algorithm)
这里抛开色域映射算法(简称GMA
)的一大堆理论 + 评价方法(写了怕你们取关),直接来看看目前调色软件中的各种色域映射工具。
Baselight 的 Compress Gamut
Baselight
提供的Compress Gamut
是一个非常好用的工具。
根据官方手册我们可以看出这个工具的算法原理:
算法原理
如果一个像素中的某个通道数值小于三个通道中最大数值的某个百分比,那么就认为需要进行映射。
这个工具的优点:
- 计算速度快
- 直接提供三色选择,符合调色的习惯
映射前后效果
映射前图像
映射后图像
映射前矢量示波器
映射后矢量示波器
Davinci 的 Gamut Mapping
Davinci
中的Gamut Mapping
工具也是可以对色域进行映射。
如果你看过了 **《Color Gamut Mapping》**这本书,你就应该可以猜出他的算法。
在给定的hue
平面内,沿着亮度相同的方向进行饱和度映射。
映射的算法采用了soft clip
算法。
这个工具的一些优点:
- 计算速度快
- 可以在同一个工具内,完成亮度映射和色度映射
映射前后效果
映射前图像
映射后图像
映射前矢量示波器
映射后矢量示波器
王婆卖瓜的色域映射算法
我心目中比较完美的色域映射工具应该具备以下的特点:
- 映射的时候,保持原有色相不变(
Hue
) - 映射的结果可以得到很好的人眼主观感受
- 对于色度映射的时候,应该尽可能少的影响亮度(人眼的亮度感知,而不是数值)
- 可以提供分色功能(例如直接提供六色色相控制,或者是可以单独设置)
- 对于色彩的控制分离度很高(我想要控制红色,就不会影响到橘色或者是品色)
- 支持
HDR
如果你仔细的对比了上面的图像,可以发现一些端倪:
Baselight
和Davinci
将本应该是青蓝色的灯光都映射成为了类似于品色的感觉。- 在色域压缩的过程中,色度并不是完美的朝向中心收缩(会导致
hue
的改变) - 色度分离性不够好(例如,调整青色会影响到其他某些相邻的色相)
我们的色域映射算法在Jzazbz 这个uniform
色彩空间中运算,可以实现上面提到的各种特性。
暂时不考虑对于亮度的映射,专注对于色度的映射(未来应该会提供亮度映射的功能)
映射前后效果
映射前图像
映射后图像
映射前矢量示波器
映射后矢量示波器
目前提供了Nuke
版本的工具,
核心界面功能如下。
如果比较难以理解,那么可以参看下面这个矢量示波器,帮助理解各个参数:
- limit point : 表示色度如果小于某个数值,那么保持原有色彩不变
- max_src_sat : 原始图像中的最大色度(默认为2,一般情况下不需要调整)
- hue_width : 在hue_angle 参数的基础上,控制影响的色度范围(默认为0.65(弧度制),可以认为在hue 圆环中影响大约75度的范围)
- hue_fade : 影响范围的柔化边缘范围(默认0.1,表示整个影响范围内的左右各10%)
- hue_angle : 需要影响色相的角度(这里使用的弧度制 [-3.14, +3.14],请根据图像自行调节)
- max_dst_sat : 映射后色度的数值
相关信息
输入的色彩空间需要是XYZ-D60
,大家可以自行转换。
相关文件
参考算法论文以及 Nuke 插件, Andy 铁粉儿专供(购买过合集的可直接在已购中下载,附件已经更新)
合集指路: