WCS 游戏映射模型配置文件架构和算法

概述

此架构用于指定域地图模型配置文件(GMMP)的内容。 以下主题介绍了关联的基线算法。

基本 GMMP 架构包括通用标头信息、对首选 Gamut Map Model 插件和扩展标记的可选引用。

此外,GMMP 提供有关目标 Gamut 地图模型的显式信息,并在目标模型不可用时提供基线回退 Gamut 映射模型的策略。 架构可以包含专用扩展信息,但不包含其他多余的信息。

Gamut Map Model Profile Architecture

显示 Gamut 地图模型配置文件的关系图。

输出设备着色器空间的采样是通过循环访问从 0.0 到 1.0 的分量步骤,在每个步骤中累积每个着色器的所有组合,然后使用 DM::D eviceToColorimetricColors 方法,从设备着色器空间转换为颜色外观空间,后跟 CAM::ColorimetricToAppearanceColors 方法。 下面是一个示例,说明如何对 RGB 执行此作。

For (red= 0.0; red <= 1.0; red += redStep) {

     For (green = 0.0; green <= 1.0; green += greenStep) {

          For (blue = 0.0; blue <= 1.0; blue += blueStep) {

               Colorants[0] = red; colorants[1] = green; colorants[2] = blue;

               pRGBDM->DeviceToColorimetricColors(1, colorants, &amp;XYZ);

               pCAM->ColorimetricToAppearanceColors(1, &amp;XYZ, &amp;JCh);

          }

     }

}

域边界的生成

域边界有三个组成部分:初选、中性样本和 shell。 主要内容是通过获取设备初选并应用 DeviceToColorimetric/ColorimetricToAppearance 转换生成的。 中性样本是通过对中性区域中的设备着色空间进行采样并应用相同的转换生成的。 对于三个着色器设备(RGB 或 CMY),中性样本定义为具有所有着色器相等,例如 R == G == B。对于 CMYK,中性样本定义为具有 C == M == Y == 0。

影响用于创建域边界的数据的因素包括数据样本(仅基线设备)和查看条件。 用于对着色空间进行完整采样的步骤大小(对于监视器和合理的 shell)是一个内部常量,不适用于外部作。 更改查看条件会更改颜色外观模型(CAM)的行为,并更改域边界的形状,因此必须生成绑定到查看条件配置文件的域边界。 如果使用示例数据,就像基线打印机和捕获设备一样,示例将对引用域的形状产生很大影响,并影响模型本身的行为。

对于输入设备(如相机和扫描仪),使用不同的采样来生成参考外壳和合理的 shell。 引用 shell 是从用于初始化设备模型的度量生成的。 合理的 shell 生成类似于先前的输出设备的插图。 输入典型目标时,不会获得完全饱和值(其中 R、G 或 B = 255)。 必须使用设备模型推断出这些值。

GMMP 架构

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
  xmlns:gmm="http://schemas.microsoft.com/windows/2005/02/color/GamutMapModel"
  xmlns:wcs="http://schemas.microsoft.com/windows/2005/02/color/WcsCommonProfileTypes"
  targetNamespace="http://schemas.microsoft.com/windows/2005/02/color/GamutMapModel"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  elementFormDefault="qualified"
  attributeFormDefault="unqualified"
  blockDefault="#all"
  version="1.0">

  <xs:annotation>
    <xs:documentation>
      Gamut Map Model profile schema.
      Copyright (C) Microsoft. All rights reserved.
    </xs:documentation>
  </xs:annotation>

  <xs:import namespace="http://schemas.microsoft.com/windows/2005/02/color/WcsCommonProfileTypes" />

  <xs:element name="GamutMapModel">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ProfileName" type="wcs:MultiLocalizedTextType"/>
        <xs:element name="Description" type="wcs:MultiLocalizedTextType" minOccurs="0"/>
        <xs:element name="Author" type="wcs:MultiLocalizedTextType" minOccurs="0"/>
        <xs:element name="DefaultBaselineGamutMapModel">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="HPMinCD_Absolute"/>
              <xs:enumeration value="HPMinCD_Relative"/>
              <xs:enumeration value="SGCK"/>
              <xs:enumeration value="HueMap"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
        <xs:element name="PlugInGamutMapModel" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:any namespace="##other" processContents="skip"
                minOccurs="0" maxOccurs="unbounded" />
            </xs:sequence>
            <xs:attribute name="GUID" type="wcs:GUIDType" use="required"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="ID" type="xs:string" use="optional" />
    </xs:complexType>
  </xs:element>
</xs:schema>

GMMP 架构元素

GamutMapModel

此元素是以下子元素的序列:

  1. ProfileName 字符串,
  2. DefaultBaselineGamutMapModel,
  3. 可选说明字符串,
  4. 可选作者字符串,
  5. 可选 PlugInGamutMap 和
  6. 可选 ExtensionType。

验证条件:每个子元素都由其自己的类型进行验证。

Namespace

xmlns:gmm=“http://schemas.microsoft.com/windows/2005/02/color/GamutMapModel"

targetNamespace=“http://schemas.microsoft.com/windows/2005/02/color/GamutMapModel"

版本

Windows Vista 的第一个版本为“1.0”。

windows Vista 中的 验证条件:1.0。 <2.0 版本也有效,以支持格式的非中断性变更。

文档

Gamut Map Model Profile 架构。

版权(C)Microsoft。 保留所有权利。

验证条件:每个子元素都由其自己的类型进行验证。

DefaultBaselineGamutMapModel 类型

UINT 类型

枚举值:

“MinCD\_Absolute” “MinCD\_Relative” “SIG\_KNEE” “HueMap”

验证条件:值必须与上述枚举之一匹配。

PlugInGamutMapType

此元素是 GUID GUIDType 和任何子元素的序列。

验证条件:GUID 用于匹配 GMM 插件 DLL GUID。 最多有 100,000 个自定义子元素。

扩展类型

此元素是任何子元素的可选序列。

验证条件:最多可以有 100,000 个子元素。

GMMP 基线算法

对齐中性轴

大多数域映射算法的目标是将源设备的中性轴映射到目标设备的中性轴:即白色到白色、黑色到黑色,将灰色映射到灰色。 这部分是通过缩放源颜色的光度来匹配目标设备的光度范围来解决的。 但这并不能完全解决问题。

