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

概述

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

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

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

Gamut Map 模型配置文件体系结构

显示 Gamut Map 模型配置文件的示意图。

输出设备着色剂空间的采样是通过使用小数步骤循环访问从 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 是从用于初始化设备模型的度量值生成的。 生成的合理 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。

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

命名空间

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 PlugIn DLL GUID。 最多有 100,000 个自定义子元素。

ExtensionType

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

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

GMMP 基线算法

对齐中性轴

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

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

虽然 CAM 预测这些设备中性颜色将显示彩色,但实际观察者似乎可以弥补这一点。 大多数人不认为这些设备中性值是彩色的。 因此,对于大多数域映射模型,应继续将源中性映射到设备中性。

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

显示左侧的“源范围边界”图和右侧的“目标范围边界”的示意图。

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

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

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

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

显示用于撤消目标设备中性轴对齐的图形的示意图。

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

最小颜色差异 (MinCD)

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

注意

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

 

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

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

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

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

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

BasicPhoto

概述

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

此算法是 CIE TC8-03 在 CIE156:2004 中由 CIE TC8-03 描述 (SGCK) 依赖于色的西面体亮度映射和 cusp 膝盖缩放的变体。 此变体算法支持具有双域外壳) (GBD 的域边界描述符;即具有引用 shell 和合理 shell 的 GBD。 SGCK 算法,最初在 GBD 中只假定一个域外壳, 基于布劳恩 1999) (SIG_KNEE算法,该算法结合了 Braun 和 Fairchild (1999) 提出的 sigmoid 轻度映射和膝盖函数缩放,以及 1998) 年 GCUSP (Morovic 的色度依赖。 它保持感知的色调恒定,例如,色调更正的 Jab 中的色调角度,并使用通用 (图像无关) sigmoid 亮度缩放,该缩放以色度相关方式应用,膝盖功能色度为 90%。 变体沿恒定亮度线缩放。

单范围外壳的情况

如果源 GBD 和目标 GBD 只有一个域 shell,则查看算法会很有帮助。 在本例中,算法由以下计算组成。

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

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

其中 Jₒ 是原始亮度, JR 是重现亮度。

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

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

pC 是 Morovic (1998) 取决于原始颜色的色度,C 和 JS 是使用 sigmoid 函数映射原始亮度的结果。

 

为了计算 JS (Braun 和 Fairchild,1999) ,首先基于离散累积法线函数 (S) ,在原始和再现光度值之间 (LUT) 的一维查找表。

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

其中 x ₀ 和 S 分别是正态分布的平均值和标准偏差, i = 0,1,2... mm 是 LUT 中使用的点数。 Sii /m % 的累积法线函数的值。 参数取决于复制范围黑点的亮度,可以从表 1 进行内插。 有关计算这些参数的详细信息,请参阅 Braun 和 Fairchild (1999,第 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 :基本光度压缩参数计算

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

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

此时,可以通过在包含的相应 J O'J S 值的 m 点之间进行内插,并使用以下等式作为输入,从 S LUT 获取 J S 值。

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

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

显示沿恒定亮度进行色度映射的图的示意图。

图 4 :沿恒定亮度的色度映射

其次,如果目标色域边界为色度,则沿恒定亮度 (l) 的线压缩色度,并按如下所示执行压缩。

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

其中 d 表示 lE 的距离;g 表示中等范围边界;r 表示重现;和 o 原始图 5。

显示 BasicPhoto 中色度和亮度压缩图的示意图。

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

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

第三,使用前面) 所述的 MinCD 剪辑 (,以消除任何剩余错误。

黑色增强功能

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

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

显示设备黑点可能比中性最低亮度更暗的示意图。

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

假设目标“设备黑点”为 Jkakbk/JkCkh k。 如果 C k 不为零,则相对于 CAM02,设备黑点不是中性点。 如果在轻型缩放器的构造中将 J k 用于目标“中性最小亮度”;即,设置

JminOut = Jk

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

显示具有目标设备黑点的修改光度缩放器的示意图。

图 7 :使用经过修改的光度缩放器的几何图形,并带有目标设备黑点

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

转换为

显示转换的公式。

图 8 显示了转换的效果。

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

图 8 :使用经过修改的光度缩放器的几何图形,并带有目标设备黑点

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

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

双域外壳的情况

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

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

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

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

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

案例 (d) 是前面讨论的单域外壳的情况。 对于 () 、 (b) 和 (c) 的情况,可以通用化亮度重新缩放,以使用双外壳结构中的额外信息。 如果 (b) 和 (c) 源或目标只有一个 shell,请引入一个“引入的引用 shell”,这将在后续部分“引入的引用 Shell”中讨论。两个 shell 的常规算法将针对) (的情况进行说明。 解释引入的参考 Shell 构造后,该算法也可以应用于 case (b) 和 (c) 。 至于色度压缩,压缩比将由可用的最大外壳决定。 换句话说,如果合理 Shell 和 Reference Shell 都可用,则将使用合理 Shell;否则,将使用引用 Shell。

通用亮度重新缩放

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

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

下标具有以下含义。

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

最小值或最大值:最小中性亮度或最大中性亮度

pla 或 ref:合理 Shell 或 Reference Shell

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

亮度重新缩放贴图使用与单个 shell 相同的前两个公式,但按如下方式对 J S 进行分段定义。

分片显示 J S 的公式。 (7)

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

此图显示了双 shell GBD 的 Lightness Rescaling 函数的图。

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

诱导的参考 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 的算法。

因素? low 和 ? 高度 控制合理 Shell 和 Reference 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。

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

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

同样,因素? low 和 ? high 控制合理 Shell 和 Reference Shell 之间的分离。 值为 1 表示 J min 值或 J mₐₓ 值重合。 它们的值是从源引用 Shell 和源可信 Shell 中“诱导”的:

显示用于控制 Reference 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 结果。 显示茶壶图像的 BasicPhoto 结果。

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

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

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

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

图 12 :增强型黑色

第三项更改是为了改进数码相机的颜色再现。 特别是在使用参考目标分析数码相机的情况下,根据测量颜色生成的色域边界说明可能不包括可能在真实场景中捕获的所有颜色。 无需将所有颜色剪裁到测量颜色目标的色域,而是允许推断生成合理的色域边界。 BasicPhoto 算法旨在支持这种推断的域边界。

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

色调映射

HueMap 等效于 ICC 饱和意向。

如果源范围边界或目标范围边界不包含原点,则此模型将还原为 MinCD (上一部分所述的相对) 模型;例如,无法确定主要参数的设备 (具有四个以上通道) 或单色 ICC 配置文件的 ICC 配置文件。

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

第一步是确定“色调轮”。查找源和目标设备的主要颜色和辅助颜色的 JCh 值。 你只考虑色调组件。 这会生成一个主色调轮或辅助色调轮,每个设备具有六个色点。 (见图 13.)

显示具有六个色点的色调轮的关系图。

图 13 :色调轮

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

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

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

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

一般情况下,源主副本和辅助副本的色调角度与目标主要副本和辅助副本不同;也就是说,目标色调角度通常与源色调角度不同。

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

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

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

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

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

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

显示色调叶的关系图。

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

下一步是计算每个像素的剪切映射。 首先,将源色域的色调叶可视化为源色相角度,将目标色域中的色调叶可视化为在色调旋转期间计算的目标色调角度。 色调叶是通过从 JCh 色域边界表面以特定色调角度进行“切片”创建的 (请参阅图 14) 。

注意:出于性能优化原因,实际上未创建色调叶;此处仅出于可视化目的对它们进行描述和显示。 这些操作直接在指定色调的色域边界图面上执行。 然后计算色调参考点以确定剪切映射。

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

显示亮度映射的关系图。

图 15 :亮度映射

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

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

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

factorC = (destinationC / referenceC) ? 0.5

其中:

destinationC 是目标点的 C 值。

referenceC 是 Hue 引用点的 C 值。

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

  1. 计算相对于引用J 的目标点的“factorJ”。 如果引用J 上,此 factorJ 值将介于 0 到 1 (0 之间;如果为 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) ) ? (参考J - minJ)

destinationJ = destinationJ + (deltaJ?factorC)

其中:

minJ 是域的最小 J 值。

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

显示剪切映射以匹配色调参考点的示意图,在左侧剪切之前,在右侧剪切之后。

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

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

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

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

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

  4. 调整 destinationC (目标点的色度) ,以适应此亮度和色调的目标色度范围。

  5. destinationC = destinationC ? (destExtentC / sourceExtentC)

    其中:

    destinationC 是目标点 C 值。

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

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

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

显示最小距离剪裁的示意图。

图 17 :最小距离剪切

Gamut 边界说明和 Gamut Shell 算法

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

此方法有许多众所周知的解决方案。 如果在 Web 上搜索“凸外壳 DirectX”,则会收到超过 100 次命中。 例如,有1983年关于此特定主题的参考 (计算机图形理论和应用,“Shiphulls,b-样条表面和 cadcam”,第34-49页) ,其中引用了1970年到1982年的主题。

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

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

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

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

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

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

包含主要内容是为了提供业务图形意向类型域映射。

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

由于输入图像是为输入设备呈现的,因此所有颜色都适合在媒体的白点和黑点之间的范围内。 假设该图像是一个场景的照片,其中有一个漫射的白色,例如身穿白色T恤的人,以及一个反射高光(如从窗口反射的光或镀膜保险杠)。 场景将呈现为输入介质,以便反射高光映射到介质的白点,漫射白色映射到比介质的白点更深的一些中性色。 选择如何将颜色从场景映射到输入介质既是一个依赖于场景的决策,也是一个美学决策。 如果原始场景中缺少反射高光,则漫射白色可能会映射到介质的白点。 在具有大量高光细节的场景中,高光白色和漫射白色之间将留下更多范围。 在高光不重要的场景中,可能只剩下很少的范围。

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

并非所有颜色编码都会限制输入图像的颜色范围。 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 范围内。

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

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

第三个问题涉及音调映射。 已经提出了许多可以充分表示图形艺术中使用的预渲染图像的域边界模型,例如布劳恩和费尔柴尔德山脉 GBD (布劳恩[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 必须解决的第四个问题是,当色度 = 0.0) 时,设备产生的视觉灰色(例如,当显示器上的 red=green=blue)通常不会落在 CAM (的中性轴上。 这给 GMA 带来很大的困难。 若要使 GMA 正常工作,必须调整设备范围和输入点的说明,使设备的中性轴落在外观空间的中性轴上。 必须按类似的量调整中性轴上的点。 否则,无法通过图像进行平滑渐变。 在离开 GMA 时,撤消相对于输出设备的中性轴的映射。 这称为轴的“脊椎”拉直。 像脊医一样,你不仅将骨架 (中性轴) 拉直,还可以调整身体的其余部分,以与骨架一起移动。 像脊医一样,你不会在整个空间中调整相同的骨架量。 相反,你以不同的方式调整不同的分区。

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

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

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

显示三个域外壳的关系图。

图 20 :三个域外壳

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

在新的 CTE 中,由设备范围中的采样点制成的凸外壳形成域的外壳。 船体是通过获取一组样本点并通过表面包围它们而形成的。 凸壳具有随处凸起的额外属性。 因此,这不是可以容纳数据的最小外壳。 但实验表明,过于紧密地拟合样本点会导致图像中没有吸引力的伪像,例如缺乏平滑的底纹。 凸壳似乎解决了这些问题。

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

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

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

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

下图 21 显示了通过合理和参考范围中心运行的设备中性值。

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

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

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

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

显示具有两个未折叠域描述符的 GM A 的示意图。

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

如果将输入设备(例如具有反射目标特征的相机或扫描仪)映射到 scRGB 空间,则可能会看到此示例。 此处,比参考白色更浅的合理颜色是反射高光。 在实践中,使用目标来描述相机的特征可能不会生成相机中可能的全部值范围;然而,在自然界中发现的反射高光和非常彩色的颜色会。 (透射目标通常具有介质上可能的最小密度的补丁。使用此类目标时,反射高光将位于目标范围内。) 反射目标的参考黑色将是阴影黑色区域的开始。 也就是说,阴影中的颜色可能比目标上的黑色更暗。 如果图像在该区域中包含大量有趣的内容,则保留该色调变化可能值得。

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

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

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

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

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

最后,两个设备都只有参考范围,这是大多数域映射算法的工作方式。 因此,只需回退到当前算法即可解决此问题。 或者,如果你有一种合理的方法来确定源和目标设备的五个参考点,则可以安排映射参考点。

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

到目前为止,在本讨论中,已将域视为它只是创建、捕获或显示图像的设备的功能。 但是,没有理由设备的所有图像必须具有相同的域。 GMA 取决于 GBD 中的数据。 如果在图像之间更改了描述符,则 GVA 无法知道。 特别是,如果图像没有反射高光,如果色域描述符未显示有比漫射白色更浅的颜色,则 GMA 的性能更好。

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

设备色域边界函数采用设备模型引擎和分析参数,并派生一个彩色设备范围边界,该边界描述为设备色域凸壳的有序顶点列表。 有序顶点列表存储在 CIEJab 中。 有序顶点列表的结构由 DirectX 针对硬件加速进行优化。 此方法有许多众所周知的解决方案 (搜索 Web 上的“凸壳 DirectX”,) 命中率超过 100 次。 还有1983年关于这一主题的参考 (计算机图形理论和应用,“船形,b-样条表面和 cadcam”第34-49页) ,参考可追溯到1970年到1982年。

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

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

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

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

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

中性轴上具有“间隙”的域图。

图 25 :打印机可能具有在其中性轴上具有“间隙”的域。 当色调切片 (只有平面) 的一半时,边界部分是中性轴的“凹痕”。 这在算法上可能很难解决。

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

域边界的三角测量

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

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

图 26 :使用 RGB 作为设备空间对设备的色域边界进行三角测量的简单方法

边界线元素

此框架的核心是边界线元素的概念:一组 () 的线段位于范围边界上, (b) 位于平面上。 在本例中,平面是色调平面。 每个线段都是将平面与一个域边界三角形相交的结果。 尽管许多研究人员已经使用与边界三角形相交平面的构造,但他们通常分析这些线段之间的关系,并尝试从线段构造一个相干的几何对象。 设计了不同的算法,以逐个跟踪这些线段,直到获得整个色调切片,并多次尝试加快搜索过程。

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

Gamut 操作:CheckGamut

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

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

显示支持游戏操作的流的示意图。

图 27 :用于支持域操作的框架

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

全色调平面:相交

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)

intersection.a = vertex1.a + t * (vertex2.a - vertex1.a)

intersection.b = vertex1.b + t * (vertex2.b - vertex1.b)

域操作:CheckGamut (继续)

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

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

h = atan (b/a) ,

初始化色调平面,然后确定与此色调平面对应的边界线元素。 由于边界线元素仅在它们与向上光线相交时才相关,因此设置一个三角形筛选器以删除三角形,这些三角形提供绝对不会与向上光线相交的线条元素。 在这种情况下,请考虑三角形的边界框。 如果查询点位于边界框投射的“阴影”之外,如果光源正上方,则向上射线不会与三角形相交。 使用预先固定的容差稍微膨胀,以允许数字噪音,以免无意中丢弃可能提供有用线条元素的三角形。 结果是图 29 所示的半无限矩形圆柱体。 可以使用简单的不均值有效地实现查询点是在此柱形内部还是外部。

显示 CheckGamut 的三角形筛选器。

图 29 :CheckGamut 的三角形筛选器

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

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

图 30 显示了样本范围的结果线条元素,查询点位于不同位置。

显示样本范围的结果线条元素的关系图,其中查询点位于不同位置。

图 30 :CheckGamut 的工作原理

最小色差色域映射

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

u?v = u T Av

其中右侧是常用的矩阵乘法。 如果 A 是标识矩阵,则恢复标准点积。 实际上,如果 Jab 是颜色空间,则你不希望混合分量,因此可以使用标识矩阵以外的对角矩阵。 此外,你可能希望保持 a 和 b 上的刻度不变,以便保留色调的度量值。 因此,标准欧几里得点积的一个有用变体如下。

w J (j component of you) (j component of v) + (的组件) (v) 组件 + (b component of you) (b component of 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 的建议用法。

显示指标 J 分量的权重函数的图。

图 31 :指标 J 分量的权重函数

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

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

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

(b) 计算单位法线向量和从查询点和三角形上的点形成的矢量的点积;即其顶点之一。 由于法向量具有单位长度,因此此点积的绝对值是查询点与平面的距离。

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

仔细检查发现,在浏览所有三角形时,会进行大量重复搜索,因为一个边缘始终由两个三角形共享,一个顶点至少由三个边缘共享。 此外,你对查找离一个特定三角形最近的点不太感兴趣;相反,你有兴趣查找最接近整个范围边界的点。 但是,一个特定的三角形将是实现此目的的三角形。 可以使用两种策略来加快搜索速度。

策略 I.每个顶点最多处理一次。 每个边缘最多处理一次。

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

显示最小 DE 映射流的示意图。

图 32 :最小 DE 映射示意图

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

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

(b) 顶点列表和边缘列表,以及三角形列表。

显示“ProjectPointToBoundary”例程的示意图。

图 33 :ProjectPointToBoundary 例程

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

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

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

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

ProcessTriangle 实现前面的策略 II。 获取从预先计算的单位法向量到三角形相对于标准点积的法线向量,它通过形成单位正态向量和 queryVector(三角形顶点之一的向量)的点积来计算查询点与包含三角形的无限平面的距离, vertex1,查询点 queryPoint。

queryVector = queryPoint - vertex1

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

这是一个相对便宜的计算,需要距离来执行进一步的计算。 如果此距离不小于当前最佳距离 ShortestDistance,则此三角形不会产生更好的距离,因为它不会提供比包含它的平面更好的距离。 在本例中,将控制权返回到三角形循环。 如果距离小于 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 显示了一个区域的示例,该色域以蓝色色调显示“非连续”色调切片。 在此色调范围内,对于某些色调角度,色域边界与色调平面是正切的。 实际上,这会导致色调切片的拓扑结构发生变化。 在所示的示例中,当色调平面横扫此色调范围时,会出现一个“岛”并淹没。 拓扑中的此更改将导致特定于色调的操作不连续。 例如,固定色调处的尖点将随着色调角度在此范围内的变化而突然变化。

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

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

在范围边界说明中设置主副本和辅助副本

某些范围映射方法(如 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 方法,然后通过 CIECAM02 对象的 ColorimetricToAppearance 方法运行设备中性值 (R=G=B 或 C=M=Y) 来确定中性轴。 但是,当提供非特定样本时,捕获设备并不总是返回设备中性值。 当环境照明不是完全中性的时,尤其如此。 WCS 设备配置文件包含目标中性样本的索引。 使用这些样本设置中性轴。 由于此信息不适用于 ICC 配置文件,因此必须使用用于输出设备的相同方法;通过 DeviceToColorimetric 方法运行设备中性样本,然后将输入值和色度结果相耦合。

基本颜色管理概念

Windows 颜色系统架构和算法