WCS 颜色设备模型配置文件架构和算法

本主题提供有关 WCS 颜色设备模型配置文件架构及其关联算法的信息。

本主题包含以下各节:

概述

此架构用于指定颜色设备模型配置文件的内容 (CDMP) 。 下面介绍了关联的基线算法。

DMP) 架构 (基本设备模型配置文件由采样测量数据组成。

DMP XML 架构的采样组件为基本颜色测量目标提供支持,侧重于针对基线设备模型优化的常见标准目标和目标。

此外,设备配置文件提供有关目标设备模型的特定信息,并提供基线回退设备模型在目标模型不可用时可以使用的策略。 配置文件实例可以包含使用标准 XML 扩展机制的专用扩展。

颜色设备模型配置文件体系结构

显示构成设备模型配置文件的信息的关系图。

CDMP 架构

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

  <xs:annotation>
    <xs:documentation>
      Color Device 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:complexType name="RGBType">
    <xs:attribute name="R" type="xs:float" use="required"/>
    <xs:attribute name="G" type="xs:float" use="required"/>
    <xs:attribute name="B" type="xs:float" use="required"/>
  </xs:complexType>

  <xs:complexType name="NonNegativeRGBType">
    <xs:attribute name="R" type="wcs:NonNegativeFloatType" use="required"/>
    <xs:attribute name="G" type="wcs:NonNegativeFloatType" use="required"/>
    <xs:attribute name="B" type="wcs:NonNegativeFloatType" use="required"/>
  </xs:complexType>

  <xs:complexType name="NonNegativeCMYKType">
    <xs:attribute name="C" type="wcs:NonNegativeFloatType" use="required"/>
    <xs:attribute name="M" type="wcs:NonNegativeFloatType" use="required"/>
    <xs:attribute name="Y" type="wcs:NonNegativeFloatType" use="required"/>
    <xs:attribute name="K" type="wcs:NonNegativeFloatType" use="required"/>
  </xs:complexType>
  
  <xs:complexType name="NonNegativeRGBSampleType">
    <xs:sequence>
      <xs:element name="RGB" type="cdm:NonNegativeRGBType"/>
      <xs:element name="CIEXYZ" type="wcs:NonNegativeCIEXYZType"/>
    </xs:sequence>
    <xs:attribute name="Tag" type="xs:string" use="optional"/>
  </xs:complexType>
  
  <xs:complexType name="NonNegativeCMYKSampleType">
    <xs:sequence>
      <xs:element name="CMYK" type="cdm:NonNegativeCMYKType"/>
      <xs:element name="CIEXYZ" type="wcs:NonNegativeCIEXYZType"/>
    </xs:sequence>
    <xs:attribute name="Tag" type="xs:string" use="optional"/>
  </xs:complexType>
  
  <xs:group name="RGBPrimariesGroup">
    <xs:sequence>
      <xs:element name="WhitePrimary" type="wcs:NonNegativeCIEXYZType"/>
      <xs:element name="RedPrimary" type="wcs:NonNegativeCIEXYZType"/>
      <xs:element name="GreenPrimary" type="wcs:NonNegativeCIEXYZType"/>
      <xs:element name="BluePrimary" type="wcs:NonNegativeCIEXYZType"/>
      <xs:element name="BlackPrimary" type="wcs:NonNegativeCIEXYZType"/>
    </xs:sequence>
  </xs:group> 
  
  <xs:complexType name="MeasurementConditionsType">
    <xs:annotation>
      <xs:documentation>
      Optional measurement conditions. 
       
      We only support CIEXYZ for measurement color space in this version. 
      If the white point value from the measurement conditions is not available, 
      the default processing will use
        - "D50" for printer and scanners
        - "D65" for camera and displays.          
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="ColorSpace" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="CIEXYZ"/>
          </xs:restriction>
        </xs:simpleType>    
      </xs:element>
      <xs:choice minOccurs="0">
        <xs:element name="WhitePoint" type="wcs:NonNegativeCIEXYZType"/>
        <xs:element name="WhitePointName">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="D50"/>
              <xs:enumeration value="D65"/>
              <xs:enumeration value="A"/>
              <xs:enumeration value="F2"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
      </xs:choice>
      <xs:element name="Geometry" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="0/45"/>
            <xs:enumeration value="0/diffuse"/>
            <xs:enumeration value="diffuse/0"/>
            <xs:enumeration value="direct"/>
          </xs:restriction>
        </xs:simpleType>   
      </xs:element>
      <xs:element name="ApertureSize" type="xs:int" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="DisplayMeasurementType">
    <xs:sequence>
      <xs:group ref="cdm:RGBPrimariesGroup"/>
      <xs:element name="GrayRamp">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Sample" type="cdm:NonNegativeRGBSampleType" maxOccurs="4096"/> 
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="RedRamp">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Sample" type="cdm:NonNegativeRGBSampleType" maxOccurs="4096"/> 
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="GreenRamp">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Sample" type="cdm:NonNegativeRGBSampleType" maxOccurs="4096"/> 
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="BlueRamp">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Sample" type="cdm:NonNegativeRGBSampleType" maxOccurs="4096"/> 
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="TimeStamp" type="xs:dateTime"/>
  </xs:complexType>

  <xs:complexType name="RGBProjectorMeasurementType">
    <xs:sequence>
      <xs:group ref="cdm:RGBPrimariesGroup"/>
      <xs:element name="ColorSamples">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Sample" type="cdm:NonNegativeRGBSampleType" maxOccurs="unbounded"/> 
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="TimeStamp" type="xs:dateTime"/>
  </xs:complexType>

  <xs:simpleType name="OneBasedIndex">
    <xs:restriction base="xs:int">
      <xs:minInclusive value="1"/>
    </xs:restriction>
  </xs:simpleType>
    
  <xs:complexType name="RGBCaptureMeasurementType">
    <xs:sequence>
      <xs:element name="PrimaryIndex">
        <xs:complexType>
          <xs:all>
            <xs:element name="White" type="cdm:OneBasedIndex"/>
            <xs:element name="Black" type="cdm:OneBasedIndex" minOccurs="0"/>
            <xs:element name="Red" type="cdm:OneBasedIndex" minOccurs="0"/>
            <xs:element name="Green" type="cdm:OneBasedIndex" minOccurs="0"/>
            <xs:element name="Blue" type="cdm:OneBasedIndex" minOccurs="0"/>
            <xs:element name="Cyan" type="cdm:OneBasedIndex" minOccurs="0"/>
            <xs:element name="Magenta" type="cdm:OneBasedIndex" minOccurs="0"/>
            <xs:element name="Yellow" type="cdm:OneBasedIndex" minOccurs="0"/>
          </xs:all>
        </xs:complexType>
      </xs:element>
      <xs:element name="NeutralIndices">
        <xs:simpleType>
          <xs:list itemType="cdm:OneBasedIndex"/>
        </xs:simpleType>
      </xs:element>
      <xs:element name="ColorSamples">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Sample" type="cdm:NonNegativeRGBSampleType" maxOccurs="unbounded"/> 
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="TimeStamp" type="xs:dateTime"/>
  </xs:complexType>

  <xs:complexType name="RGBPrinterMeasurementType">
    <xs:sequence>
      <xs:element name="ColorCube">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Sample" type="cdm:NonNegativeRGBSampleType" maxOccurs="unbounded"/> 
          </xs:sequence>
        </xs:complexType>
      </xs:element>       
    </xs:sequence>
    <xs:attribute name="TimeStamp" type="xs:dateTime"/>
  </xs:complexType>
  
  <xs:complexType name="CMYKPrinterMeasurementType">
    <xs:sequence>
      <xs:element name="ColorCube">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Sample" type="cdm:NonNegativeCMYKSampleType" maxOccurs="unbounded"/> 
          </xs:sequence>
        </xs:complexType>
      </xs:element>       
    </xs:sequence>
    <xs:attribute name="TimeStamp" type="xs:dateTime"/>
  </xs:complexType>

  <xs:complexType name="GammaType">
    <xs:attribute name="value" type="wcs:NonNegativeFloatType" use="required"/>
  </xs:complexType>
  
  <xs:complexType name="GammaOffsetGainType">
    <xs:attribute name="Gamma" type="wcs:NonNegativeFloatType" use="required"/>
    <xs:attribute name="Offset" type="wcs:NonNegativeFloatType" use="required"/>
    <xs:attribute name="Gain" type="wcs:NonNegativeFloatType" use="required"/>
  </xs:complexType>

  <xs:complexType name="GammaOffsetGainLinearGainType">
    <xs:attribute name="Gamma" type="wcs:NonNegativeFloatType" use="required"/>
    <xs:attribute name="Offset" type="wcs:NonNegativeFloatType" use="required"/>
    <xs:attribute name="Gain" type="wcs:NonNegativeFloatType" use="required"/>
    <xs:attribute name="LinearGain" type="wcs:NonNegativeFloatType" use="required"/>
    <xs:attribute name="TransitionPoint" type="wcs:NonNegativeFloatType" use="required"/>
  </xs:complexType>
  
  <xs:simpleType name="FloatList">
    <xs:list itemType="xs:float"/>
  </xs:simpleType>

  <xs:complexType name="OneDimensionLutType">
    <xs:sequence>
      <xs:element name="Input" type="cdm:FloatList"/>
      <xs:element name="Output" type="cdm:FloatList"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="HDRToneResponseCurvesType">
    <xs:sequence>
      <xs:element name="RedTRC" type="cdm:OneDimensionLutType"/>
      <xs:element name="GreenTRC" type="cdm:OneDimensionLutType"/>
      <xs:element name="BlueTRC" type="cdm:OneDimensionLutType"/>
    </xs:sequence>
    <xs:attribute name="TRCLength" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:int">
          <xs:minInclusive value="0" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  
  <xs:complexType name="GamutBoundarySamplesType">
    <xs:sequence>
      <xs:element name="RGB" type="cdm:RGBType" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="RGBVirtualMeasurementType">
    <xs:sequence>
      <xs:element name="MaxColorantUsed" type="xs:float"/>
      <xs:element name="MinColorantUsed" type="xs:float"/>
      <xs:group ref="cdm:RGBPrimariesGroup"/>
      <xs:choice>
        <xs:element name="Gamma" type="cdm:GammaType"/>
        <xs:element name="GammaOffsetGain" type="cdm:GammaOffsetGainType"/>
        <xs:element name="GammaOffsetGainLinearGain" type="cdm:GammaOffsetGainLinearGainType"/>
        <xs:element name="HDRToneResponseCurves" type="cdm:HDRToneResponseCurvesType"/>
      </xs:choice>
      <xs:element name="GamutBoundarySamples" type="cdm:GamutBoundarySamplesType" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="TimeStamp" type="xs:dateTime"/>
  </xs:complexType>
  
  <xs:element name="ColorDeviceModel">
    <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="MeasurementConditions" type="cdm:MeasurementConditionsType" minOccurs="0"/>
        <xs:element name="SelfLuminous" type="xs:boolean" />
        <xs:element name="MaxColorant" type="xs:float"/>
        <xs:element name="MinColorant" type="xs:float"/>
        <xs:choice>
          <xs:element name="CRTDevice">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="MeasurementData" type="cdm:DisplayMeasurementType"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="LCDDevice">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="MeasurementData" type="cdm:DisplayMeasurementType"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="RGBProjectorDevice">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="MeasurementData" type="cdm:RGBProjectorMeasurementType"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="ScannerDevice">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="MeasurementData" type="cdm:RGBCaptureMeasurementType"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="CameraDevice">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="MeasurementData" type="cdm:RGBCaptureMeasurementType"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="RGBPrinterDevice">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="MeasurementData" type="cdm:RGBPrinterMeasurementType"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="CMYKPrinterDevice">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="MeasurementData" type="cdm:CMYKPrinterMeasurementType"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="RGBVirtualDevice">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="MeasurementData" type="cdm:RGBVirtualMeasurementType"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
        <xs:element name="PlugInDevice" 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>

WCS CDMP v2.0 校准添加

CDMP 架构的 ColorDeviceModel 元素已在 Windows 7 中更新,以包含新的校准元素。 下面显示了对 CDMP 架构的更改。

  ...
  <xs:element name="ColorDeviceModel">
    <xs:complexType>
      <xs:sequence>
        ...
        <xs:element name="PlugInDevice" minOccurs="0">
             ...
        </xs:element>
        <xs:element name="Calibration" type="cal:Calibration" minOccurs="0"/>
        ...
      <xs:sequence>
    ...
    <xs:complexType>
  ...

CDMP 架构元素

注意

主样本是红色、绿色、蓝色、黑色和白色的主要样本。 主渐变是从最小亮度到完整主值的色调渐变。 音调渐变中的最大条目数为 4096。

注意

DMP 需要具有度量数据。

ColorDeviceModelProfile

此元素的类型为 ColorDeviceModel。

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

ColorDeviceModel

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

  1. ProfileName 字符串,
  2. 可选说明字符串,
  3. 可选的 Author 字符串,
  4. 可选 MeasurementConditions MeasurementConditionsType,
  5. Self-Luminous布尔值,
  6. MaxColorant float,
  7. MinColorant float,
  8. 元素选择
    1. CRTDevice,
    2. LCDDevice,
    3. RGBProjectorDevice,
    4. ScannerDevice,
    5. CameraDevice,
    6. RGBPrinterDevice,
    7. CMYKPrinterDevice、
    8. RGBVirtualDevice,
  9. PlugInDevice,
  10. 可选 ExtensionType

验证条件: 每个子元素都按其自己的类型进行验证。 字符串子元素最多包含 10,000 个字符。 MaxColorant 子元素必须大于或等于零 (0) 且大于 MinColorant 子元素。 MinColorant 可以为负值。

NamespaceVersion

xmlns:cdm=“http://schemas.microsoft.com/windows/2005/02/color/ColorDeviceModel"

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

版本

Windows Vista 的版本 = “1.0”。

验证条件: 任何版本值 >0.1 或 <=2.0 都有效,以支持对格式进行非中断性变更。

文档

设备模型配置文件架构。

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

CRTDevice 元素

此元素是 MeasurementData DisplayMeasurementType 的子元素序列。

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

LCDDevice 元素

此元素是 MeasurementData DisplayMeasurementType 的子元素序列。

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

投影仪设备元素

此元素是 MeasurementData RGBProjectorMeasurementType 的子元素序列。

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

ScannerDevice 元素

此元素是 MeasurementData RGBCaptureMeasurementType 的子元素序列

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

CameraDevice 元素

此元素是 MeasurementData RGBCaptureMeasurementType 的子元素序列

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

RGBPrinterDevice 元素

此元素是 MeasurementData RGBPrinterMeasurementType 的子元素序列。

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

CMYKPrinterDevice 元素

此元素是 MeasurementData CMYKPrinterMeasurementType 的子元素序列。

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

RGBVirtualDevice 元素

此元素是 RGBVirtualMeasurementDataType 的子元素序列。

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

PlugInDeviceType

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

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

RGBVirtualMeasurementType

此元素是一个序列,由

  1. RGBPrimariesGroup 组

  2. 选择

    • Gamma
    • GammaOffsetGain
    • GammaOffsetGainLinearGam
    • ToneResponseCurves 元素
  3. optional GamutBoundarySamples GamutBoundarySamplesType

  4. TimeStamp dateTime

验证条件: 这些类型的每个子元素都有自己的验证条件。

GammaType

此元素是一个由 属性组成的复杂类型

  • Gamma NonNegativeFloatType

验证条件: 根据行业反馈确定。

GammaOffsetGainType

此元素是一个由属性组成的复杂类型

  • Gamma NonNegativeFloatType
  • Offset NonNegativeFloatType
  • Gain NonNegativeFloatType

验证条件: 根据行业反馈确定。

GammaOffsetGainLinearGainType

此元素是一个由属性组成的复杂类型

  • Gamma NonNegativeFloatType
  • Offset NonNegativeFloatType
  • Gain NonNegativeFloatType
  • LinearGain NonNegativeFloatType
  • TransitionPoint NonNegativeFloatType。

验证条件: 根据行业反馈确定。

ToneResponseCurvesType

此元素是

  1. RedTRC FloatPairList
  2. GreenTRC FloatPairList
  3. BlueTRC FloatPairList

元素还具有 unsignedint 类型的特性 TRCLength。

验证条件: 根据行业反馈确定。

GamutBoundarySamplesType

此元素是 RGB RGBType 的序列。

验证条件: 当前无限制的最大发生数,根据行业反馈进行上限。

FloatPairList

此元素是浮点数对的简单列表类型。

验证条件: 根据行业反馈确定。

CMYKPrinterMeasurementType

此元素是

  1. 由 Sample NonNegativeCMYKSampleType 序列组成的 ColorCube 元素序列

  2. TimeStamp dateTime 属性。

验证条件: 根据行业反馈确定。

RGBPrinterMeasurementType

此元素是

  1. 由 Sample NonNegativeRGBSampleType 序列组成的 ColorCube 元素序列

  2. TimeStamp dateTime 属性。

验证条件: 根据行业反馈确定。

RGBCaptureMeasurementType

此元素是

  1. PrimaryIndex complexType of

    1. White OneBasedIndex
    2. 可选 Black OneBasedIndex
    3. 可选 Red OneBasedIndex
    4. 可选 Green OneBasedIndex
    5. 可选 Blue OneBasedIndex
    6. 可选 Cyan OneBasedIndex
    7. 可选洋红色 OneBasedIndex
    8. 可选黄色 OneBasedIndex
  2. OneBasedIndex 行的 NeutralIndices

  3. Sample NonNegativeRGBSampleType 的 ColorSamples 序列

元素还具有 TimeStamp dateTime 属性。

验证条件: 根据行业反馈确定。

OneBasedIndex

此元素是一种简单类型的限制基 unsigned int,minInclusive 值 = “1”。

验证条件: 根据行业反馈确定。

RGBProjectorMeasurementType

此元素是

  1. RGBPrimariesGroup 组
  2. 由 Sample NonNegativeRGBSampleType 序列组成的元素 ColorSamples

元素还具有 TimeStamp dateTime 属性。

验证条件: 根据行业反馈确定。

DisplayMeasurementType

此元素是

  1. 组 RGBPrimariesGroup
  2. Sample NonNegativeRGBType 序列的 GrayRamp
  3. NonNegativeRGBType 示例序列的 RedRamp
  4. 样本 NonNegativeRGBType 序列的 GreenRamp
  5. 样本 NonNegativeRGBType 序列的 BlueRamp

DisplayMeasurementType 元素还具有 TimeStamp dateTime 属性。

验证条件: 根据行业反馈确定。

MeasurementConditionsType

MeasurementConditionsType 是一系列子元素,其中包含:

  1. “CIEXYZ”的 ColorSpace 受限字符串枚举值
  2. 可选选择 WhitePoint NonNegativeXYZType 或 WhitePointName 字符串枚举值 D50、D65、A 或 F2
  3. Geometry GeometryType
  4. ApertureSize 整数(以毫米为单位)

默认值为:

  1. RGB 和 CMYK 打印机:
    1. CIEXYZ MeasurementSpaceType
    2. D50 WhitePointValue
    3. 0/45 GeometryType
    4. 10mm ApertureSize
  2. 扫描仪:
    1. CIEXYZ MeasurementSpaceType
    2. D50 WhitePointValue
    3. 0/45 GeometryType
    4. 10mm ApertureSize
  3. 显示器和 RGB 虚拟设备:
    1. CIEXYZ MeasurementSpaceType
    2. D65 WhitePointValue
    3. 0/45 GeometryType
    4. 10mm ApertureSize
  4. 相机:
    1. CIEXYZ MeasurementSpaceType
    2. D65 WhitePointValue
    3. Direct GeometryType
    4. 10mm ApertureSize

验证条件: 每个子元素的验证由这些子元素的验证条件确定。 如果缺少任何子元素,则使用特定于设备型号类型的默认值。

GeometryType

字符串

枚举值:

  • "0/45"
  • “0/漫射”
  • “diffuse/0”
  • “Direct”

验证条件: 除列出的枚举值之外的任何值都无效。 此信息不会更改基线处理行为。

RGBPrimariesGroup

此元素是

  1. WhitePrimary NonNegativeXYZType
  2. RedPrimary NonNegativeXYZType
  3. GreenPrimary NonNegativeXYZType
  4. BluePrimary NonNegativeXYZTYpe
  5. BlackPrimary NonNegativeXYZType

验证条件: 根据行业反馈确定。

NonNegativeCMYKSampleType

此元素是

  1. CMYK NonNegativeCMYKType
  2. CIEXYZ NonNegativeXYZType

元素还具有可选的属性 Tag 字符串

验证条件: 根据行业反馈确定。

NonNegativeRGBSampleType

此元素是

  1. RGB NonNegativeRGBType
  2. CIEXYZ NonNegativeXYZType

元素还具有可选的属性 Tag 字符串

验证条件: 根据行业反馈确定。

NonNegativeCMYKType

此元素由属性组成

  1. C float
  2. M float
  3. Y float
  4. K float

验证条件: 根据行业反馈确定。

NonNegativeRGBType

此元素由属性组成

  1. R float
  2. G float
  3. B 浮点数

验证条件: 根据行业反馈确定。

ExtensionType

ExtensionType 元素是任何子元素类型的序列,用于非 Microsoft 应用程序中的专有信息。

验证条件: 此元素是可选的。 最多可以有 1000 个扩展子元素。

NonNegativeXYZType

NonNegativeXYZType 元素由三个名为“X”、“Y”和“Z”的单精度 IEEE 浮点元素组成。这些值仅限于 DMP 配置文件度量值。 这些度量可以是绝对 (非相对) CIEXYZ 1931 反射值,也可以是绝对 (非相对) CIEXYZ 1931 直接 (以每米平方单位的坎德拉斯表示的透射) 值。

验证条件: 只有实际值有效,负 CIEXYZ 度量值无效。 由于这些是绝对值,因此值可以大于 1.0f。 任何“X”、“Y”或“Z.”值的合理限制任意设置为 10000.0f。

XYZType

XYZType 元素由三个单精度 IEEE 浮点值组成:“X”、“Y”和“Z”。

CDMP 基线算法

CRT 设备模型基线

若要了解此模型,必须同时考虑特征化过程和设备建模。 在特征化过程中,首先对通过填充 CRT 显示设备的显示缓冲区获得的颜色执行 XYZ 测量。 以下示例值将为基线 CRT 设备模型生成良好的数据:

红色:R = 15、30、45、60、75、90、105、120、135、150、165、180、195、210、225、240、255、G = B = 0

绿色:G = 15、30、45、60、75、90、105、120、135、150、165、180、195、210、225、240、255、R = B = 0

蓝色:B = 15、30、45、60、75、90、105、120、135、150、165、180、195、210、225、240、255、R = G = 0

中性:R = G= B = 0、8、16、32、64、128、192、255

还可以使用除 15 之外的增量和非线性增量。 每个红色、绿色、蓝色和中性斜坡必须至少包含三个样本,但建议提供更多样本。 必须提供纯红色、绿色、蓝色、黑色和白色的样本。 样本不必采用统一的间距。

生成 tristimulus 矩阵的过程包括两个步骤。 首先,估计黑点 XYZ 值或耀斑。 此步骤主要基于 Berns[3] 的工作,其目标函数略有修改,用于非线性优化。 其次,根据第一步的结果计算三向矩阵,并基于所有每通道度量的平均值计算,而不仅仅是最大数字计数的计算。

其中每个步骤都包含详细的过程。 起点是每个 R、G 和 B 通道的示例) (17 个步骤的坡道。 在色度 xy 平面上绘制 XYZ 度量值时,图 1 中显示了典型情况。 第一步包括解决非线性优化问题,以找到“最适合”的黑点,该黑点将最大程度地减少沿 R、G 和 B 通道遍历的色度偏移。 基于 Berns[3],我们寻求 ( XKYKZK ) ,以最小化以下目标函数:

显示目标函数,其中 Sr、Sg 和 Sb 是 R、G 和 B 通道上的数据点集。

其中 ,SRSGSB 是对应于 R、G 和 B 通道上的点的数据点集。 对于 任何 S 集,定义:

显示用于定义任何集 S 的公式。

在前面的中, | S |是 S 的基数,即集 S 中的点数。 显示点的色度公式。 是点的色度坐标 显示一个点的 formaula。 ,因此 显示质量的平均值或中心的公式。, 是色度平面中集 S 中所有点的平均值或质量中心。 因此, 显示第二个时刻点之和的公式。 是关于质量中心的点的第二个时刻的总和,是点的分布方式的度量值。 最后, 显示三组点分布的总度量值的公式。 是三组点的分布方式与其各自的质量中心相关的总度量值。

在 计算中 显示 f (X,Y,Z;Xk、Yk、Zk) 。 如果 显示 X 的公式 ,则跳过计算,并相应地调整 S 的基数。

尽管目标函数明显复杂,但它是 XKYKZK (17 磅 2xy 分量 3 通道 = 102 中许多可区分函数的平方和,在示例) ,因此,它是标准非线性最小二乘数技术(如Levenberg-Marquardt算法)的一个平方之和,这是 WCS 中使用的算法。 请注意,前面的目标函数与 Berns[3] 中建议的目标函数不同,后者测量距离质量中心距离的方差,因此当点与质量中心等距时,方差为零,即使它们可能会分布相当多。 在此示例中,点的分散直接使用第二个时刻进行连接。

与非线性最小二乘数问题的任何迭代算法一样,Levenberg-Marquardt需要初始猜测。 有两个明显的候选项。 一个是 (0、0、0) :另一个是测量的黑点。 对于 CTE,测量的黑点首先用作初始猜测。 如果超过最多 100 次迭代,但未达到与质量 (每个点的平均距离为 0.001 的阈值,对应于目标函数) 的阈值 (0.001) 17 3 = 0.000051,则进行另一轮迭代,初始猜测为 (0, 执行 0, 0) 。 与上一轮迭代的最佳估计相比,黑点的估计结果为 XYZ, (测量的黑点作为初始猜测) 。 使用为目标函数提供最小值的估计值。 每个迭代选择 100 次迭代和误差距离 0.001。 在将来的版本中,参数化误差距离可能是合理的。

第一步的结果是估计的黑点 ( XKYKZK ) 。 步骤 2 包括通过求第一步中获取的三个群集中点的色度求平均值来确定三角矩阵。 对于 CRT,这样做主要是为了尽量减少测量错误的影响。 平均色度中使用的点必须与步骤 1 中优化中使用的点相同。 换句话说,如果第一个点 (数字计数 15,在示例中,每个坡道) 在优化步骤中被丢弃,那么必须在平均值中完成相同的操作。 如果 显示红色和绿色通道中坐标的平均色度公式。 , 和 显示蓝色通道中坐标的平均色度公式。 是红色、绿色和蓝色通道的平均色度坐标,则以下过程将确定三角矩阵。 首先,解决 3?3 线性系统:

显示求解 3?3 线性系统的过程的第一部分。

显示 3?3 线性系统的第二部分。 在 3?3 线性系统第二部分末尾显示 t 下标 b 值。

XWYWZW

显示求解 3?3 线性系统的过程的最后一部分。

确定三向矩阵后,将遵循标准方法确定音调曲线。 对于 CRT 显示器,假定单个通道遵循“GOG”模型:

显示“G O G”模型的公式。

其中 kg 是“增益”,1 -kg 是“偏移量”,? 是“gamma”。将三角矩阵的反矩阵应用于中性值的 XYZ 数据,以获取线性 RGB 数据,然后使用 GOG 模型上的非线性回归将其与数字 RGB 值相关联。 对于 R、G 和 B 通道,这些特征不必相同,并且通常也不相同。

伯尔尼[1]:伯尔尼, 比尔迈尔和萨尔茨曼的色彩技术原则,3 rd Ed。 约翰·威利 & ·儿子 (2000) 。

伯尔尼[2]:伯尔尼和卡托,计算机控制CRT显示器的数字到辐射传输功能, CIE专家研讨会'97彩色标准成像技术,1997年11月。

伯尔尼[3]:伯尔尼,费尔南德斯和塔普林,估计Computer-Controlled显示器的排放Black-Level, 颜色研究和应用,28:379-383威利期刊公司 (2003)

康[1]:康, 电子成像设备的颜色技术,SPIE (1997)

Katoh[1]:Katoh、Deguchi 和 Berns,CRT 监视器 (II) 扩展 CIE 方法及其验证的建议, Opt. Rev. 8: 397-408 (2001)

LCD 设备型号基线

LCD 设备型号基线类似于 CRT 设备型号基线。 本部分将介绍 LCD 建模与 CRT 建模的区别。

一个区别是,你不能假设 LCD 显示器遵循用于 CRT 的 GOG 模型,并且色调曲线是通过内插测量的数据获得的。 因此,应更频繁地采样设备中性轴。

下面是一些可为 LCD 设备型号基线生成良好数据的典型示例值:

红色:R = 15、30、45、60、75、90、105、120、135、150、165、180、195、210、225、240、255、G = B = 0

绿色:G = 15、30、45、60、75、90、105、120、135、150、165、180、195、210、225、240、255、R = B = 0

蓝色:B = 15、30、45、60、75、90、105、120、135、150、165、180、195、210、225、240、255、R = G = 0

中性:R = G = B = 0、15、30、45、60、75、90、105、120、135、150、165、180、195、210、225、240、255。

平均测量的颜色色度以获取设备主色的色度的过程对于LCD比对于 CRT 更关键。 在色度 xy 平面上绘制 XYZ 度量值时,图 1 中显示了典型情况。 请注意色度如何向黑点偏移。 这是因为所有LCD都有一定的漏光量。

显示使用原始数据且未进行更正的色度图的示意图。

图 1 :使用原始数据且未进行更正的色度关系图

从原始 XYZ 度量值中减去此值时,图 2 中描述了一种典型情况。 现在,这些点聚集在三个中心左右,尽管它们不一样落在它们身上。 为 CCT 描述的平均值过程极大地改善了LCD的结果。

显示使用带有调整黑点的原始数据的色度图的示意图。

图 2 :使用带调整黑点的数据的色度关系图

RGB 捕获设备模型基线

基线 RGB 捕获设备模型是 IDeviceModel 类的子类。 在颜色捕获设备(如扫描仪和数码相机)的比色特征中,使用以下方法。 使用捕获设备捕获由具有已知 CIEXYZ 值的颜色补丁组成的目标。 捕获的结果是 RGB 位图图像,其中每个补丁的颜色都以 RGB 值编码。 这些设备 RGB 值特定于特定的捕获设备。 色度特征化的目标是建立设备 RGB 值与 CIEXYZ 值之间的经验关系,或建立从 RGB 到 XYZ 的数学转换,以尽可能准确地模拟捕获设备的行为。

这种数学转换可以通过低度的多项式进行合理的建模。 文献中详细介绍了此过程,例如 Kang[92]、Kang[97]。 在 Kang[97]中,报告了一种方法,该方法使用 R、G 和 B 变量中的 3、6、8、9、11、14 或 20 个项的三个多项式,而这三个多项式分别回归到 CIEXYZ 空间的 X、Y、Z 分量。 对于 20 项多项式,形式为:

显示 20 项多项式。

Y 和 Z 有类似的表达式。拟合多项式的数学技术属于“多变量线性回归”,在《统计》中的任何基本文本中都进行了介绍。

这种线性回归方法没有最小化“正确”目标函数。 根据设计,线性回归会找到最小二乘数解,这意味着获得的系数将最小化基础空间中误差的平方总和,或等效于欧氏距离的平方和。 在实践中,你希望最小化 ? 的平方和Es,在哪里?E 是接受的标准之一,如 CIE94。 最小化此目标函数是一个非线性回归问题。

在新引擎中,Lab 到 XYZ 是回归到的 CIE 颜色空间,20 个字词的立方多项式用作捕获设备的模型,或系数 ls,as,bs,以便以下多项式最小化 ?E CIE94 s.

显示一组多项式公式。

60 维实数空间 R203 中的解决方案 ( l i、a i、bi ) 必须尽量减少以下总错误:

显示要最小化的总错误。

其中,求和通过所有数据点对 (RiGiBi;抽样数据集中的 Liuivi ) 以及其他控制点,如下所述。 这是一个非线性回归问题,因为参数是什么?ia i、 * i* 以非线性方式进入目标函数, (不按二次) 。

因为目标函数? 参数的非线性 (和非四) 函数ia i 和 * i*,必须采用迭代技术来解决优化问题。 由于目标函数的形式是平方和,因此使用称为Levenberg-Marquardt算法的标准优化技术。 它被认为是非线性最小二乘数问题的选择方法。 对于迭代算法(如 Levenberg-Marquardt),必须提供初始猜测。 良好的初始猜测通常对于查找正确的最小值至关重要。 在这种情况下,初始猜测的一个好候选项是线性回归问题的解决方案。 首先,通过定义二次目标函数,最小化实验室空间中欧几里得距离的平方和:

显示定义的二次目标函数。

这种“线性最小二乘”问题的数学解是众所周知的。 因为 i 仅出现在 L 建模中,而 i 仅出现在 u 建模中,* i* 仅出现在 v 建模中;优化问题可以分解为三个子问题:一个用于 L,一个用于 u,一个用于 v。 考虑 L 公式。 (u 方程式和 v 公式遵循完全相同的参数。) 最小化 L 中误差平方和的问题可以声明为在最小二乘法中求解以下矩阵公式:

显示 L 的矩阵公式。

其中 ,N 是原始采样点 (数据点总数,以及按如下所述方式创建的控制点) 。 通常, N 比 20 大得多,因此前面的等式被过度确定,需要最小二乘解。 的已关闭的表单解决方案可供使用:

显示已关闭的窗体解决方案。

实际上,不使用使用闭合形式解决方案的直接计算,因为它的数值属性很差。 相反,将某种矩阵分解算法应用于系数矩阵,将方程组减少为规范形式。 在当前实现中,将单数值分解 (SVD) 应用于矩阵 R ,然后解析生成的分解系统。

线性回归问题的解决方案(由 显示线性回归问题的解决方案 )用作Levenberg-Marquardt算法的起点。 在此算法中,将计算一个试验步骤,该步骤应使点更接近最佳解决方案。 试用步骤满足一组线性方程,具体取决于当前点的导数的函数值和值。 因此,目标函数的派生数? 对于参数ii i 是Levenberg-Marquardt算法的必需输入。 虽然有 60 个参数,但有一个快捷方式允许你少得多的计算。 按微积分链规则,

显示一个公式,该公式允许使用微积分链规则的快捷方式。

其中 j = 1, 2, , 20, Liuivi第 i 个采样点的 CIELAB 值,Rij 是上面定义的矩阵 R 的第 (ij ) 第一个条目。 因此,可以使用数值前向微分法计算 Lab 的导数,而不是计算 60 个参数的导数。

还需要为迭代算法设置停止条件。 在当前实现中,如果均方 DECIE94 小于 1 或执行的迭代次数超过 10,则终止迭代。 数字 10 来自实践经验,即如果前几个迭代没有显著减少误差,则进一步的迭代除了以非振荡方式移动点外,没有太大帮助,即算法可能不会收敛。 即使在算法出现分歧的情况下,我们也可以确定 DECIE94 并不比我们开始的更差,即使用从线性回归中获得的参数。

即使使用前面的非线性回归方法,拟合也存在几个问题。 一个问题是多项式往往超过或低于数据点。 在拟合过程中可能会引入人工局部最大值和最小值。 这可以通过使用低度的多项式来抵消,这就是不应使用高于三度的原因。 过度或不足的一个更严重的方面是,虽然多项式在理论上可以获取任何实际值,但它尝试建模的空间通常具有物理约束和实际约束。 CIEXYZ 必须具有所有 X、Y、Z 非负值,这是一个物理约束。 在实践中,它们只取几百级的值,而不是几千个或更高的值。 同样,CIELAB 或 CIELUV 有自己的物理和实际约束。 当 RGB 空间用样本点充分填充时,过度或不足的问题并不严重。 但是,从捕获设备捕获的 RGB 点通常不会均匀填充 RGB 空间。 这些点可能仅在 RGB 立方体的 80% 内部填充,或者更糟的是,它们可能驻留在较低维的分形中。 发生这种情况时,回归的多项式在推断数据点以外的值方面可能做得很差,有时会返回不切实际的预测。 你需要一个始终返回合理现实值的模型。 这需要一种方法,该方法可以有效地控制回归多项式的边界行为,方法是对行为在 RGB 立方体边界附近行为不规则的多项式施加额外的成本。 另一个度量值,用于确保多项式始终返回实际值,方法是将输出剪裁到 CIE 光谱位置内。

正是在这一点上,扫描仪建模和相机建模彼此不同。 相机模型预计将推断到采样点以外的区域,包括“反射高光”,扫描仪模型不需要相同的推断。 扫描器目标应涵盖与要扫描的打印材料类似的特征。 扫描仪模型仍需要可靠,因为它不应返回不切实际的值,但不需要远远超出特征化目标的推断。 为了确保可靠性,上述 L 多项式被剪裁为 100,即强制多项式模型不推断超出扫描程序目标的“Dmin”。

相机模型预计将推断为反射高光,因此在 100 处剪裁是不可取的。 而是使用以下算法。

引入人工控制点来控制采样不足的区域中多项式的行为。 通过战略性地将这些控制点置于适当的值中,它们有助于将多项式“拉”到所需方向。 在当前实现中,使用 8 个对应于 RGB 立方体的角的控制点。 如果设备值规范化为 unity,则以下点为:

R = 0, G = 0, B = 0

R = 0, G = 0, B = 1

R = 0, G = 1, B = 0

R = 0。 G = 1, B = 1

R = 1, G = 0, B = 0

R = 1, G = 0, B = 1

R = 1, G = 1, B = 0

R = 1, G = 1, B = 1

除了与 CIELAB 值 L = 100、u =v = 0 关联的白色 R =G =B = 1 外,以下外推算法用于确定要关联的相应 CIELAB 值。 通常,对于给定 (RGB ) ,权重与采样数据集中的每个 (RiGiBi ) 相关联。 分配权重有两个目标。 首先,权重与 (RGB ) 和 (RiGiBi ) 之间的距离成反比。 其次,你想要放弃具有不同于给定点 (RGB ) 的色调的点,或为其分配权重 0。 若要考虑色调,请考虑位于顶点为 (0, 0, 0) 的圆锥内的点,其轴与 (0, 0, 0) 联接到 (RGB ) 的直线重合,其半垂直角? 满足 cos? = 0.9。 有关此圆锥图的图示,请参阅图 3。

显示邻里形状的示意图。

图 3 :按角度和距离筛选样本点。 所描绘的邻里的形状仅用于说明目的。 实际形状取决于使用的距离;如果使用 1 规范,则为菱形邻里。

在此圆锥中,将基于 RGB 距离执行第二次筛选,该距离使用 1-norm(由 定义)

显示圆锥内第二个筛选的公式。

对于当前圆锥,初始搜索是查找距离 (RGB ) 0.1 范围内的点。 如果在此半径内找不到点,则半径将增加 0.1,并重启搜索。 如果下一轮网也没有点,则半径将增加 0.1。 此过程一直持续到半径超过 MaxDist/5,其中 MaxDist = 3(如果为 1-norm)。 如果未找到点,则通过减少 cos 来放大圆锥。 由 0.05,即增加角度 ? 以增加半径重启整个过程。 此过程一直持续到找到一组非空的点,或 cos? 达到 0,即圆锥已经打开成为平面。 此时,通过增加半径来重启搜索,但搜索会一直持续到半径达到 MaxDist。 这可以保证在最坏的情况下,将找到一组非空的点。 该算法汇总在图 4 的流程图中。

显示算法流的示意图。

图 4 :用于确定输入 RGB 值的外推中使用的样本点集 S 的流程图

假设前面的过程生成非空集 S, (RiGiBi ) 和相应的 (Liabi ) ,然后为每个此类点分配一个权重 wi,由 给定

显示每个点的权重公式。

最后,外推断由

显示外推断的定义。

前面的公式构成了“逆距离加权方法”的实例,通常称为谢泼德方法。 通过算法运行 eq (6) 中的 8 个点中的每一个,获取 8 个控制点,每个控制点都有 RGBL值,这些值与原始示例数据一起放入池中。

若要确保模型始终生成有效的颜色值,并确保整个颜色处理管道中的系统完整性和稳定性,必须对多项式模型的输出执行最终剪裁。 CIE 视觉域由 YL ) 的色差分量 (和 xya'b' (色分量描述,它们通过投影变换) 与 XYZ 空间相关。 在当前实现中,使用 a'b' 色度,因为它与 CIELUV 空间直接相关。 对于任何 CIELAB 值,首先将 L 剪裁为非负值:

显示将 L 剪裁为非负值。

为了允许对反射高光进行外推, L 不会剪裁在 100,即实验室空间中 L 的“常规”上限。

接下来,如果 L = 0,则剪裁 ab ,使 a*= b =* 0。 如果 L ? 0,计算

如果 L=0,则显示公式。

这些是 a'b' 图中从白点 (u?',v' ) 到相关颜色的向量分量。 将 CIE 光谱位点定义为所有点的凸壳, (a'b' ) ,由波形 ?参数化:

显示该波形的公式。

其中 显示用于 CIE 颜色匹配的函数。 是 2 度观察器的 CIE 颜色匹配函数。 如果向量位于 CIE CIE 位置之外,则颜色将剪裁为 CIE 位置上的点,该点是该位置与矢量定义的线条的交集。 请参阅图 5。 如果已发生剪裁,则先从剪裁的 a' b' 中减去 a'和b',再乘以 13 L,重新构造 ab 值。

显示剪裁算法图的示意图。

图 5 :CIE 可视范围之外的实验室值的剪裁算法

在当前实现中, a'b' 平面中的 CIE 光谱位置由一条分段线性曲线表示,该曲线具有 35 段, (对应于从 360 nm 到 700 nm(含) )的波形。 通过对线段进行排序,使其在白点处的子化角度呈升序,这相当于降序波段,通过简单的二进制搜索即可找到与上述矢量形成的光线相交的线段。

RGB 打印机设备型号基线

RGB 打印机的设备特征包括构建设备的经验模型,该模型预测任何给定 RGB 值与设备无关的 CIELUV 颜色

有两种方法可以构造经验模型。 一种方法是使用 RGB 打印机的设备数据,另一种方法是使用分析参数数据。 在第一个文件中,用户为 RGB 打印机设备提供的测量数据用于构造 3D 查找表 (LUT) 。 测量数据由统一采样 RGB 补丁的 XYZ 值组成。 每个组件的典型采样大小为 9 或 17。 每个补丁在 CIEXYZ 空间中使用色度计或分光光度计进行测量。 然后,修补程序的 XYZ 值将转换为 CIELUV 值,形成三维 LUT。 在设备模型中,Sakamoto 的四面体内插方法应用于三维 LUT,以便预测给定 RGB 数据的 CIELUV 数据。 (授予美国专利4275413 (Sakamoto等人 al.) ,美国专利4511989 (Sakamoto) ,Kang [1]。 提到的两项专利已过期。) 。 第二个方法中传递的分析参数数据只是之前生成的 LUT。 通常,该 LUT 是使用第一种方法生成的,尽管它可以是手动生成的。

在当前颜色管理中,源映射定义为从 RGB 空间到独立于设备的 CIEXYZ 颜色空间的映射。 目标映射定义为从独立于设备的 CIEXYZ 颜色空间到 RGB 空间的映射。 它是源映射的反函数。

经验模型直接在源映射中使用。 它首先将给定的 RGB 数据映射到 CIELUV 数据,该数据将转换为 XYZ 数据。 在目标映射中,独立于设备的 CIEXYZ 数据首先转换为 CIELUV 数据。 然后,使用经验模型和经典Newton-Raphson方法预测 CIELUV 数据的最佳 RGB 数据。 有关从 CieLUV 转换为 RGB 数据的详细信息如下所示:

生成从 RGB 到 CieLUV 的三维 LUT 后,使用 RGB 上的四面体内插生成从 RGB 到 LUV 的映射。 此地图由以下公式表示:

显示从 R G B 到 L U V 的映射的公式。

地图的反转包括求解,对于任何颜色 显示 L U V, 以下非线性方程系统:

显示用于定位任何颜色 L U V 的非线性方程。

基于经典Newton-Raphson方法的非线性方程在新的 CTE 中使用。 通过搜索“种子矩阵”(由预先计算 ( RGB、Luv) 对的统一 8x8x8 网格组成的“种子矩阵”,获取先验 - (R 0、G 0、B 0 ) 。 选择最接近 L*u*v* 的 RGB 对应 Luv。 种子矩阵中的每个点对应于单元格的中心,以便迭代不会从 RGB 立方体的边界面上的点开始。 换句话说,种子的 RGB 定义方式为:STEP = 1/8 s ijk = (STEP/2 + (i-1) STEP, STEP/2+ (j-1) STEP, STEP/2+ (k-1) step) with i,j,k = 1...8 在 Newton-Raphson 的第 个步骤中,下一个估计 值显示下一个估计值的变量。 通过公式获取:

显示估算公式。

当 CIELUV 空间) 中的错误 (距离小于 CTE () 中 0.1 的预设容差级别时,或者当迭代次数超过 CTE) 中允许的最大迭代次数 (10 时,迭代将停止。 容错值和迭代次数经经验确定有效。 在将来的版本中,容错值可能会更改。

雅各布矩阵是使用正向差计算的,除非在边界点 (一个或多个 R、G、B 为 1) 改为使用向后差。 线性系统不是计算雅各布矩阵的反函数,而是直接使用完全透视Gauss-Jordan消除来解决。

在迭代结束时,收敛可能仍无法实现,因为Newton-Raphson是一种“本地”算法,也就是说,仅当从接近真实解的初始猜测开始时,它才有效。 如果在Newton-Raphson迭代结束时未在预定义的容错范围内实现收敛,则使用一组定义如下的新种子重启迭代。

例如,到目前为止获得的最佳解决方案是 (r、g、b) 。 在此解决方案中,N 派生了海报种子,其中 N = 4。 直观地,解决方案以依赖于 N 的步长“向中心”移动。请参阅图 6。

显示解决方案扰动方向的示意图。

图 6 :解决方案的扰动方向取决于它所在的八进制值。

换句话说,如果 r > 0.5,则减小 R 通道上的值,否则该值增加。 G 和 B 通道有类似的逻辑。 确切的定义是:

PERTURBATION = 0.5/ (N+1)

如果 r 0.5,则 Dir (r >) = -1;否则为 +1。 同样,Dir (g) 和 Dir (b)

第 j 个海报种子,s ????,为 (r + Dir (r) *j * PERTURBATION, g + Dir (g) * j * PERTURBATION, b + Dir (b) * j * PERTURBATION)

尝试第一个???? 如果它在容错范围内提供了新的解决方案,则可以停止。 否则,请尝试第二个???? 依此,直到第 N 个????.

图 7 中显示了整个算法的示意图。

显示反转设备模型的流程的关系图。

图 7 :反转设备模型的示意图

RGB 虚拟设备模型基线

此设备模型 (DM) 是一种简单的矩阵/音调再现算法。 矩阵派生自使用标准颜色科学算法的白点和主要值。 色调再现曲线根据 CurveType 和 ParametricType 的 ICC 说明派生自测量参数, (或根据需要反转) 。 在对高动态范围问题进行额外验证后,将提供内部算法的详细信息。

RGB 虚拟设备模型是理想化矩阵/音调再现曲线 RGB,类似于基于 ICC 三分量矩阵的配置文件设计。 DM 的“虚拟度量”参数包括白点值 (绝对 CIEXYZ) 、RGB 主值 (绝对 CIEXYZ) ,以及基于 XML 格式中与 DMP 架构一致的 ICC 参数CurveType 和 CurveType 的色调再现曲线。

下表显示了 IRGBVirtualDeviceModelBase 中的 ICC 参数CurveType 函数类型编码和相应的支持。

函数类型 参数 类型 备注
显示“GammaType”函数。
g
GammaType
常见实现
显示“GammaOffsetGainType”函数。
ga b
GammaOffsetGainType
CIE 122-1966
显示“GammaOffsetGainOffsetType”函数。
ga b c
GammaOffsetGainOffsetType
IEC 61966-3
显示“GammaOffsetGainGainType”函数。
ga b c d
GammaOffsetGainGainType
IEC 61966-2.1
(sRGB)
显示“g a b c d e f”参数的函数。
ga b c d e f
空值
WCS 不支持

RGB 虚拟设备的色调曲线在输入数据、pDeviceColors 和矩阵乘法之间的 DeviceToColorimetric 中应用。 对于 ColorimetricToDevice,必须使用方法反转色调曲线。 在基线实现中,这是通过在用于 DeviceToColorimetric 的同一音调曲线中直接内插完成的。

应在配置文件中将曲线指定为浮点空间中的数字对。 第一个数字表示 pDeviceColors 中的值。 第二个数字表示音调曲线的输出。 色调曲线中的所有值都必须在 minColorantUsed 和 maxColorantUsed 之间。 音调曲线必须至少包含两个条目:一个用于 minColorantUsed,一个用于 maxColorantUsed。 ToneCurve 中的最大条目数为 2048。 通常,表中的条目越多,建模曲率就越准确。 在条目之间执行分段线性内插。

可以考虑替代内插方法。 如果了解设备的基本行为,则可以使用更少的样本,并更准确地使用更高阶曲线进行建模。 但是,如果使用错误的曲线类型,则非常不准确。 如果没有更多信息,则无法猜测曲线类型。 因此,请使用线性内插并提供许多数据点。

CMYK 打印机设备型号基线

CMYK 打印机的设备特性包括构建设备的经验模型,该模型预测任何给定 CMYK 值的打印颜色。 特性化还包括此模型的反转,以便可以给出要打印的给定颜色的 CMYK 值的处方。 这通常根据 CIEXYZ 或 CIELAB 值进行定义。

通常,使用包含 CMYK 修补程序的 IT8.7/3 目标。 补丁包括以明确定义的方式对 CMYK 空间进行采样,以便形成 C、M、Y 和 K) 间距不一的矩形网格 (。 然后,使用色度计或分光光度计测量每个补丁。 然后,CIEXYZ 值中的度量值形成一个查找表, (LUT) ,使用 Sakamoto 的内插方法生成打印机的经验模型。 美国专利4275413 (高本等人) ,美国专利4511989 (高本) 康[1]。 提到的两项专利已过期。

CMYK 打印机基线设备模型接受为有效的设备模型所需的 CMYK 测量样本的具体要求如下。 (示例集最清楚地描述为一组 CMY 示例多维数据集,每个都与特定的 K 级别相关联)

  • 至少必须为 K = 0 和 K = 100 级别提供有效的 CMY 多维数据集。

  • 中间 K 级别可能不是均匀的间距。

  • 将忽略任何没有有效 CMY 多维数据集的中间 K 级别。

  • CMY 多维数据集可以使用非统一的采样间隔 (网格间距) ,但对于给定 K 级别的 CMY 多维数据集中的所有 C、M 和 Y 维度,必须使用同一组样本间隔。

  • 每个 K 级 CMY 多维数据集可以使用不同的采样间隔数和间距。

  • 所有 CMY 多维数据集都必须包含 CMY 多维数据集的“角”,即 [0,0,0] 处的 CMY 样本, [0,0,100]、[0,100,0]、[100,0,0]、[0,100,100]、[100,0,100]、[100,100, 0]、[100,100,100]。

  • 必须在每个通道中完全采样任何中间 CMY 网格级别。 换句话说,一个示例必须存在于 CMY 多维数据集内每个三维网格交集处。

  • 对于 K = 0 和 K = 100 CMY 多维数据集,2x2x2“仅角”多维数据集是接受的有效最小值。

    [注意:对于 K=0 和 K=100 级别,3x3x3 CMY 多维数据集将作为 2x2x2“仅角”多维数据集进行处理;中间样本级别将被忽略。 4x4x4 和更大的多维数据集将使用所有网格上的样本。]

  • 对于中间 K 级别,4x4x4 CMY 多维数据集是接受的有效最小值。

高质量配置文件将使用比有效期所需的最小值更精细的采样网格,通常为 9x9x9x9 或更高。 IT8.7/3、IT8.7/4 和 ECI 目标中的示例 (DMP) CMYK 打印机基线设备模型生成有效的设备模型配置文件。 虽然此设备模型能够忽略这些目标中的无关 (离网) 样本,但不能保证能够针对其他目标执行此操作,因此,建议从进入此设备模型的配置文件的度量集中删除无关样本。

打印机型号的反转带来了更多的困难。 给定 CIECAM 中的输入颜色,存在此颜色是否在打印机色域内的问题。 还有关于颜色外观空间中点排列的问题。 虽然我们可以将 CMYK 值安排在矩形网格上(如 IT8.7/3 目标中所做的那样),但生成的打印颜色不能与它们位于颜色外观空间中一样。 一般情况下,它们散落在颜色外观空间中,没有特定图案。

散点反转问题通常有两种方法。 一种方法是使用基本三维实体(如四维实体)对打印机色域进行几何细分。 可以从 CMY (K) 空间的相应细分中推断出颜色外观空间中打印机色域的细分,请参阅 Hung[93], Kang[97]。此方法具有计算简单性的优点。 对于四面体,内插仅使用 4 个点。 另一方面,结果在很大程度上取决于几个点,这意味着测量误差将对结果产生重大影响。 内插器也往往不太流畅。 第二种方法不假定任何细分,并且基于分散数据内插技术。 一个经典示例是谢泼德内插技术,或反加权方法 (请参阅谢泼德 [68]) 。 在这里,以某种方式选择输入点周围的几个点,每个点都分配了一个权重,通常与距离成反比,内插值作为相邻点的加权平均值。 在此方法中,相邻点的选择对性能至关重要。 虽然太少的点会使内插不准确且不平滑,但过多的点会导致较高的计算成本,因为权重通常是非线性函数,计算成本高昂。

上述两种方法都有问题。 细分方法严重依赖于数据是否合理地没有噪音,通常内插不是很顺利。 散点数据内插对数据干扰的容忍度更高,通常提供更流畅的内插,但计算成本更高。

新的 CTE 采用替代方法。 CMYK 设备被视为多个 CMY 设备的集合,每个设备的特定值为黑色 (K) 。 使用采用作为参数的浅色度和色度的选择算法,选择黑色级别。 通过使用 RGB 打印机算法在其他位置采用的牛顿方法,通过将相应的 CMY 反转 Luv 表来获取 CMY 值。

请执行以下步骤。

  1. 打印特征化目标,即 IT8.7/3 目标,或包含按常规或不规则间隔采样 CMYK 空间的目标。
  2. 使用分光光度计测量目标,并将度量值转换为 CIELUV 空间。
  3. 构造从 CMYK 到 Luv 的正向映射。
  4. 使用正向映射为 K 值范围构造一组 CMY 到 Luv 映射。
  5. 对于任何输入 Luv 值,通过选择上述步骤 4 中构造的映射之一并使用 Newton 的 方法反转来获取相应的 CMYK 值,以获取与所选 K 值一起的 CMY 着色剂集。

步骤 1 和 2 是标准过程,由不属于新 CTE 的分析程序执行。 IT8.7/3 目标包含对 C、M、Y 和 K 不同级别的所有 CMYK 值的合理详细采样。或者,可以使用具有 C、M、Y 和 K 通道统一采样的自定义目标。 打印目标后,可以使用分光光度计或色度计来测量每个补丁的 XYZ 值,并且可以使用 CIELUV 模型将 XYZ 值转换为 Luv 值。

步骤 3:构建从 CMYK 到 Luv 的正向映射,可以通过在 CMYK 空间中的矩形网格上应用任何已知的内插技术(如四面体或多线性方法)来实现。 在新 CTE 中,使用 4 维四面体内插。 但是,由于每个 K 级别的 CMY 采样网格通常不同,因此我们使用超采样技术,详见下面。 对于给定的 CMYK 点,首先根据 K 值确定夹心 K 级别。 然后在每个 K 级别上引入一个“超级网格”,即两个 K 级别的 CMY 网格的并集。 在每个 K 级别上,任何新引入的网格点的 Luv 值都通过该 K 级别的三维四面体内插获得。 最后,针对此新网格执行特定 CMYK 点的 4 维四面体内插。

显示超级采样的示意图。

图 8 :超级采样

步骤 4 构造一组 CMY 到 Luv 查找表, (LUT) 。 重复调用步骤 3 中构造的前向映射以重新采样 CMYK 空间。 CMYK 颜色空间使用 K 的偶数间距和 CMY 的不同但仍均匀间隔的采样进行采样。

步骤 5 是使用步骤 4 中针对任何输入 Luv 点构造的 LUT 获取 CMYK 值的过程。 通过分析请求的 Luv 中的亮度和色度来选择 K 的适当值。 选择表后,将使用 Newton 的 方法 (从表中获取 CMY 值,如前面) RGB 打印机设备型号中所述。

CIELUV 空间用于打印机模型而不是 CIEJab,因为设备模型应仅基于 DMP 中可用的比色数据。 DMP 包含每个测量补丁的比色数据,包括媒体白点,因此可以将 CIEXYZ 数据转换为 CIELUV 数据。 但是,无法转换为 CIECAM02 JCh 或 Jab,因为无法访问 DMP 中的查看条件信息。

RGB 投影仪设备型号基线

注意:许多 RGB 投影仪具有多个工作模式。 在一种模式(通常是默认模式,可能称为“演示”)中,投影仪的颜色响应针对最大亮度进行了优化。 然而,在这种模式下,投影仪失去了重现光的能力,轻微的颜色,如淡黄色和一些肉色调。 在另一种模式(通常称为“电影”、“视频”或“sRGB”)中,投影仪针对真实图像和自然场景的再现进行优化。 在此模式下,将权衡最大亮度以提高颜色再现的整体质量。 若要使用 RGB 投影仪获得令人满意的色彩再现,必须将投影仪置于可以重现平滑色域的模式下。

显示 D L P 设备模型的示意图。

图 9 :DLP 设备型号

传入的 RGB 值通过两个计算路径。 第一个是矩阵模型,它生成 XYZ 值。 紧接着是从 XYZ 转换为 Luv。 第二种是使用四面内插的非统一 LUT 内插。 通过构造,内插的输出已在 Luv 空间中。 添加两个输出以获取预测的 Luv 值。 这最终会转换为 XYZ,这是 DLP 设备比色模型的预期输出。

由于投影仪是显示设备,它们还支持模型的反转,即从 XYZ 转换为 RGB。 由于设备模型将 RGB 空间转换为 XYZ 空间(二者都是三维空间),反转等效于求解三个未知数中的三个非线性公式。 这可以通过标准公式求解技术(如牛顿-拉帕森)来实现。 但是,最好先将 XYZ 转换为 Luv,然后反转 Luv To RGB 转换,因为 Luv 空间比 XYZ 空间更具有感知线性。

ICC 设备模型基线

CITE ICC 工作流互操作性是通过创建一个特殊的 ICC 设备基线设备模型配置文件来启用的,该配置文件用于存储配置文件对象并使用 no-op XYZ 配置文件创建 ICC 转换。 然后,此转换用于在设备和 CIEXYZ 颜色之间进行转换。

显示 C I I T E C C 工作流互操作性的关系图。

图 10 :CITE ICC 工作流互操作性

基本颜色管理概念

Windows 颜色系统架构和算法