它是大多数成像设备的物理属性,设备白色的色度与设备黑色的色度不完全匹配。 例如,监视白色取决于三个初选的色度和相对亮度之和,而监视器黑色取决于显示表面的反射。 打印机白色取决于纸张的色度,而打印机黑色取决于使用的墨迹或墨迹。 将设备白色完全映射到外表空间中性轴(色度完全等于零)的外观模型不会将设备黑色映射到中性轴。 由于眼睛对色度差异更敏感,因为光度增加,中灰色将表示为比设备黑色更多的色度。 (图 1 说明了两维中性轴的曲率。事实上,中性轴在三维中形成了更复杂的曲线。

虽然 CAM 预测这些设备中性颜色将出现色度,但实际观察家似乎弥补了这一点。 大多数人不认为这些设备中性值是色度值。 因此,对于大多数游戏映射模型,应继续将源中性映射到设备中性。

若要将源中性映射到设备中性,请应用域映射算法时调整源和目标域边界和每个像素。 首先调整源颜色中的每个值,以便源设备的中性轴在源颜色的光度直接落在外观空间的中性轴上。 (请参阅图 1 的左侧。然后调整目标设备的域边界说明,使目标设备中性轴上的每个颜色在目标设备域边界颜色的光度直接落在外观空间的中性轴上。 (请参阅图 1 的右侧。

图,显示左侧的源域边界图和右侧的目标域边界。

图 1:说明中性轴的对齐方式。 左:调整相对于源设备中性轴的源点。 右侧:调整相对于目标域边界说明的目标域边界说明。

请注意,相对于该光线值的中性轴调整每个源像素值。 这可确保源设备中性位于外观模型的中性轴上。 你还会将所有其他颜色的光度按相同的量移动,以便源域的表示形式没有中断性。 必须在不同的光度级别按不同的量移动,因为源设备中性不表示为不同光度级别的同样色度。 显然,这不是一个微不足道的转变。

处理目标设备值有点棘手。 最初,可以采用类似的方式调整整个目标域边界,但相对于目标设备中性轴。 这在右侧图 1 中进行了说明。 该调整可确保源灰色值映射到目标灰色值。 这是域映射算法运行的空间。

但是,此空间无法准确描述目标设备的真实行为。 在将映射颜色交给外观模型和目标设备模型之前,必须反转映射。 将之前应用于目标设备中性轴的偏移量相反来偏移所有映射值。 这会将目标中性轴映射到最初由 CAM 表示的值。 它针对域边界和所有中间值执行相同的作。

关系图,显示用于撤消目标设备中性轴对齐的图。

图 2:撤消目标设备中性轴的对齐方式

最小颜色差异 (MinCD)

最小颜色差异(MinCD) 相对版本和绝对版本 - 等效于 ICC 色度意向。

注意

MinCD GMM 适用于映射图形和线条艺术,其中包含“徽标”颜色(现成颜色),徽标颜色渐变与一些色域外的颜色,以及校对转换的最后阶段。 虽然 MinCD GMM 可用于完全位于目的地范围内的摄影图像,但不建议对摄影图像进行一般渲染。 将域外颜色映射到目标色域图面的颜色可能会导致不需要的项目,例如,在跨越域边界的平滑渐变中出现色调或色度不规则性。 对于摄影图像,建议使用 BasicPhoto。 如果摄影或串联图像需要基本照片以外的域映射,则替代方法是创建实现该映射的插件 GMM,而不是使用 MinCD。

 

色域内颜色保持不变。 对于域外颜色,通过查找目标域中的点(与域外输入点之间的最小颜色距离)来调整光度和色度。 颜色距离在 JCh 空间中计算。 但是,以光度(J)和色度(C)或色调(h)的距离(h)不同方式对距离进行加权。 色度依赖权重函数用于光度距离,使色度较小,而大色度则较小,直到达到阈值色度,之后权重保持在 1,即与色度或色调中的距离相同。 这遵循 CMC 和CIEDE2000的建议用法。 有两个变体:相对着色和绝对着色。

相对着色: 首先,按前面所述对齐源轴和目标中性轴。 然后将调整后的源颜色剪辑到调整的目标域边界。 (请参阅图 4.沿常量光度进行色度映射。如前所述重新调整目标设备值。 对于单色目标域边界,色度剪辑意味着色度值 (C) 设置为零(0.0)。

绝对着色: 这类似于相对着色,但没有源轴和目标中性轴的对齐方式。 源值直接剪切到目标中性轴。 请注意,如果源和目标域边界都是单色的,则行为与相对色度变体相同;也就是说,执行中性轴对齐,然后将色度剪裁为零。 这可确保即使媒体和着色器明显不同,也能获得合理的输出。

关系图,显示 MinCD 剪辑到调整后的域的图。

图 3:MinCD 剪辑到调整后的域

BasicPhoto

概述

BasicPhoto - 等效于 ICC 首选、图片或感知意图。

此算法是 CIE CIE156:2004 中 CIE TC8-03 描述的与色度相关的 sigmoid 光度映射和小腿膝盖缩放(SGCK)的变体。 此变体算法支持具有双域外壳的域边界描述符(GBD):也就是说,具有引用 shell 和合理 shell 的 GBD。 SGCK 算法最初只假定 GBD 中的一个域壳,它基于SIG_KNEE算法(Braun 1999),该算法结合了 Braun 和 Fairchild (1999 年)提出的 sigmoid 光度映射和膝盖函数缩放(1999年),与 GCUSP(Morovic,1998年)的色度依赖性相结合。 它保持感知的色调常量,例如,色调更正的 Jab 中的色调角度,并使用泛型(独立于图像)的光度缩放,该缩放以色度依赖的方式和 90% 的膝盖函数色度进行应用。 变体沿常量光度线进行缩放。

单域 shell 的案例

如果源 GBD 和目标 GBD 只有一个域 shell,请查看算法。 在这种情况下,算法由以下计算组成。

首先,使用以下公式执行初始光度映射:

显示初始光度映射的公式。 (1)

其中,Jₒ 是原始光度,JR 是再现光度。

显示第二个光度映射公式。 (2)

当源域边界为单色时,由于中性轴对齐,色度值将为单色边界的零。 这将导致 C 等于零的退化情况。 在这种情况下,pC 设置为 1。

pC 是一种依赖于色度权重因子(1998年莫罗维奇,1998年),它依赖于原始颜色的色度,C 和 JS 是使用 sigmoidal 函数映射原始光度的结果。

 

为了计算 JS(Braun 和 Fairchild,1999 年),原始和复制光度值之间的一维查阅表 (LUT) 首先基于离散累积法函数 (S) 进行设置。

显示用于计算 J s. 的公式 (3)

其中 x ₀ 和 S 是正态分布的平均值和标准偏差,i = 0,1,2...mm 是 LUT 中使用的点数。 Sii /m% 的累积正态函数的值。 参数取决于复制域的黑点的光度,并且可以从表 1 内插。 有关计算这些参数的详细信息,请参阅 Braun 和 Fairchild (1999, p. 391)。

J minOut

5.0

10.0

15.0

20.0

x ₀

53.7

56.8

58.2

60.6

S

43.0

40.0

35.0

34.5

表 1:BasicPhoto 光度压缩参数计算

若要将 S 用作光度映射 LUT(S LUT),必须首先规范化为 [0,100] 的光度范围。 然后,规范化数据将缩放到目标设备的动态范围内,如公式 4 中所示,其中 Jmin\ OutJmax\ Out 是黑点和复制介质的白色点的值, 分别。

将 S 的公式显示为光度映射 LUT。 (4)

此时,J S 值可以通过 S LUT 获取,方法是内插相应 J Om 点和 J S 值,并将以下公式用作输入。

显示用于获取 J S 值的公式。 (5)

J minIn 是原始介质黑点的光度值,J maxIn 是原始介质白色点的光度值,J O 是原始光度。 对于以后的参考,可以通过 S 按刚刚概述的方式定义的 sigmoidal 函数来表示,如下图所示。

关系图,显示沿常量光度进行色度映射的图。

图 4:沿常量光度进行色度映射

其次,如果目标域边界为色度,则按常量光(l)行压缩色度,并按如下所示执行压缩。

显示执行色度压缩的公式。 (6)

其中,d 表示与 l上的 E 的距离;g 表示中等域边界;r 表示复制;o 原始图 5。

关系图,显示 BasicPhoto 中色度和光度压缩的图。

图 5:BasicPhoto 中的色度和光度压缩

如果目标域边界为单色,则将色度值剪裁为零。

第三,使用 MinCD 剪辑(前面所述)消除任何残差错误。

黑色增强

可以修改上述算法,以在目标为打印机设备时改进黑色。 此问题与选择 JminOut有关,这通常与打印机可以生成的最深颜色不对应。

更具体地说,通过放置 100% 墨迹(如果 GCR/墨迹限制有效)获得的最高密度的颜色通常不是颜色外观空间中的“中性”。 请参阅图 6。 换句话说,如果将中性最小亮度用于目标设备,则构造的光度缩放器将映射到不是打印机可实现的最高密度的最低亮度。 考虑将监视器进一步用于打印机的用例。 监视器黑色 R=G=B=0,然后打印为不是最高密度。 对图像质量的影响在于缺乏深度和对比度。

显示设备黑点可能比中性最小光度暗的示意图。

图 6:设备黑点可能比中性最小光度暗。

假设目标“设备黑点”是 Jkakbk/JkCkh k。 如果 C k 不为零,则设备黑点与 CAM02 无关。 如果在构造光度缩放器时将 J k 用于目标“中性最小光度”:即设置

JminOut = Jk

并将其应用于源域 shell,你将获取图 7 中描述的配置。 在图中,色调平面对应于 h k。

关系图,其中显示了具有目标设备黑点的修改光度缩放器。

图 7:将修改的光度缩放器与目标设备黑点结合使用的几何图形

若要允许后续的色度压缩算法继续,需要在源和目标 shell 上对齐最大和最小光度。 这可以通过将点向左移来调整 J neutralMin 和 J k 之间的目标外壳来实现。 此外,此转换必须应用于整个 Jab 空间,而不仅仅是对应于 h k 的色调平面。

转换为

显示转换的公式。

图 8 显示了转换的效果。

图,显示修改后的光度缩放器与目标设备黑点的效果。

图 8:将修改的光度缩放器与目标设备黑点结合使用的几何图形

应用通常的色度压缩算法后,点必须“移回”;也就是说,必须应用反向转换才能获取最终映射的颜色。

显示反向转换的公式以获取最终映射的颜色。

双域外壳的案例

目标是将单域 shell SIG_KNEE通用化为源设备 GBD 或目标设备 GBD 具有双 shell 结构的情况。 内部外壳将称为引用 Shell,而外壳将称为合理 Shell。 你想要考虑以下情况。

(a) 源 GBD 和目标 GBD 都具有双外壳结构。

(b) 源 GBD 具有双壳结构:目标 GBD 只有一个 shell。

(c) 源 GBD 只有一个 shell:目标 GBD 具有双 shell 结构。

(d) 源 GBD 和目标 GBD 只有一个 shell。

案例 (d) 是以前讨论过的单域外壳的情况。 对于事例(a)、(b)和(c),可以将光度重新缩放通用化,以使用双外壳结构中的额外信息。 在源或目标只有一个 shell 的情况下(b)和(c),将介绍一个“诱发的引用 shell”,将在后续部分“诱发引用 Shell”中讨论。将介绍两个 shell 的一般算法(a)。 解释引入的 Reference Shell 构造后,该算法也可以应用于 case (b) 和 (c)。 至于色度压缩,压缩比率将由可用的最大外壳决定。 换句话说,如果可读 Shell 和引用 Shell 均可用,则使用 Plausible Shell;否则,将使用引用 Shell。

通用光度重新缩放

源和目标 GBD 的两个 shell 的存在意味着必须将一组四个点从源 GBD 映射到目标 GBD 中的相应集。

演示如何将一组四个点映射到相应的集。

下标具有以下含义。

o 或 r:“original”(源)或“复制”(目标)

min 或 max:最小中性光度或最大中性光度

pla 或 ref:合理的 Shell 或 Reference Shell

每个四倍的排序也是这些点的预期相对数量级。

光度重缩放地图使用与单个 shell 相同的前两个公式,但 J S 按如下方式定义。

按条方式显示 J S 的公式。 (7)

换句话说,它是引用 shell 中的 sigmoidal,在外部是线性的。 请参阅图 9。

关系图,显示双壳 GBD 的光度重新缩放函数的图。

图 9:双壳 GBD 的光度重新缩放函数

诱发的 REFERENCE SHELL

其中一个 GBD 有一个 shell,另一个 GBD 有两个 shell,则必须为只有一个 shell 的 GBD 创建一个“引用 Shell”。 将称为“引用 Shell”的现有 shell 将更改为“合理的 Shell”。事实上,你实际上不必在完整的 Jab 空间中创建 shell。 由于光度重新缩放仅使用 J maxJ min,因此只需为诱发的 Reference Shell 组成这些值。 有两种情况,具体取决于哪个 GBD 有两个 shell。

案例 1:源 GBD 有两个 shell:目标 GBD 有一个 shell。

确定中性轴上的目标诱发参考 Shell;也就是说,J r,\ min,\ ref 和 J r,\ max,\ ref shell。 这是使用以下算法完成的。

显示用于确定目标诱发的引用 Shell 的算法。

因素? 和? 控制合理外壳与参考 Shell 之间的分离。 值为 1 表示 J min 值或 J mₐₓ 值重合。 它们的值是从源引用 Shell 和源合理 Shell 中“推断的”。

显示源引用 Shell 和源合理 Shell 的值的公式。

“模糊因素”F 和 F 可调整参数, 必须介于 0 和 1 之间。 如果值为 0,则从源 shell 直接推断 J min 或 J mₐₓ。 在这种情况下,请选择 F = 0.95,F = 0.1。

案例 2:源 GBD 有一个 shell;目标 GBD 有两个 shell。

确定中性轴上源诱发的 Reference Shell;也就是说,J o,\ min,\ ref 和 J o,\ max,\ ref shell。 这是使用以下算法完成的。

显示用于确定中性轴上目标诱发的 Reference Shell 的算法。

再次,因素? 和? 控制合理外壳和参考 Shell 之间的分离。 值为 1 表示 J min 值或 J mₐₓ 值重合。 它们的值是从源引用 Shell 和源 Plausible Shell 中“推断的” :

显示用于控制引用 Shell 和源合理 Shell 之间的分离的算法。

CIE TC8-03 建议更改的原因

BasicPhoto 在以下方面不同于 CIE TC8-03 建议。

  1. 色度不是压缩到尖尖,而是沿恒定的光线进行压缩。
  2. 光度范围使用色域中最暗颜色的光度,而不是域边界跨越中性轴的点。
  3. 如果转换中的任一域边界具有两个 shell,BasicPhoto 同时支持引用域 shell 和合理的 gamut shell。
  4. BasicPhoto 使用 CIECAM02;而不是使用 CIECAM97s 在 400 cd/m2 转换为 D65,然后使用 RIT IPT 颜色空间。

第一项更改旨在防止使用压缩到提示时可能发生的语调反转问题。 如图 10 所示,提示压缩可能会导致音调反转。 当高色度的颜色比色度较低的颜色更浅时,可能会发生这种情况。 由于 SGCK 在光度和色度中独立压缩每个像素,因此不能保证在压缩后保留像素值之间的光度关系。 这个决定压缩常量光线的已知缺点是,你可以遭受色度损失,特别是在目标域边界非常平坦的地区,就像明亮的黄色一样。

显示 SGCK 引起的音调反转的关系图。

图 10:SGCK 引起的音调反转

显示茶壶的原始图像。 显示茶壶图像的 SGCK 结果。 显示茶壶图像的基本照片结果。

图 11:原始图像、SGCK 结果和 BasicPhoto 结果

图 11 说明了这种语气反转。 左侧是由摄像机捕获的原始图像;在中心,由 SGCK 重现的图像;在右侧,由 BasicPhoto 重现的图像。 左侧的图像位于数字相机的颜色空间中,中右图像位于液晶视频显示器的颜色空间中。 在原始图像中,茶壶的顶部比底部暗,因为底部反映了它所坐的桌布。 在 SGCK 图像中,顶部部分实际上比底部更轻,因为音调反转。 此外,很难看到茶壶下半部分反映的项目。 在右侧,BasicPhoto 修复了语气反转,反映的文章更清晰可分辨。

第二次更改是在打印机上改进近黑色颜色的复制,其中最黑色不直接落在CIECAM02中性轴上。 下图 12 显示了转换为 sRGB 的图像;使用 SGCK 为 RGB 喷墨打印机重现;并使用 BasicPhoto 为同一打印机重现。 中心的图像未使用完整的设备黑色,因此它缺少原始图像中的对比度。 使用 BasicPhoto 还原对比度。

显示播放集的原始图像。 显示使用 SGCK 为 R G B 喷墨打印机重现的播放集的图像。 显示使用 BasicPhoto 为 R G B 喷墨打印机重现的 playset 的图像。

图 12:增强型黑色

第三次更改是为了改善摄像机的颜色复制。 特别是在使用参考目标对数字相机进行探查的情况下,基于测量颜色生成的域边界说明可能不包括在真实场景中捕获的所有颜色。 你不必将所有颜色剪辑到测量颜色目标的域,而是允许推断产生合理的域边界。 BasicPhoto 算法旨在支持这种推断的域边界。

第四次更改是因为CIECAM02适用于域映射。 TC8-03 建议在 400 cd/m2 时将设备颜色转换为 D65 的过程,然后使用 RIT IPT 颜色空间既是计算密集型又耗时的过程。

Hue 映射

HueMap 相当于 ICC 饱和度意向。

如果源域边界或目标域边界不包含主要内容,则此模型将还原到前面部分所述的 MinCD(相对)模型:例如,无法确定主要副本的设备(具有四个以上的通道的 ICC 配置文件)或单色 ICC 配置文件。

此算法首先调整输入颜色值的色调。 然后,它使用剪切映射同时调整光度和色度。 最后,它会剪辑颜色值,以确保它位于域内。

第一步是确定“Hue Wheel”。查找源设备和目标设备的主要颜色和辅助颜色的 JCh 值。 你只考虑色调组件。 这会导致一个主要或次要色调轮,每个设备都有六个颜色点。 (请参阅图 13.

图,其中显示了六个颜色点的色调轮。

图 13:色调车轮

如果源蓝色主要主数据库未旋转到目标蓝色主数据库,则可以获得更好的结果。 相反,源蓝色主要色调角度用作目标蓝色主要色调角度。

接下来,对源图像中的每个输入颜色执行色调旋转,

a)使用输入颜色的色调角度,确定源色调轮上相对于两种相邻主色或次要颜色的颜色位置。 可以将位置视为主要位置之间的距离的百分比。 例如,输入颜色色调是从 Magenta 的色调值到红色的色调值的 40%。

b)在目标色调轮上,找到关联的色调角度,例如,从 Magenta 到 Red 的 40%。 此值将是目标色调角度。

一般情况下,源初选和辅助数据库不会与目标初选和辅助数据库具有相同的色调角度:也就是说,目标色调角度通常与源色调角度不同。

例如,假设色调轮生成以下值:

源 M = 295 度,源 R = 355 度。

目标 M = 290 度,目标 R = 346 度。

如果输入颜色的色调角度为 319 度,则从源 M 到源 R 的角度(24 度)为 40%。从 M 到 R 的角度为 60 度,从 M 到输入色调的角度为 24 度。 计算目标上 40% 从目标 M 到目标 R(22 度)的角度,因此目标颜色的色调角度为 312 度。

接下来,计算源色调和目标色调的色调参考点。 若要计算特定 h (hue) 值的色调参考点,需要查找 J (光度) 值和 C (色度) 值。

  • 通过使用色调的相对位置在相邻主点或辅助点的 J 值之间内插,查找色调引用点的 J 值;例如,此示例中的 40%。
  • 在此 J 值和 h 值处查找最大 C 值。 你现在具有该色调的色调参考点的 JCh。

显示色调叶的 关系图。

图 14:色调叶(特定色调的域边界切片的可视化效果)

下一步是计算每个像素的剪切映射。 首先,可视化源色色调角度的源域的色调叶,以及在色调旋转期间计算的目标色调角度的目标色域的色调叶。 色调叶是通过从 JCh 域边界表面采用特定色调角度(见图 14)创建的。

注意:出于性能优化的原因,实际上不会创建色调叶;此处仅介绍了和显示它们以实现可视化目的。 这些作直接在指定色调的域边界图面上执行。 然后计算色调引用点以确定剪切映射。

  • 执行光度重新缩放,将源叶的黑白点映射到目标叶(见图 15)。 源色调叶的黑白点通过缩放源边界的所有 J 坐标,线性映射到目标色调叶的黑白点。 色调映射的输入颜色值以相同的方式缩放。

显示光度映射的 关系图。

图 15:光度映射

  • 确定每个色调叶的色调引用点。 将剪切映射应用于源叶,以便源和目标引用点重合(见图 16)。 特定色调处的域的引用点是相邻主角之间的内插色调引用点。 源色调叶的引用点将线性映射到目标色调叶的参考点,使用锁定 J 轴的“剪切”作,使黑色点和白色点保持固定。 源和目标色调叶的黑点、白点和参考点应相吻合。
  • 将剪切映射应用于调整光度调整的输入颜色值。 相对于其与 J 轴的距离,源颜色值的 J 和 C 坐标按比例缩放。
  • 接下来,在剪切映射的颜色点上对色调参考点的 J 值进行细微的色度依赖性压缩。 对色调引用 J 的压缩以类似伽玛的方式完成,其中,色调引用 J 上的白色、黑色、灰色和点不会受到影响。 所有其他点都倾向于平滑的色调引用 J,在色调引用 J 附近稍加一些,色度剩余的常量。 色度依赖项可确保中性颜色不受影响,并且色度较高的颜色上的效果会增加。

下面是对色调引用 J 的光度压缩的数学说明,或调整目标点的 J 值。 它被称为目标点,因为它已被剪切到目标域。

首先,计算目标点的“factorC”(色度依赖因子),确定光度压缩将产生多少影响。 接近或 J 轴上的点将几乎没有或没有压缩;离 J 轴(高色度)更远的点将应用更多的压缩。 乘以 0.5 以确保 factorC 小于 1,因为 sourceC 可能略大于 referenceC,但不能大于两倍。

factorC = (destinationC / referenceC) ? 0.5

哪里:

destinationC 是目标点的 C 值。

referenceC 是 Hue 引用点的 C 值。

接下来,确定目标点 J 是高于还是低于色调引用 J。如果上面有,请执行以下作:

  1. 计算相对于 referenceJ 的目标点的“factorJ”。 此 factorJ 值介于 0 和 1 之间(如果位于 referenceJ 上);如果为 maxJ,则为 1。

  2. factorJ = (destinationJ - referenceJ) / (maxJ - referenceJ)

    哪里:

    destinationJ 是目标点的 J 值。

    referenceJ 是色调引用点的 J 值。

    maxJ 是域的最大 J 值。

  3. 将类似伽玛的幂函数应用于 factorJ,这将将 factorJ 减少一定量。 此示例使用 2(正方形)的幂。 从原始 factorJ 中减去减少的 factorJ,并将结果乘以主要引用J 上方的总 J 范围来查找“deltaJ”,这表示光度压缩后 J 的变化,但不包括色度依赖项。

  4. deltaJ = (factorJ - (factorJ ? factorJ)) ? (maxJ - referenceJ)

  5. 将 factorC 应用于 deltaJ(色度越高,效果越大),并计算目标点的新 J 值。

  6. destinationJ = destinationJ - (deltaJ ? factorC)

如果目标点的 J 值低于 referenceJ,则执行与上述步骤 A-C 类似的计算,使用 minJ 而不是 maxJ 查找 J 中的范围来计算 factorJ,并考虑到引用J“下面”作的极性。

factorJ = (referenceJ - destinationJ) / (referenceJ - minJ)

deltaJ = (factorJ - (factorJ ? factorJ)) ? (referenceJ - minJ)

destinationJ = destinationJ + (deltaJ ? factorC)

哪里:

minJ 是域的最小 J 值。

输入颜色点的色度沿常量光度线性扩展(如果可能),其色度与该色调和光度下源和目标域的最大色度值成正比。 结合前面的色度依赖光度压缩,这有助于保持饱和度,因为使用参考点的剪切映射有时会导致源点在色度中过度压缩(请参阅图 16)。

关系图,显示剪贴图以匹配色调参考点,在左侧的剪切之前,在右侧剪切之后。

图 16:向色调参考 J 的剪切映射、光度压缩和色度扩展

下面是色度扩展过程的数学说明,或调整目标点的 C 值。 它被称为目标点,因为它已被剪切映射,光度压缩到目标域。

  1. 在剪切映射之前,确定 sourceExtentC(源点光度和色调处的色度)。

  2. 在将源点转换为目标点的剪切映射和光度压缩后,确定目标点光度和色调处的色度范围。

  3. 如果 sourceExtentC 大于 destExtentC,则不需要对目标点进行色度调整,并且可以跳过下一步。

  4. 调整目标点(目标点的色度)以适应目标色度,以达到此光度和色调。

  5. destinationC = destinationC ? (destExtentC / sourceExtentC)

    哪里:

    destinationC 是目标点 C 值。

    sourceExtentC 是源点光度和色调处源域的最大 C 值。

    destExtentC 是目标点光度和色调下目标域的最大 C 值。

最后,执行 mimimum 距离剪辑。 如果色调旋转、调整光度和剪切映射输入颜色仍然略超出目标范围,请将其剪裁(将其移动到目标域边界上最近的点)(见图 17)。

显示最小距离剪辑的关系图。

图 17:最小距离剪辑

域边界说明和 Gamut Shell 算法

设备域边界函数使用设备模型引擎和分析参数来派生颜色设备域边界,该边界被描述为设备域外壳的索引顶点列表。 外壳的计算方式不同,具体取决于是使用附加设备,如监视器和投影仪,还是减法设备。 索引顶点列表存储在 CIEJab 中。 索引顶点列表的结构通过 DirectX 针对硬件加速进行了优化。

此方法有许多已知的解决方案。 如果在 Web 上搜索“凸体 DirectX”,则获得超过 100 次命中次数。 例如,有来自 1983 年关于此特定主题(计算机图形理论和应用程序、“Shiphulls、b-spline 表面和 cadcam”,pp. 34-49)的参考,该主题的参考日期从 1970 年到 1982 年。

点集合可以从外部可用的信息中确定,如下所示:

  • 使用设备着色空间中颜色立方体采样生成监视器参考外壳的点。
  • 从用于初始化模型的示例数据中获取打印机和捕获设备的参考外壳的点。
  • scRGB 和 sRGB 的参考 shell 的点是使用 sRGB 的颜色立方体采样生成的。
  • 捕获设备的合理 shell 点是使用设备着色空间中颜色立方体采样生成的。
  • 投影机参考外壳的点是使用设备着色空间中多维数据集中的多维数据集采样生成的。
  • 使用空间本身中颜色多维数据集的采样生成宽范围颜色空间的可能 shell 的点。

可以在给定设备配置文件和系统支持服务的情况下,创建有效描述颜色设备域的顶点列表。

对于输出设备,域边界描述设备可以显示的颜色范围。 游戏边界是从用于为设备行为建模的相同数据生成的。 从概念上讲,输出设备可以生成的颜色范围的采样、测量颜色、将度量转换为外观空间,然后使用结果创建域边界。

输入设备更棘手。 输入图像中的每个像素必须具有一些值。 每个像素必须能够以某种方式表示在现实世界中找到的任何颜色。 从这个意义上说,输入设备没有颜色“失色”,因为它们始终可以表示。

所有数字图像格式都有一些固定的动态范围。 由于这种限制,总是有一些不同的刺激映射到相同的数字值。 因此,不能在真实颜色和数字相机值之间建立一对一映射。 相反,游戏边界是通过估算一系列真实颜色而形成的,这些颜色可以生成相机的数字响应。 你将该估计范围用作输入设备的域。

主要包括用于业务图形意向类型域映射。

在真正的面向对象的样式中,可以抽象化域边界的基础表示形式。 这样,便可以灵活地更改将来的表示形式。 若要了解新 CTE 中使用的域边界描述符(GBD),必须首先了解域映射算法(GMA)的工作原理。 传统上,GMA 旨在满足图形艺术界的需求:也就是说,重现已为创建输入映像的设备正确呈现的图像。 图形艺术 GMA 的目标是在输出设备上实现输入图像的最佳复制。 新的 CTE GBD 旨在解决四个关键问题。

由于输入图像是为输入设备呈现的,因此所有颜色都适合介质的白色点和黑色点之间的范围。 假设图像是场景的照片,其中有漫射白色,如白色发球衫的人,以及反射光(如从窗户或部件保险杠反射的光)。 场景将呈现到输入介质,以便反射突出显示映射到介质的白色点,并且漫射白色映射到比介质的白色点深的一些中性颜色。 如何将场景的颜色映射到输入介质的选择既是依赖于场景的决策,也是审美决定。 如果原始场景中缺少反射突出显示,则漫射白色可能映射到介质的白色点。 在具有大量突出显示细节的场景中,反射白色和漫射白色之间将留下更多的范围。 在突出显示不重要的场景中,可能会留下很少的范围。

对于预呈现的图像,域映射相对简单。 基本上,原始介质的白色点映射到复制介质的白点,源黑点映射到目标黑点,大部分映射已完成。 存在的不同 GMA 为在源介质的音调刻度上映射其他点提供了变体,以及处理色域外值的不同方法。 但是,在整个变化中,白色到白色和黑色的映射是一致的。 此实现要求白色高于 J* 的 50,在 50 的 J* 下方为黑色。

并非所有颜色编码都限制输入图像的颜色范围。 IEC 标准颜色编码 scRGB (IEC 61966-2-2) 为三个颜色通道中的每一个提供 16 位红色、绿色和蓝色 (RGB)。 在该编码中,引用黑色不编码为 RGB 三重(0、0、0),而是编码为(4096、4096、4096)。 引用白色编码为 (12288, 12288, 12288)。 scRGB 编码可用于表示反射高光和阴影细节。 它包括无法以物理方式实现的 RGB 三倍,因为它们需要负量的光线,以及位于 CIE 光谱定位点之外的编码。 显然,任何设备都不可能在 scRGB 游戏中产生所有颜色。 事实上,任何设备都无法产生人类可以看到的所有颜色。 因此,设备无法填充 scRGB 域,并且能够表示其填充的域部分会很有用。 每个设备在 scRGB 空间中都有一系列值,可以生成这些值。 这些是设备的“预期”颜色;设备在此域外生产颜色会让人吃惊。 有一个定义的转换,从 scRGB 空间到外观空间,因此每个设备也有一系列的外观值,它预期会重现。

在 scRGB 和捕获设备(其特征为固定目标)的输入中,可以获取超出预期值范围的值。 如果有人将相机校准到测试目标;然后捕获具有反射高光的场景,可能有比目标白色点亮的像素。 如果自然发生的红色比目标红色更彩色,则会发生同样的事情。 如果有人从设备获取 scRGB 图像,然后手动编辑图像中的颜色,则可以创建超出设备域的预期范围的像素,即使它们位于完整的 scRGB 域内也是如此。

第二个问题起初似乎与这个问题无关。 使用颜色目标来描述输入设备(例如相机或扫描仪)时会出现这种情况。 反射目标通常在纸张上生成,并包含许多彩色补丁。 Manufaturers 为数据文件提供针对每个颜色补丁的固定查看条件拍摄的颜色度量。 颜色分析工具在这些测量值与设备中的颜色传感器返回的值之间创建映射。 问题是,这些颜色目标通常不涵盖设备值的全部范围。 例如,扫描程序或相机可能会返回引用白点的值(253,253,253),引用红色补丁的 RGB 值可能为 (254, 12, 4)。 这些值表示输入设备的预期值范围,具体取决于目标值。 如果根据对目标的响应对输入设备进行特征化,则只需在此窄范围内使用颜色。 此范围不仅比人类可以看到的颜色范围小,而且比设备可以生产的颜色范围小。

在这两种情况下,尽管存在引用域或度量值,但很难估计输入设备或图像的域。 在第一个问题中,输入设备的合理范围小于 scRGB 的完整范围。 第二个问题中,目标的引用范围小于输入设备的完整可能域。

第三个问题涉及音调映射。 许多可以充分表示图形艺术中使用的预呈现图像的域边界模型已经提出,例如,布劳恩和费尔奇德山脉 GBD(Braun[97])和莫罗维奇的段马克西玛边界描述符(莫罗维奇[98])。 但这些模型仅提供有关设备游戏的极端情况的信息;它们缺少有关图调映射中其他点的信息。 如果没有这些信息,GMA 只能对最佳音调映射进行粗略的估计。 更糟的是,这些模型没有帮助 scRGB 和数字相机图像中的扩展动态范围。

这个问题是如何在摄影和录像业中解决的? 相机捕获图像。 专家可能会讨论捕获设备中发生的渲染量;但他们同意这并不重要。 这两种技术都不会将捕获场景中的漫射白色映射到媒体的白色点。 同样,它们不会将黑点从场景映射到中等点的黑点。 摄影电影的行为使用特征曲线在密度空间中描述,通常称为“伤害”和“德里菲尔德”或H&D曲线。 该曲线显示原始场景的密度和电影上生成的密度。 图 18 显示了典型的 H&D 曲线。 x 轴表示增加对数暴露。 y 轴表示幻灯片上的密度。 曲线上标记了五个参考点:黑色无细节,表示负数的最小密度;带细节的黑色;引用中灰色卡片;带有详细信息的白色;和白色没有细节。 请注意,黑色之间没有细节(表示设备黑色)和黑色之间有一个空间,细节(阴影黑色)。 同样,白色与细节(漫射白色)和白色之间有空格(表示设备白色)。

显示幻灯片电影的 H 和 D 曲线的关系图。

图 18:幻灯片电影的 H&D 曲线

视频行业在图像中提供“头容”和“足部”。 在ITU 709 规范中,亮度(称为 Y)编码为 8 位,范围为 0 到 255。 但是,引用黑色编码为 15,引用白色编码为 235。 这会使编码范围介于 236 和 255 之间,以表示反射高光。

视频行业提供了一个本质上封闭的循环系统。 虽然有许多不同的设备供应商,但视频系统基于参考设备。 视频图像有标准编码。 无需与视频图像通信域边界,因为所有图像都编码为在同一参考设备上进行复制。 电影也是闭合循环,因为无需在不同组件之间传递中间数据。 你需要一个解决方案,使来自具有不同游戏域的设备的图像,并表示预呈现和未修补的场景,以使用不同的域在输出中重现。

新 CTE 必须解决的第四个问题是,设备生成的视觉灰色颜色(例如,当监视器上的 red=green=blue 时),通常不会落在 CAM 的中性轴上(当色度 = 0.0 时)。 这给 GMA 造成了很大的困难。 若要使 GMA 正常工作,必须调整设备的域和输入点的说明,使设备的中性轴落在外观空间的中性轴上。 必须按类似的量调整中性轴的点。 否则,无法通过图像进行平滑分级。 在 GMA 的出路时,相对于输出设备的中性轴撤消此映射。 这称为轴的“脊椎”直线。 像脊椎医生一样,你不仅理顺了骨骼(中性轴),而且调整了身体的其余部分,以随骨骼一起移动。 像脊椎医生一样,在整个空间中,你不会按相同的量调整骨架。 相反,你可以以不同的方式调整不同的分区。

关系图,显示设备中性轴相对于 CIECAM 中性轴的曲率。

图 19:相对于 CIECAM 中性轴的设备中性轴的曲率

新的 CTE 需要的是一个域边界的模型,可用于表示呈现的源图像和未修复的源图像,提供有关设备中性外观的信息,并为具有宽亮度范围的音调映射图像提供信息。

显示三个域 shell 的 关系图。

图 20:三个域外壳

域边界由三个定义三个区域的 shell 组成。

在新 CTE 中,域的外壳由设备域中的样本点制成的凸壳组成。 船体由一组样本点组成,并围绕它们表面。 凸壳具有额外的属性,在任何地方都凸起。 因此,这不是可以容纳数据的最小外壳。 但实验表明,将样本点拟合得太紧会导致图像中未密封的项目,如缺乏平滑底纹。 凸壳似乎解决了这些问题。

在算法中,为从设备采样的一组点获取颜色外观值。 对于监视器和打印机,颜色外观值是通过输出样本获取的,然后测量它们。 还可以创建设备模型,然后通过设备模型运行综合数据来预测测量值。 然后,测量值从色度空间(XYZ)转换为外观空间(Jab),外壳被包裹在点周围。

此算法的关键点是,从着色到外观空间转换中使用的采用的白色点不必是介质的白点。 相反,可以选择距离域更远的点,并在中性轴(或附近)选择一个点。 然后,该点的 J 值为 100。 测量的 Y 值高于采用的白色点的样本最终的 J 值大于 100。

如果将场景的漫射白点放置为颜色空间转换采用的白色点,则场景中的反射高光将被轻松检测为 J 值大于 100。

由于CIECAM02颜色模型基于人类视觉系统,因此选择采用的白色后,黑点(J = 0)的亮度级别由模型自动确定。 如果输入图像具有广泛的动态范围,则可能存在映射到小于零的 J 值的值。

下图 21 显示了在合理和引用域的中心运行的设备中性。

图,显示添加到域边界的设备中性轴。

图 21:添加到域边界的设备中性轴

所有域映射都涉及将输入范围剪辑到输出域,或压缩输入域以适应输出域。 更复杂的算法是通过按不同方向压缩和剪辑,或将域划分为不同的区域,然后在不同的区域中执行剪辑或压缩来形成。

新的 CTE 扩展了此概念,以支持可能的域、合理的域和引用域的区域,并使 GMA 能够以不同的方式映射它们。 此外,GMA 还包含有关设备中性轴的信息。 以下讨论介绍了如何处理可能的游戏和引用域相互崩溃的情况。

关系图,显示 G M A 具有两个未折叠的域描述符。

图 22:GMA 具有两个未折叠的域描述符

如果从输入设备(如具有反射目标特征的相机或扫描仪)映射到 scRGB 空间,则可能会看到此示例。 在这里,比参考白色更浅的合理颜色是反射高光。 在实践中,使用目标对相机进行特征化可能不会生成相机中可能的全部值:然而,在自然界发现的反射亮点和非常色度的颜色。 (转译目标通常有一个补丁,它是介质上可能的最小密度。有了这样的目标,反射高光将落在目标的范围内。反射目标的参考黑色将是阴影黑色区域的开头。 也就是说,阴影中可能的颜色比目标上的黑色更暗。 如果图像包含该区域中大量有趣的内容,则可能需要保留该色调变化。

图,显示 G M A 具有折叠的目标域。

图 23:具有折叠目标域的 GMA

图 23 显示了一种可能的域映射算法,当目标域仅提供从设备白色到黑色的范围,并且此域之外没有可能的颜色。 对于典型的输出设备(如打印机),可能会发生这种情况。 可能的颜色映射到目标域的边缘。 但它缺少输出设备的音调曲线。 GMA 必须选择一些低亮度的中性点,才能用作参考白色的映射目标。 复杂的算法可以通过直方图源图像中的光度来执行此作,并查看预期但比参考白色更轻的跌幅。 光度越多,目标设备在反射高光和参考白色的映射点之间所需的空间就越大。 更简单的算法可能会从设备白色中选取任意距离,例如 5%。 类似的方法适用于最大黑色和阴影黑色的映射。

生成目标音调曲线后,可以在类似于上图 23 中使用的方法中映射。 目标音调曲线中的所有点都将位于设备域内,映射中的所有点都必须位于设备域内。

如果反转左图和右图,以及图 23 中箭头的方向,则可以描述源图像只有引用域的情况,并且输出设备的三个域没有相互折叠。 例如,从监视器映射到 scRGB。 同样,GMA 必须合成源图像的音调曲线上的五个点的控制点。 某些映射可能会将音调曲线的所有点置于 scRGB 设备范围中,而其他映射则可以通过将漫射白色映射到引用白色并允许反射白色映射到较轻的值来使用更多的 scRGB 域。

最后,你拥有两个设备只有引用域的情况,即大多数域映射算法的工作原理。 因此,只需回退到当前算法即可解决此问题。 或者,如果你有一种合理的方法来确定源设备和目标设备的五个引用点,则可以排列以映射引用点。

设备域包含中性轴上的五个引用点以上。 这些只是表示图像中潜在区域之间的边界。 在每个参考点之间,可以使用任何现有的域映射技术。 因此,可以剪辑意外颜色的范围,并压缩预期白色和黑色之间的所有颜色,或者可以剪辑引用范围之外的所有颜色,并在该范围内压缩。 有许多可能性可以在不同的 GMA 中实施。 此外,GMA 可以采用不同的方式压缩和剪辑。 所有这些组合都涵盖在此发明中。

到目前为止,在本次讨论中,该游戏被视为它只是创建、捕获或显示图像的设备的功能。 但是,设备的所有映像都必须具有相同的域的原因。 GMA 依赖于 GBD 中的数据。 如果描述符在图像之间更改,则无法知道 GMA。 特别是,如果图像没有反射高光,如果光域描述符不显示颜色比漫射白色更浅,则 GMA 的性能更好。

在新的 CTE 体系结构中,可以使用多个 GMA。 使用多个 GMA 本质上是定义不明确的。 例如,如果捕获设备将 GMA 与其“外观”相关联,则它倾向于使用“目标”目标目标域执行此作。 输出设备和“目标”源域也是如此。 sRGB 域是一个常见的定向隐含域。 因此,如果可预测性是优先级,强烈建议使用单个 GMA。 单个 GMA 工作流应该是所有工作流(尤其是使用者工作流和专业人员工作流)的默认工作流。 虽然首选复制的域映射应一次完成,但存在包含多个映射进程的实例。 首先,对于校对,你首选映射到最终目标设备的域,然后对校对设备的范围进行着色呈现。 其次,某些类型的映射用于更改图像的特征,但不包括用于映射到设备域的映射,例如,调整音调曲线或色度。 如果使用多个 GMA,转换接口将采用绑定域映射数组,即已使用一对域边界说明初始化的域映射。 当有多个域映射时,成功的域映射的输入域边界必须与其前置任务的输出域边界相同。

设备域边界函数采用设备模型引擎和分析参数,并派生一个颜色设备域边界,该边界描述为设备域的凸体有序顶点列表。 有序顶点列表存储在 CIEJab 中。 有序顶点列表的结构通过 DirectX 针对硬件加速进行优化。 此方法有许多众所周知的解决方案(在 Web 上搜索“凸体 DirectX”,并且你获得了超过 100 次命中次数)。 本主题还引用了1983年(计算机图形理论和应用程序,“Shiphulls,b-spline 表面和 cadcam”pp. 34-49),引用从1970年到1982年的主题。

两种不同的技术可用于计算 gamut shell 中的三角形。 对于附加 RGB 设备以外的其他设备,可以计算凸体。 如果你可以直接访问此类设备来验证算法的可靠性、性能和保真度,则可以考虑调查对其他设备的非凸壳支持。 这是一个不需要进一步说明的已知过程。 用于累加 RGB 设备的技术如下所述。

不同的 GBD 具有优点和缺点。 凸体表示形式保证良好的几何属性,如凸色调切片,提供唯一的交点,以及从中性轴上的点发出的光线。 凸壳表示形式的缺点也是凸起的。 众所周知,许多设备,特别是显示设备,具有远非凸起的域。 如果实际域明显偏离了凸起假设,则凸体表示形式将不准确,可能在于它不代表现实的程度。

采用 GBD 后,可以合理准确地表示实际域,则会出现其他问题,有些是由于色调切片的概念。 至少有两种病理情况。 在下图 24 中,CRT 域产生带有“岛屿”的色调切片。在图 25 中,打印机游戏产生色调切片,部分中性轴缺失。 在这些情况下,病理色调切片不是由特定的病理域边界引起的。 它们是由色调切片的概念引起的,因为(a)它采用常量色调,(b)它只需要与色调角度对应的平面的一半。

图,显示蓝色色调中“弯曲的”顶部视图和侧视图。

图 24:典型的 CRT 监视器具有一个显示蓝色色调中奇特的“弯曲”的域。 如果色调切片位于此色调范围内,则隔离的岛屿可能会出现在色调切片中。

其中性轴中带有“间隙”的域的图示。

图 25:打印机可能有一个在中性轴上具有“间隙”的域。 拍摄色调切片(仅占平面的一半)时,边界部分有一个“缩进”,即中性轴。 这很难以算法方式解析。

为了解决这些病理学问题,建议建立一个新的框架,放弃用作起点的色调切片的概念。 相反,框架使用“边界线元素”集,或位于域边界上的线条。 它们不一定提供一致的几何可视化效果,如色调切片,但它们支持所有常见的游戏作。 除了解决前面提到的问题外,这种方法还表明,即使有可能,色调切片的构造也是计算浪费的。

域边界的三角

起点是 GBD,它由域边界的三角组成。 构造 GBD 的已知方法通常提供三角。 对于具体性,此处介绍了为附加设备构造 GBD 的一种方法。此处介绍了其设备空间。 这些设备包括监视器(基于 CRT 和基于LCD)和投影仪。 多维数据集的简单几何图形使你能够在多维数据集上引入常规格子。 多维数据集的边界面可以通过多种方式进行三角化,例如图 26 中显示的边界面。 该体系结构为设备提供设备模型,以便可以按算法方式获取格子点的色度值,或直接为这些点进行度量。 该体系结构还提供CIECAM02,以便假设起始数据已映射到 CIECAM02 Jab 空间。 然后,RGB 多维数据集边界面上的每个格子点在 Jab 空间中都有相应的点。 在 RGB 空间中形成三角形集的点连接也会在 Jab 空间中引入一组三角形。 如果 RGB 多维数据集上的格子足够精细,则这组三角形构成了域边界的合理三角,并且 (b) 从设备空间到统一颜色空间的转换在拓扑上表现良好:也就是说,它将边界映射到边界,它不会将域从内部转向,以便内部点成为边界点。

关系图,该图显示了一种简单方法来三角化 R G B 作为设备空间的设备的范围边界。

图 26:使用 RGB 作为设备空间来三角化设备的域边界的简单方法

边界线元素

此框架的核心是边界线元素的概念;一组线段,(a)躺在域边界上,(b)躺在飞机上。 在这种情况下,平面是色调平面。 每个线段都是将平面与域边界三角形相交的结果。 尽管许多研究人员使用与边界三角形相交的平面的构造,但它们通常分析这些线段之间的关系,并尝试从线段构造一致的几何对象。 已经设计了不同的算法,以一个接一个地跟踪这些线段,直到获得整个色调切片,并进行了许多尝试来加快搜索过程。

此方法不同。 将平面与三角形相交以获取线段。 然后,将这些线段视为 基本 概念对象。 有必要分析线段之间的关系;你不必知道它们是如何相互互连的。 这一观点解决了与岛屿的色调切片问题。 尝试构造色调切片的已知方法假定,如果一个线段以一个线段开头,并跟随它到下一行段,依此推:它最终会返回到起点,此时将构造整个色调切片。 不幸的是,这种方法会错过这个岛屿(在最坏的情况下,大陆)。 不坚持获得一致的几何图片:也就是说,色调切片,你可以毫不费力地处理岛内的问题。 此方法的另一个重要区别是,为了加快线段的构造,它使用“三角形筛选器”。三角形筛选器会抛出某些三角形,这些三角形绝对不会生成在当前域作中有用的线段。 由于与平面相交的三角形在计算上非常昂贵,因此可以提高速度。 副作用是,无法构造色调切片,因为由于三角形筛选,某些线段将丢失。

Gamut作:CheckGamut

下面的示例将说明框架的工作原理,以及 CheckGamut 是如何执行的,即检查颜色是否为色域的作。

下图 27 说明了一般框架。 有多种组件。 斜体中标记的组件是实现中可能不同的组件,具体取决于所涉及的域作。 其他组件在所有域作中都是固定的。 首先,输入 是一组颜色属性。 对于 CheckGamut,它是查询颜色。 在图 27 和以下讨论中,假定色调角度位于输入颜色属性中,也可以从中获取。 如果输入是 Jab 或 JCh 中的整个颜色点,则可以从中计算色调角度,这显然是这种情况。 请注意,仅需要色调角度,因为正在使用色调平面。 根据有问题的域作,可能不需要使用色调平面。 例如,在例程 CheckGamut 的构造中,你可能想要使用常量 J 的平面。这是不会进一步使用或讨论的通用性;但是,在色调平面可能不是最佳选择时,记住此方法支持其他游戏作的灵活性可能很有帮助。

关系图,显示支持游戏作的流。

图 27:支持游戏作的框架

直接从输入获取或从输入中计算的色调角度用于初始化图中标记为 全色调平面 的色调平面。 “Full”被强调,因为这是全平面,而不仅仅是包含色调的半平面。 全平面包含输入色调角度和角度 180 度与它相反。 色调平面的关键功能是 Intersect 函数,该函数在以下小节“全色调平面:相交”中进行了说明。 假设已构造 GBD,并且 域边界三角形集可用。 使用交错将 三角形筛选器与色调平面相交 的三角形。 三角形筛选器 组件以斜体标记,这意味着该组件在不同游戏作的实现中有所不同。 CheckGamut 的 三角形筛选器 在“Gamut作:CheckGamut”(继续)部分中进行了说明。 将三角形与色调平面相交的结果为空或 边界线元素,即一对不同的点。 如果结果为非空,则会将其传递到 行元素处理器,这再次根据游戏作执行不同的作。 行元素处理器 更新内部数据结构,内部处理的数据,其内容或布局也取决于游戏作。 通常,内部处理的数据 包含问题的“答案”,每个新的边界线元素都会不断更新此问题。 处理完所有边界线元素后,已找到答案。 它仍可通过 输出适配器访问它。 由于 内部处理的数据 特定于域作,因此输出适配器 也是特定于游戏作的。

全色调平面:相交

Intersect 函数计算色调平面和三角形的交集。 与听起来一样简单,由于两个原因,此函数非常重要。

首先,将三角形的每个边缘与平面相交可能会产生三个交点,这在几何上是不可能的情况。 计算中可能出现这种情况的原因是,在浮点(例如 IEEE 格式)中完成计算时,每个步骤中都有不确定性或“数值干扰”,这会影响边缘是否与平面相交的结论。 当平面在接近失密的情况下相交边缘时,交点彼此接近,确定交点是否位于边缘内是随机的。 虽然点数值中的干扰较小,但定性结论认为两个以上的交点在几何上是不可能的,难以在算法中正确处理。

其次,此函数位于每个筛选三角形的每个边缘的关键循环中,因此必须尽可能优化其效率。

若要解决数字干扰的第一个问题,请在整数中执行计算。 若要解决优化其效率的第二个问题,请缓存每个顶点的最常用的属性,或与每个顶点关联的“点积”。 传入整数是保证几何一致性的典型方法。 基本思路是,如果必须量化,请在开始时执行此作。 然后,可以在整数中执行后续计算,如果整数足够宽,以便没有溢出的危险,则可以使用无限精度完成计算。 以下量化函数可用于此目的。

ScaleAndTruncate(x) = x*10000 的整数部分

缩放因子 10000 表示输入浮点数具有四个小数位数,这足以用于此应用程序。 根据颜色外观空间的值范围,你希望选择一个整数类型,其宽度足以容纳中间计算。 在大多数颜色外观空间中,每个坐标的范围都在 -1,000 到 1,000 范围内。 量化坐标的最大绝对值为 1,000*10,000 = 10,000,000。 正如你所看到的,中间数量是一个点积,这是两个坐标产品的总和,因此它的最大绝对值为 2*(10,000,000)ー = 2?10 ₁₄。 所需的位数是 log ー (2?10 ₁₄) = 47.51。 因此,整数类型的便捷选择是 64 位整数。

若要保证与三角形相交的平面始终提供空集或一组两个点,必须将三角形视为整体,而不是单独作为三角形的单个边缘。 若要了解几何情况,请考虑从色调平面上三角形的顶点的“带符号距离”。 不要直接计算这些有符号距离;而是使用量化法向量计算顶点的位置向量到平面的点乘积。 更具体地说,在色调平面的初始化过程中,按如下方式计算量化法向量。

NormalVector = (ScaleAndTruncate(-sin(hue))、 ScaleAndTruncate(cos(hue))

请注意,此向量是二维向量。 可以使用二维向量,因为色调平面是垂直的,因此法向量的第三个部分始终为零。 此外,将初始化点产品的查阅表格,使其具有来自 Gamut 边界三角形的每个顶点的条目,并将相应的点产品设置为无效值。

在与三角形相交的色调平面的一次作中,将查找三角形的每个顶点的点积。 如果查阅表格中的值为无效值,则使用以下表达式计算点积。

NormalVector.a*ScaleAndTruncate(顶点.a) + NormalVector.b*ScaleAndTruncate(顶点.b)

同样,永远不会使用顶点的 J 分量,因为正常向量是水平矢量。 然后,此点产品将保存在查阅表中,以便在稍后查询顶点的点积时不必再次计算它。

缓存允许快速确定边缘是否与平面相交,在查找表格中表格中以渐进方式构建的点产品之后,该表格在处理顶点时逐渐生成。

关系图,显示色调平面与三角形的交集。

图 28:将色调平面与三角形相交

若要使图 28 中的三角形在非退化折线段中交错色调平面,顶点的点积必须采用以下模式之一(按升序排序)。

0,0,+;-,0,0;-,0,+;-,-,+;-,+,+

当平面与点积中具有不同符号的顶点相交时,会出现线段的终点。 如果符号为零,则顶点位于平面上,边缘与平面的交集是顶点本身。 另请注意,情况为 0,0,0;-,-,0;未报告 0,+,+ 。 第一个案例(0,0,0)表示整个三角形位于飞机上。 未报告这一点,因为三角形的每个边缘都应属于不完全躺在飞机上的相邻三角形。 当考虑该三角形时,将报告边缘。 另外两种情况(-,-,0 和 0,+,+)对应于三角形在一个顶点中触摸平面的几何配置。 这些病例没有报告,因为它们不会导致非退化线段。

前面的算法确定何时计算三角形边缘与色调平面之间的交集。 确定边缘后,将使用参数公式计算交集。 如果其中一个点积为零,则交集是顶点本身,因此不需要计算。 假设边缘顶点的两个点积都是非零的,顶点 1 是具有 点积 dotProduct1 的顶点;和顶点 2 是 点积 dotProduct2 的顶点。 此顺序对于确保计算的交点不取决于顶点在边缘表示形式的显示方式。 边缘的几何概念与其顶点是对称的。 使用边缘参数公式的计算方面引入了不对称(起始顶点的选择),这可能会导致一个略有不同的交点,因为要解决的线性公式的数值干扰和调节。 话中说,交点、交集,由以下内容提供。

t = dotProduct1/(dotProduct1 - dotProduct2)

路口。J = 顶点 1。J + t * (顶点 2.J - 顶点 1。J)

交集.a = 顶点1.a + t * (顶点2.a - 顶点1.a)

交集.b = 顶点1.b + t * (顶点2.b - 顶点1.b)

游戏作: CheckGamut (继续)

用于游戏检查的基本几何算法是计算光线交叉次数。 对于给定的查询点,请考虑从查询点开始的光线,并向上指向(J 方向)。 计算此光线越过域边界的次数。 如果此数字为偶数,则查询点为无域。 如果此数字为奇数,则点位于内部。 原则上,此算法可以在三维中实现,通常受退化情况造成的困难困扰,例如边界三角形上的光线(部分)或下维退化(如边界三角形边缘的光线定位(部分)。 即使在 2-D 中,你也不得不处理这些退化的情况:但问题更简单,并以令人满意的方式加以解决。 请参阅 [O'Rourke]。

对于给定的输入点 Jab,请确定其色调角度 h,如下所示。

h = atan(b/a),

初始化色调平面,然后确定与此色调平面相对应的边界线元素。 由于边界线元素仅在它们与向上光线相交时才相关,因此请设置一个三角形筛选器来删除三角形,该三角形为绝对不会与向上光线相交的线条元素。 在这种情况下,请考虑三角形的边界框。 如果查询点位于边界框上方的“阴影”外,向上光线将不会交错三角形。 稍微膨胀一下,具有预先固定的容差,以允许数值干扰,以便你不会无意中丢弃可能提供有用线条元素的三角形。 结果是图 29 中显示的半无限矩形柱形。 检查查询点是否位于此缸内部还是外部,可以使用简单的不平等有效地实现。

显示 CheckGamut 的三角形筛选器。

图 29:CheckGamut 的三角形筛选器

CheckGamut 具有三个特定于域的作组件:内部处理的数据行元素处理器,以及 输出适配器内部处理的数据行元素处理器处理的行元素列表。 在这种情况下,Line 元素处理器 只需向列表中添加一个行元素。 内部处理数据 的内部数据结构可以是链接列表,也可以是可以增大大小的数组。

输出适配器 是访问线条元素列表的模块,确定线条元素是否越过向上光线(计数 1)(计数 0)。 求和所有这些计数可提供总计计数。 输出适配器 最终输出“是”(域内)或“否”(无)(域外)的答案,具体取决于总计数是奇数还是偶数。 确定线条元素是否越过向上光线的步骤值得一些关注,因为这是退化问题出现的地方,也出现了过度计数的问题。 在 [O'Rourke] 之后,要使线条元素越过光线,右终点(具有较大色度终点)必须严格地位于光线的右侧。 这可以保证,如果终点完全位于光线上,则只计算一次。 同一规则还解决了线元素完全位于光线上的退化情况。 不递增此行元素的计数。

图 30 显示了示例域的结果行元素,其中查询点位于各种位置。

关系图,其中显示了示例域的结果线条元素,查询点位于各种位置。

图 30:CheckGamut 的工作原理

最小颜色差异域映射

最小颜色差异域映射 MinDEMap 具有一个简单的规范:如果颜色处于色域内,则不执行任何作。 如果颜色不多,请将其投影到域边界上的“最接近”点。 在指定要使用的颜色差异公式之前,关键字“最接近”定义不明确。 在实践中,为了使计算更加简单快捷,所选颜色外观空间的 Euclidean 距离或它的变体用作颜色差异指标。 Euclidean 指标的优点是它与空间的点积兼容,这使得可以使用线性代数。 详细地说,如果在空间中定义了“点积”,则可以将距离定义为差向量本身的点积的平方根。 点积通常可由正 3x3 矩阵 A 定义。

u?v = u T Av

其中,右侧是通常的矩阵乘法。 如果 A 是标识矩阵,则会恢复标准点积。 实际上,如果 Jab 是颜色空间,则不想混合组件,因此可以使用标识矩阵以外的对角矩阵。 此外,你可能希望将比例保留为 a 和 b 不变,以便保留色调度量值。 因此,标准 Euclidean 点产品的有用变体如下。

w J (你的 J 组件) (v 的 J 组件) + (你的组件) + (你的组件) + (b 组件的 v)

其中 w J 为正数。 进一步的变体是让 w J 因输入查询点而异:

w J\ = w J (queryPoint)

最终结果是一种距离度量值,相对于两个点是不对称的,在输入查询点变化时,在光度和色度或色调上具有不同的相对权重。 这是根据一些关于人类颜色感知的观察,即颜色差异在所有维度中都不相等。 研究发现,人们对光性差异的敏感程度低于色调和色度的差异。

以下权重函数非常有用。

w J = k ー - k ₁ (C - C mₐₓ) n

其中 k ー = 1, k ₁ = 0.75/(C mₐₓ) n, C mₐₓ = 100, n = 2, C 是查询点的色度较小,C mₐₓ。

因此,当色度为零时,将权重 0.25 放在 J 术语上,当色度为 100 时,权重为 1。 当色度较小时,在 J 上降低权重的趋势,当色度较大时,J 的权重就越大,遵循 CMC 和CIEDE2000的建议用法。

Graph,显示指标 J 组件的权重函数。

图 31:指标 J 组件的权重函数

将 Jab 空间用于以下示例。 在计算上要求搜索所有边界三角形以确定 Euclidean 指标中最近的点。 下面是一种简单方法,使此过程尽可能高效,而无需引入其他假设,这些假设可能会加快该过程,但最终只得到近似答案。 首先,必须了解将点投影到给定三角形上的几何过程。 此处提供了说明。

首先对包含三角形的无限平面进行正交投影。 查询点与平面的最短距离可以通过两个步骤确定。

(a) 计算三角形的单位法向量。

(b) 计算单位法向量的点积,以及从查询点和三角形上的点构成的矢量;也就是说,它的顶点之一。 由于法向量具有单位长度,因此此点乘积的绝对值是查询点与平面之间的距离。

投影点可能不是答案,因为它可能位于三角形之外。 因此,必须首先执行检查。 计算等效于计算投影点相对于三角形的条心坐标。 如果投影点确定在三角形内部,则它是答案。 如果没有,则会在三角形的一个边缘上获取最近的点。 对三个边缘中的每个边缘执行搜索。 确定查询点到边缘的投影是类似于投影到三角形的过程,但一个维度更少。 首先计算正交投影。 如果投影点位于边缘,则答案是答案。 如果没有,则会在两个终结点之一上获取最接近的点。 对两个终结点执行搜索;也就是说,计算每个查询点的距离,并比较哪一个较小。

仔细检查显示,在浏览所有三角形时,有很多重复搜索,因为边缘始终由两个三角形共享,并且顶点至少由三个边缘共享。 此外,你对查找最接近一个特定三角形的点并不感兴趣;相反,你有兴趣找到最接近整个域边界的点。 但是,一个特定的三角形将是实现此目的的三角形。 有两种策略可用于加快搜索速度。

战略我。每个顶点最多处理一次。 每个边缘最多处理一次。

战略II。 在搜索的任何时刻,您都有一个具有相应最佳距离的最佳候选项。 如果可以通过快速检查来确定三角形无法提供更好的距离,则无需进一步继续计算。 不需要此三角形的最近点和距离。

显示最小 DE 映射流的 关系图。

图 32:最小 DE 映射示意图

图 32 显示了域映射 MinDEMap 的一般逻辑流。 对于查询点,首先调用 CheckGamut 函数。 如果点在域内,则地图为 no-op。 如果点不多,请调用 ProjectPointToBoundary。 现在转到图 33。 此时,假定已计算以下值。

(a) 单位法向量到每个域边界三角形相对于标准点积。

除了三角形列表之外,(b) 顶点列表和边缘列表。

显示“ProjectPointToBoundary”例程的 关系图。

图 33:ProjectPointToBoundary 例程

所有这些都是恒定的开销,如果对此域边界进行足够的查询,成本会降低。 通常,当你从一个设备生成转换 LUT 到另一个设备时,只有两个固定域,转换 LUT 在统一采样的网格上通过点运行。 你预先计算标准点乘积的法向量,即使垂直的概念将基于加权点积,这取决于前面所述的查询点。 原因是,与加权点积相关的普通向量可以从标准点积的正常向量中轻松获取。 如果 n ₀ 是标准点积的正常向量,则

n = (n ₀ /w J,n ₀ 的 a-component, b-component of n ₀)

与加权点积相关的三角形是正常的。 由于这种关系,尽管必须根据查询点进行调整,但预计算 n ₀ 仍然很有用。

ProjectPointToBoundary 例程首先重置顶点和边缘的“已处理历史记录”。 这些是布尔标志的表,用于跟踪之前是否访问顶点或边缘。 它还将变量 ShortestDistance 重置为“INFINITY”,这是所使用的浮点数系统中的最大编码值。 然后,它通过循环运行,使用 ProcessTriangle 调用从每个三角形中搜索最近的点。 ProcessTriangle 是更新 ShortestDistance 变量的例程,并且明显位于关键循环中。 一种优化是在结果足够好时停止。 每次调用 ProcessTriangle 后,都会检查变量 ShortestDistance。 如果满足预定义阈值,可以停止。 预定义阈值取决于所用颜色空间以及颜色成像系统所需的准确性。 对于典型应用程序,如果颜色差异小于人类视觉可以辨别的内容,则不希望执行不必要的工作。 对于CIECAM02,此颜色差异为 1。 但是,在实现中使用阈值 0.005 来保留计算的精度,因为这可能是转换链中的中间步骤。

ProcessTriangle 实现上述策略 II。 从预计算单元法向量获取到标准点乘积的三角形的正向量,它通过形成单位法向量的点乘积和 queryVector(从三角形的顶点之一的向量)计算查询点到包含三角形的无限平面的距离, 顶点 1,到查询点 queryPoint。

queryVector = queryPoint - 顶点 1

distance = |normalVector * queryVector |/||normalVector||

这是一个相对便宜的计算,执行进一步计算需要距离。 如果此距离不小于当前最佳距离,最短距离,此三角形不会产生更好的距离,因为它不会给出比包含它的平面更好的距离。 在这种情况下,将控制权返回到三角形循环。 如果距离小于 ShortestDistance,则有可能,如果此点位于三角形内,则你有一个更近的点。 必须执行一些“硬”计算(尽管没有超出线性代数)才能确定这一点。 如果三角形的其他两个顶点为顶点 2 和顶点3,则形成基础向量 firstBasisVector 和 secondBasisVector。

firstBasisVector = vertex2 - vertex1

secondBasisVector = vertex3 - vertex1

使用以下线性公式系统为未知和 v 求解。

firstBasisVector * queryVector = (firstBasisVector * firstBasisVector)u + (firstBasisVector * secondBasisVector)v

secondBasisVector * queryVector = (secondBasisVector * firstBasisVector)u + (secondBasisVector * secondBasisVector)v

投影点位于三角形内的条件如下:

0 ≤ u ≤ 1,0 ≤ v ≤ 1,你 + v ≤ 1

计算后,如果确定投影点位于三角形内,则找到一个新的最近点:在开始处计算的距离是最新的最短距离。 在这种情况下,更新变量 ShortestDistance 和 ClosestPoint。 如果投影点位于三角形之外,则可能在其一个边缘上找到更近的点。 因此,可以在三个边缘中调用 ProcessEdge 例程。

关系图,显示 ProcessEdge 和 ProcessVertex 例程的流。

图 34:ProcessEdge 和 ProcessVertex 例程

ProcessEdge 例程实现策略 I,如图 34 所示。 ProcessEdge 首先检查是否已处理边缘。 如果是这样,则不采取进一步行动。 否则,它会继续计算查询点的正交投影到包含边缘的无限行上。 计算中涉及的线性代数类似于前面的三角形公式。 但是,计算更简单,此处未介绍。 如果投影点位于边缘内,则找到投影点与查询点之间的距离。 如果此距离小于 ShortestDistance,则已找到一个新的最接近点。 更新 ShortestDistance 和 ClosestPoint。 如果投影点位于边缘之外,请对两个终点调用 ProcessVertex。 在返回控件之前,请更新边缘历史记录,使此边缘标记为“已处理”。

最后,请提供 ProcessVertex 的说明。 ProjectVertex 例程还实现策略 I 并维护顶点历史记录表。 如图 34 所示,它首先检查是否已处理顶点之前。 如果是这样,则不采取进一步行动。 否则,它会继续计算顶点与查询点之间的距离。 如果距离小于 ShortestDistance,请更新 ShortestDistance 和 ClosestPoint。 最后,它会更新顶点历史记录,以便此顶点标记为“已处理”。

当外部控制循环耗尽所有三角形或在满足颜色差阈值之前退出时,将访问变量 ClosestPoint。 这是 MinDEMap 的结果。 如果对映射的颜色距离查询颜色的距离感兴趣,调用方还可以检索 ShortestDistance。

色调平滑

关系图,其中显示了色调平滑的两个顶部视图,顶部的原始视图和底部的色调平滑。

图 35:色调平滑

出现色调约束的作时出现问题;也就是说,该作只考虑色调平面中的变量。 图 35 显示了一个在蓝色色调中表现出“不连续”色调切片的域的示例。 在此色调范围内,对于某些色调角度,域边界与色调平面是正切的。 实际上,这会导致色调切片的拓扑结构发生变化。 在所示的示例中,当色调平面横扫此色调范围时,会出现一个“岛”并淹没。 拓扑中的此更改将导致特定于色调的作中断。 例如,固定色调的提示会突然更改,因为色调角度在此范围内发生变化。

有一个颜色科学的原因,为什么它需要保留色调在某些作。 若要解决上述问题,原始 Gamut 边界三角形必须“色调平滑”。一般来说,一组 Gamut 边界三角形的色调平滑是一组三角形,以便(a)它形成新的“域”的边界,这可能与实际设备域不对应,并且包含原始三角形集定义的域:和 (b) 新集中的三角形与色调平面平行。

获取色调平滑三角形集的一种实用方法是采用原始顶点的凸体。 如图 35 所示,凸体外壳的色调切片在有问题的色调范围内平稳变化,拓扑不会发生突然变化。

在 Gamut 边界说明中设置主要副本和辅助副本

某些域映射方法(如 HueMap)取决于设备主数据库和辅助数据库的位置。 对于累加设备,初选为红色、绿色和蓝色(R、G 和 B):辅助数据库为青色、洋红和黄色(C、M 和 Y)。 对于减数设备,主要设备为 C、M 和 Y;和辅助数据库是 R、G 和 B。GBD 在 Jab 颜色值的数组中跟踪所有六个值,以及白色和黑色(W 和 K)。 创建这些值时,这些值将设置为域边界说明。 对于输出设备,主要内容可以通过通过设备模型运行设备控制值的组合来确定。 对于捕获设备,此方法不适合创建引用 GBD,因为几乎无法捕获生成完全饱和纯设备值的映像,例如(0.0、0.0、1.0)。 WCS 设备配置文件包含捕获目标中主要项的索引。 由于这些值不包含在 ICC 配置文件中,因此使用从典型扫描程序目标转换为 Jab 后相对于 ICC 查看条件的值。

在域边界说明中设置中性轴

HueMap 和相对 MinCD 域映射方法使用设备中性轴进行直化。 对于基线输出设备,可以通过通过 DeviceToColorimetric 方法运行设备中性值(R=G=B 或 C=M=Y),然后通过 CIECAM02 对象的 ColorimetricToAppearance 方法来确定中性轴。 但是,捕获设备在显示中性样本时并不总是返回设备中性值。 当环境照明不完全中性时,这尤其如此。 WCS 设备配置文件包含目标中性样本的索引。 使用这些样本设置中性轴。 由于此信息不适用于 ICC 配置文件,因此必须使用用于输出设备的相同方法;通过 DeviceToColorimetric 方法运行设备中性示例,然后将输入值和着色结果耦合在一起。

基本颜色管理概念

Windows 颜色系统架构和算法