Compartilhar via


Esquema e algoritmo de perfil do modelo de dispositivo de cores do WCS

Este tópico fornece informações sobre o esquema de perfil do modelo de dispositivo de cor do WCS e seus algoritmos associados.

Este tópico contém as seguintes seções:

Visão geral

Esse esquema é usado para especificar o conteúdo de um CDMP (perfil de modelo de dispositivo de cor). Os algoritmos de linha de base associados são descritos abaixo.

O esquema de DMP (perfil de modelo de dispositivo) básico consiste nos dados de medição de amostragem.

O componente de amostragem do esquema XML DMP fornece suporte para destinos básicos de medição de cores, concentrando-se em destinos padrão comuns e destinos otimizados para os modelos de dispositivo de linha de base.

Além disso, o perfil do dispositivo fornece informações específicas sobre o modelo de dispositivo de destino e fornece uma política que o modelo de dispositivo de fallback de linha de base pode usar se o modelo de destino não estiver disponível. As instâncias de perfil podem incluir extensões privadas usando mecanismos de extensão XML padrão.

Arquitetura de perfil do modelo de dispositivo de cores

Diagrama que mostra as informações que compõem um Perfil de Modelo de Dispositivo.

O esquema 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>

Adição de calibragem do CDMP v2.0 do WCS

O elemento ColorDeviceModel do esquema CDMP foi atualizado no Windows 7 para incluir o novo elemento de calibragem. O exemplo a seguir mostra a alteração no esquema 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>
  ...

Os elementos de esquema CDMP

Observação

As primárias são exemplos principais de vermelho, verde, azul, preto e branco. Uma rampa primária é uma rampa tonal da luminância mínima para o valor primário completo. O número máximo de entradas em uma rampa de tom é 4096.

Observação

Os DMPs são necessários para ter dados de medição.

ColorDeviceModelProfile

Esse elemento é do tipo ColorDeviceModel.

Condições de validação: Cada subelemento é validado por seu próprio tipo.

ColorDeviceModel

Esse elemento é uma sequência dos seguintes sub-elementos

  1. Cadeia de caracteres ProfileName,
  2. cadeia de caracteres de descrição opcional,
  3. cadeia de caracteres de autor opcional,
  4. Optional MeasurementConditions MeasurementConditionsType,
  5. Self-Luminous booliano,
  6. MaxColorant float,
  7. Float MinColorant,
  8. Escolha de elementos
    1. CRTDevice,
    2. LCDDevice,
    3. RGBProjectorDevice,
    4. ScannerDevice,
    5. CameraDevice,
    6. RGBPrinterDevice,
    7. CMYKPrinterDevice,
    8. RGBVirtualDevice,
  9. PlugInDevice,
  10. ExtensionType opcional

Condições de validação: Cada subelemento é validado por seu próprio tipo. Subelementos de cadeia de caracteres têm no máximo 10.000 caracteres. O subelemento MaxColorant deve ser maior ou igual a zero (0) e maior que o subelemento MinColorant. O MinColorant pode ser negativo.

NamespaceVersion

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

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

Versão

Versão = "1.0" com o Windows Vista.

Condições de validação: Qualquer valor >de versão 0.1 ou <=2.0 é válido para dar suporte a alterações não interruptivas no formato.

Documentação

Esquema de Perfil de Modelo de Dispositivo.

Direitos autorais (C) Microsoft. Todos os direitos reservados.

Elemento CRTDevice

Esse elemento é uma sequência de sub-elementos de um MeasurementData DisplayMeasurementType.

Condições de validação: Cada subelemento é validado por seu próprio tipo.

Elemento LCDDevice

Esse elemento é uma sequência de sub-elementos de um MeasurementData DisplayMeasurementType.

Condições de validação: Cada subelemento é validado por seu próprio tipo.

Elemento ProjectorDevice

Esse elemento é uma sequência de sub-elementos de um MeasurementData RGBProjectorMeasurementType.

Condições de validação: Cada subelemento é validado por seu próprio tipo.

Elemento ScannerDevice

Esse elemento é uma sequência de subelementos de um MeasurementData RGBCaptureMeasurementType

Condições de validação: Cada subelemento é validado por seu próprio tipo.

Elemento CameraDevice

Esse elemento é uma sequência de subelementos de um MeasurementData RGBCaptureMeasurementType

Condições de validação: Cada subelemento é validado por seu próprio tipo.

Elemento RGBPrinterDevice

Esse elemento é uma sequência de sub-elementos de um MeasurementData RGBPrinterMeasurementType.

Condições de validação: Cada subelemento é validado por seu próprio tipo.

Elemento CMYKPrinterDevice

Esse elemento é uma sequência de sub-elementos de um MeasurementData CMYKPrinterMeasurementType.

Condições de validação: Cada subelemento é validado por seu próprio tipo.

Elemento RGBVirtualDevice

Esse elemento é uma sequência de sub-elementos de um RGBVirtualMeasurementDataType.

Condições de validação: Cada subelemento é validado por seu próprio tipo.

PlugInDeviceType

Esse elemento é uma sequência de um GUIDType guid e quaisquer subconjuntos.

Condições de validação: O GUID é usado para corresponder ao GUID DLL do Plug-In DM. Há um máximo de 100.000 subelementos personalizados.

RGBVirtualMeasurementType

Esse elemento é uma sequência que consiste em

  1. Grupo RGBPrimariesGroup

  2. Uma escolha de

    • Gama
    • GammaOffsetGain
    • GammaOffsetGainLinearGam
    • Elementos ToneResponseCurves
  3. GamutBoundarySamples GamutBoundarySamplesType opcional

  4. TimeStamp dateTime

Condições de validação: Cada subelemento desses tipos tem suas próprias condições de validação.

GammaType

Esse elemento é um tipo complexo que consiste no atributo

  • Gamma NonNegativeFloatType

Condições de validação: Para ser determinado com base nos comentários do setor.

GammaOffsetGainType

Esse elemento é um tipo complexo que consiste nos atributos

  • Gamma NonNegativeFloatType
  • Offset NonNegativeFloatType
  • Ganhe NonNegativeFloatType

Condições de validação: Para ser determinado com base nos comentários do setor.

GammaOffsetGainLinearGainType

Esse elemento é um tipo complexo que consiste nos atributos

  • Gamma NonNegativeFloatType
  • Offset NonNegativeFloatType
  • Ganhe NonNegativeFloatType
  • LinearGain NonNegativeFloatType
  • TransitionPoint NonNegativeFloatType.

Condições de validação: Para ser determinado com base nos comentários do setor.

ToneResponseCurvesType

Esse elemento é uma sequência de

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

O elemento também tem um atributo TRCLength de tipo unsignedint.

Condições de validação: Para ser determinado com base nos comentários do setor.

GamutBoundarySamplesType

Esse elemento é uma sequência de RGBTypes RGB.

Condições de validação: Atualmente, ocorrem máximas não limitadas, a serem limitadas com base nos comentários do setor.

FloatPairList

Esse elemento é um tipo simples de lista de pares de floats.

Condições de validação: Para ser determinado com base nos comentários do setor.

CMYKPrinterMeasurementType

Este elemento é um

  1. sequência do elemento ColorCube que consiste em uma sequência de Sample NonNegativeCMYKSampleType

  2. Atributo TimeStamp dateTime.

Condições de validação: Para ser determinado por meio de comentários do setor.

RGBPrinterMeasurementType

Esse elemento é um

  1. sequência do elemento ColorCube que consiste em uma sequência de Sample NonNegativeRGBSampleType

  2. Atributo TimeStamp dateTime.

Condições de validação: Para ser determinado por meio de comentários do setor.

RGBCaptureMeasurementType

Esse elemento é uma sequência de

  1. PrimaryIndex complexType de

    1. OneBasedIndex branco
    2. OneBasedIndex preto opcional
    3. OneBasedIndex vermelho opcional
    4. OneBasedIndex verde opcional
    5. OneBasedIndex azul opcional
    6. Ciano Opcional OneBasedIndex
    7. Magenta OneBasedIndex opcional
    8. OneBasedIndex amarelo opcional
  2. NeutralIndices de linhas do OneBasedIndex

  3. Sequência ColorSamples de Sample NonNegativeRGBSampleType

O elemento também tem um atributo TimeStamp dateTime.

Condições de validação: Para ser determinado por meio de comentários do setor.

OneBasedIndex

Esse elemento é um tipo simples de int sem sinal de base de restrição com valor minInclusive = "1".

Condições de validação: Para ser determinado por meio de comentários do setor.

RGBProjectorMeasurementType

Esse elemento é uma sequência de

  1. Grupo RGBPrimariesGroup
  2. elemento ColorSamples que consiste em sequência de Sample NonNegativeRGBSampleType

O elemento também tem um atributo TimeStamp dateTime.

Condições de validação: Para ser determinado por meio de comentários do setor.

DisplayMeasurementType

Esse elemento é uma sequência de

  1. grupo RGBPrimariesGroup
  2. GrayRamp da sequência de Sample NonNegativeRGBType
  3. RedRamp da sequência de Sample NonNegativeRGBType
  4. GreenRamp da sequência de Sample NonNegativeRGBType
  5. BlueRamp da sequência de Sample NonNegativeRGBType

O elemento DisplayMeasurementType também tem um atributo TimeStamp dateTime.

Condições de validação: Para ser determinado por meio de comentários do setor.

MeasurementConditionsType

MeasurementConditionsType é uma sequência de subconjuntos que contém:

  1. Valor de enumeração de cadeia de caracteres restrita colorspace de "CIEXYZ"
  2. opção de enumeração de cadeia de caracteres WhitePoint NonNegativeXYZType ou WhitePointName dos valores D50, D65, A ou F2
  3. Geometry GeometryType
  4. ApertureSize inteiro em milímetros

Os padrões são:

  1. Impressoras RGB e CMYK:
    1. CIEXYZ MeasurementSpaceType
    2. D50 WhitePointValue
    3. GeometryType 0/45
    4. ApertureSize de 10mm
  2. Scanners:
    1. CIEXYZ MeasurementSpaceType
    2. D50 WhitePointValue
    3. GeometryType 0/45
    4. ApertureSize de 10mm
  3. Exibe e dispositivo virtual RGB:
    1. CIEXYZ MeasurementSpaceType
    2. D65 WhitePointValue
    3. GeometryType 0/45
    4. ApertureSize de 10mm
  4. Câmeras:
    1. CIEXYZ MeasurementSpaceType
    2. D65 WhitePointValue
    3. GeometryType Direto
    4. ApertureSize de 10mm

Condições de validação: A validação de cada subconjunto é determinada por condições de validação para esses subconjuntos. Se algum subconjunto estiver ausente, o padrão específico do tipo de modelo de dispositivo será usado.

GeometryType

String

Valores de enumeração:

  • "0/45"
  • "0/diffuse"
  • "difusa/0"
  • "Direct"

Condições de validação: Qualquer valor, exceto os valores de enumeração listados, é inválido. Essas informações não alterarão o comportamento de processamento de linha de base.

RGBPrimariesGroup

Esse elemento é uma sequência de

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

Condições de validação: Para ser determinado por meio de comentários do setor.

NonNegativeCMYKSampleType

Esse elemento é uma sequência de

  1. CMYK NonNegativeCMYKType
  2. CIEXYZ NonNegativeXYZType

O elemento também tem um atributo opcional Cadeia de caracteres de marca

Condições de validação: Para ser determinado por meio de comentários do setor.

NonNegativeRGBSampleType

Esse elemento é uma sequência de

  1. RGB NonNegativeRGBType
  2. CIEXYZ NonNegativeXYZType

O elemento também tem um atributo opcional Cadeia de caracteres de marca

Condições de validação: Para ser determinado por meio de comentários do setor.

NonNegativeCMYKType

Esse elemento que consiste em atributos

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

Condições de validação: Para ser determinado por meio de comentários do setor.

NonNegativeRGBType

Esse elemento que consiste em atributos

  1. R float
  2. G float
  3. B float

Condições de validação: Para ser determinado por meio de comentários do setor.

Extensiontype

O elemento ExtensionType é uma sequência de qualquer tipo de sub-elemento e é usado para informações proprietárias de aplicativos que não são da Microsoft.

Condições de validação: Esse elemento é opcional. Pode haver no máximo 1000 subconjuntos de extensão.

NonNegativeXYZType

O elemento NonNegativeXYZType é composto por NonNegativeFloatType três elementos de ponto flutuante IEEE de precisão única chamados "X", "Y" e "Z". Esses valores são limitados aos valores de medida de perfis DMP. Essas medidas podem ser valores reflexivos CIEXYZ 1931 absolutos (não relativos) ou valores CIEXYZ 1931 diretos (transmissivos) absolutos em candelas por metro quadrado de unidades.

Condições de validação: Somente valores reais são válidos e valores de medida CIEXYZ negativos são inválidos. Como esses são valores absolutos, os valores podem ser maiores que 1,0f. Um limite razoável para qualquer valor "X", "Y" ou "Z" é arbitrariamente definido como 10000,0f.

XYZType

O elemento XYZType é composto por três valores de ponto flutuante IEEE de precisão única: "X", "Y" e "Z".

Os algoritmos de linha de base cdmp

Linha de base do modelo de dispositivo CRT

Para entender esse modelo, você deve considerar o processo de caracterização e a modelagem do dispositivo. No processo de caracterização, as medidas XYZ são executadas primeiro nas cores obtidas preenchendo o buffer de exibição de um dispositivo de exibição CRT. Os seguintes valores de exemplo gerarão bons dados para o modelo de dispositivo CRT de linha de base:

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

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

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

Neutros: R = G= B = 0, 8, 16, 32, 64, 128, 192, 255

Incrementos diferentes de 15 e incrementos não lineares também podem ser usados. Cada rampa vermelha, verde, azul e neutra deve conter pelo menos três amostras, mas é recomendável fornecer mais amostras. Você deve fornecer amostras para vermelho puro, verde, azul, preto e branco. Os exemplos não precisam ser espaçados uniformemente.

O processo de criação da matriz tristimulus consiste em duas etapas. Primeiro, estime o valor XYZ do ponto preto ou o sinalizador. Esta etapa baseia-se em grande parte no trabalho de Berns[3] com uma função objetiva ligeiramente modificada para a otimização não linear. Em segundo lugar, calcule a matriz tristimulus com base no resultado da etapa um e também de um cálculo médio em todas as medidas por canal, não apenas na contagem digital máxima.

Cada uma dessas etapas contém procedimentos detalhados. O ponto de partida são as rampas (17 etapas em nosso exemplo) para cada um dos canais R, G e B. Quando as medidas XYZ são plotadas no plano xy chromaticity, uma situação típica é mostrada na Figura 1. A primeira etapa consiste em resolver um problema de otimização não linear para encontrar o ponto negro "mais adequado" que minimizará o descompasso na cromática à medida que se atravessa os canais R, G e B. Com base em Berns[3], buscamos ( XK,YK,ZK ) que minimiza a seguinte função de objetivo:

Mostra a função de objetivo em que Sr, Sg e Sb são o conjunto de pontos de dados nos canais R, G e B.

em que SR,SG e SB são o conjunto de pontos de dados correspondentes aos pontos nos canais R, G e B. Para qualquer conjunto S, defina:

Mostra uma fórmula para definir qualquer conjunto S.

No anterior, | S | é a cardinalidade de S, ou seja, o número de pontos no conjunto S. Mostra uma fórmula para a cromática de um ponto. é as coordenadas de cromática do ponto Mostra uma formaula para um ponto. , portanto , Mostra uma fórmula para a média ou o centro da massa., é a média, ou centro de massa, de todos os pontos no conjunto S no plano de cromática. Assim, Mostra uma fórmula para a soma de um segundo momento de pontos. é a soma dos segundos momentos dos pontos sobre o centro da massa e é uma medida de como os pontos são distribuídos sobre ele. Por fim, Mostra uma fórmula para a medida total da distribuição de três clusters de pontos. É uma medida total de como os três clusters de pontos são distribuídos sobre seus respectivos centros de massa.

No cálculo de Mostra uma fórmula de f(X,Y,Z; Xk, Yk, Zk). , se Mostra uma fórmula para X. , o cálculo é ignorado e a cardinalidade de S é ajustada adequadamente.

Apesar da complexidade aparente da função objetiva, é uma soma dos quadrados de muitas funções diferenciais em XK,YK ZK (17 pontos 2xy -components 3 canais = 102, no exemplo) e, portanto, é passível de padrão técnicas de quadrados menos não lineares, como o algoritmo Levenberg-Marquardt, que é o algoritmo usado no WCS. Observe que a função de objetivo anterior é diferente da sugerida em Berns[3] na medida em que a última função mede a variação das distâncias do centro da massa, de modo que a variação seja zero quando os pontos são equidistantes do centro da massa, mesmo que possam se espalhar um pouco sobre ela. No exemplo, a dispersão de pontos é contorcida diretamente usando os segundos momentos.

Assim como acontece com qualquer algoritmo iterativo para o problema de quadrados mínimos não lineares, Levenberg-Marquardt requer um palpite inicial. Há dois candidatos óbvios. Uma é (0, 0, 0); o outro é o ponto negro medido. Para o CTE, o ponto negro medido é usado pela primeira vez como o palpite inicial. Se um máximo de 100 iterações for excedido sem atingir um limite de uma distância média de 0,001 de cada ponto de seu centro de massa (que corresponde a um valor limite de (0,001) 17 3 = 0,000051 para a função objetiva), outra rodada de iterações com a estimativa inicial de (0, 0, 0) será executada. A estimativa resultante do ponto negro é XYZ em comparação com a melhor estimativa da rodada anterior de iterações (com o ponto preto medido como o palpite inicial). Use a estimativa que fornece o menor valor para a função de objetivo. A escolha de 100 iterações e a distância de erro de 0,001 foram selecionadas empiricamente. Em versões futuras, pode ser razoável parametrizar a distância de erro.

O resultado da primeira etapa é o ponto negro estimado ( XK,YK,ZK ). A etapa dois consiste em determinar a matriz tristimulus com uma média da cromática dos pontos nos três clusters obtidos na etapa um. Para CRTs, isso é feito principalmente para minimizar os efeitos dos erros de medida. Os pontos usados na média da cromática devem ser os mesmos pontos usados na otimização na etapa um. Em outras palavras, se o primeiro ponto (contagem digital 15, no exemplo) em cada rampa for descartado na etapa de otimização, o mesmo deverá ser feito na média. Se Mostrar fórmulas de cromática média para coordenadas nos canais vermelho e verde. e Mostrar uma fórmula de cromática média para coordenadas no canal azul. São as coordenadas de cromática média dos canais vermelho, verde e azul, o procedimento a seguir determina a matriz tristimulus. Primeiro, resolva o sistema linear 3?3:

Mostra a primeira parte do procedimento para resolver um sistema linear 3?3.

Mostra a segunda parte do sistema linear 3?3. Mostrar o valor de t subscrito b no final da segunda parte do sistema linear 3?3.

XW,YW,ZW

Mostra a parte final do procedimento para resolver um sistema linear 3?3.

Depois que a matriz tristimulus é determinada, a determinação das curvas de tom segue a abordagem padrão. Para exibições de CRT, presume-se que os canais individuais sigam o modelo "GOG":

Mostra a fórmula para o modelo 'G O G'.

em que kg é o "ganho", 1 -kg é o "deslocamento" e ? é o "gama". A matriz inversa da matriz tristimulus é aplicada aos dados XYZ dos neutros para obter os dados RGB lineares, que são correlacionados com os valores RGB digitais usando regressão não linear no modelo GOG. Essas características não precisam ser as mesmas para os canais R, G e B, e geralmente não são as mesmas.

Berns[1]: Berns, Billmeyer e Saltzman's Principles of Color Technology, 3 rd Ed. John Wiley & Sons (2000).

Berns[2]: Berns e Katoh, a função de transferência digital para radiométrica para exibições crt controladas por computador, CIE Expert Symposium '97 Color Standards for Imaging Technology, Nov. 1997.

Berns[3]: Berns, Fernandez e Taplin, estimando Black-Level emissões de Computer-Controlled displays, pesquisa e aplicação de cores, 28: 379-383 Wiley Periodicals, Inc. (2003)

Kang[1]: Kang, Color Technology for Electronic Imaging Devices, SPIE (1997)

Katoh[1]: Katoh, Deguchi e Berns, Uma proposta precisa de caracterização do MONITOR CRT (II) para uma extensão para o método CIE e sua verificação, Opt. Rev. 8: 397-408 (2001)

Linha de base do modelo de dispositivo LCD

A Linha de Base do Modelo de Dispositivo LCD é semelhante à Linha de Base do Modelo de Dispositivo CRT. Esta seção explicará as maneiras pelas quais a modelagem LCD difere da modelagem CRT.

Uma diferença é que você não pode assumir que as exibições de LCD seguem o modelo GOG usado para CRTs e as curvas de tom são obtidas pela interpolação de dados medidos. Por isso, o eixo neutro do dispositivo deve ser amostrado com mais frequência.

Aqui estão alguns valores de exemplo típicos que podem gerar bons dados para a linha de base do modelo de dispositivo LCD:

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

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

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

Neutros: R = G = B = 0, 15, 30, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255.

O processo de média das cromáticas de cores medidas para obter as cromáticas para as primárias do dispositivo é mais crítico para LCDs do que para CRTs. Quando as medidas XYZ são plotadas no plano xy da cromática, uma situação típica é mostrada na Figura 1. Observe como a cromática deriva em direção ao ponto negro. Isso ocorre porque todos os LCDs têm uma certa quantidade de vazamento de luz.

Diagrama que mostra um grafo da cromática usando dados brutos sem correção.

Figura 1 : o diagrama de cromática usando dados brutos sem correção

Quando isso é subtraído das medidas XYZ brutas, uma situação típica é representada na Figura 2. Os pontos agora estão clusterizados em cerca de três centros, embora eles não caiam de forma idêntica sobre eles. O processo de média descrito para CRTs melhora muito os resultados para LCDs.

Diagrama que mostra um grafo da cromática usando dados brutos com um ponto preto ajustado.

Figura 2 : o diagrama de cromática usando dados com ponto preto ajustado

Linha de base do modelo de dispositivo de captura RGB

O modelo de dispositivo de captura RGB de linha de base é uma subclasse da classe IDeviceModel. Na caracterização colorimétrica de dispositivos de captura de cores, como scanners e câmeras digitais, a abordagem a seguir é usada. Um destino que consiste em patches de cores com valores CIEXYZ conhecidos é capturado usando o dispositivo de captura. O resultado da captura é uma imagem de bitmap RGB na qual a cor de cada patch é codificada em um valor RGB. Esses valores RGB do dispositivo são específicos para um dispositivo de captura específico. O objetivo da caracterização colorimétrica é estabelecer uma relação empírica entre os valores RGB do dispositivo e os valores CIEXYZ, ou uma transformação matemática de RGB para XYZ que modela com a maior precisão possível o comportamento do dispositivo de captura.

Essa transformação matemática pode ser modelada razoavelmente por polinomiais de graus baixos. Este procedimento é detalhado na literatura, por exemplo Kang[92], Kang[97]. Em Kang[97], é relatada uma abordagem que usa um conjunto de três polinômios com 3, 6, 8, 9, 11, 14 ou 20 termos nas variáveis R, G e B, enquanto os três polinomiais regredim respectivamente nos componentes X, Y, Z do espaço CIEXYZ. Para o polinomial de 20 termos, o formulário é:

Mostra o polinomial de 20 termos.

Há expressões semelhantes para Y e Z. A técnica matemática para ajustar os polinomiais se enquadra em "Regressão Linear Multivariada" e é descrita em qualquer texto elementar em Estatísticas.

Esse método de regressão linear sofre por não minimizar a função de objetivo "certa". Por design, a regressão linear localiza a solução de quadrados mínimos, o que implica que os coeficientes obtidos minimizarão a soma total de quadrados de erros no espaço subjacente ou, equivalentemente, a soma dos quadrados das distâncias euclidianas. Na prática, você deseja minimizar a soma dos quadrados de ? Es, onde? E é um dos padrões aceitos, como o CIE94. Minimizar essa função de objetivo é um problema de regressão não linear.

No novo mecanismo, Lab to XYZ é o espaço de cor CIE que é regredido e o polinomial cúbico de 20 termos é usado como o modelo para o dispositivo de captura ou coeficientes ls,as,bs de modo que os polinomiais a seguir minimizem a soma dos quadrados de ? E CIE94 s.

Mostra um conjunto de fórmulas polinomiais.

A solução ( li, a i, bi ) no espaço numérico real de 60 dimensões R203 deve ser de modo que o seguinte erro total seja minimizado:

Mostra o erro total a ser minimizado.

em que a soma é por meio de todos os pares de ponto de dados (Ri,Gi,Bi; Li,ui,vi ) no conjunto de dados de amostra mais pontos de controle adicionais a serem detalhados a seguir. Esse é um problema de regressão não linear porque os parâmetros ? i, a i, * i* insira na função de objetivo de maneira não linear (não quadrática).

Porque a função de objetivo ? é uma função não linear (e não linear) dos parâmetros ? i, a i e * i*, você deve recorrer a técnicas iterativas para resolver o problema de otimização. Como a forma da função de objetivo é uma soma de quadrados, uma técnica de otimização padrão chamada algoritmo Levenberg-Marquardt é usada. É considerado o método de escolha para problemas não lineares de quadrados mínimos. Para algoritmos iterativos como Levenberg-Marquardt, você deve fornecer uma estimativa inicial. Uma boa estimativa inicial geralmente é crítica para encontrar o valor mínimo correto. Nesse caso, um bom candidato para a estimativa inicial é a solução do problema de regressão linear. Primeiro, minimize a soma do quadrado de distâncias euclidianas no espaço de laboratório, definindo uma função de objetivo quadrático:

Mostra uma função de objetivo quadrático definida.

A solução matemática para esse problema de "quadrados mínimos lineares" é bem conhecida. Porque ? eu só aparece na modelagem L , umi aparece apenas na modelagem u e * i* aparece apenas na modelagem v ; o problema de otimização pode ser decomposto em três subproblemas: um para L, um para u e outro para v. Considere as equações L . (As equações u e as equações v seguem exatamente o mesmo argumento.) O problema de minimizar a soma de quadrados de erros em L pode ser declarado como solução da seguinte equação de matriz no sentido de quadrados mínimos:

Mostra uma equação de matriz para L.

em que N é o número total de pontos de dados (pontos amostrados originais mais pontos de controle criados de uma maneira descrita abaixo). Normalmente, N é muito maior que 20, portanto, a equação anterior é superdeterminado, exigindo uma solução de quadrados mínimos. Uma solução de formulário fechado para ? está disponível:

Mostra uma solução de formulário fechado.

Na prática, a avaliação direta usando a solução de formulário fechado não é usada porque tem propriedades numéricas ruins. Em vez disso, algum tipo de algoritmo de fatoração de matriz é aplicado à matriz de coeficiente que reduz o sistema de equações a uma forma canônica. Na implementação atual, a Decomposição de Valor Singular (SVD) é aplicada à matriz R e, em seguida, o sistema decomposto resultante é resolvido.

A solução para o problema de regressão linear, indicada por Mostra a solução para o problema de regressão linear. , é usada como o ponto de partida do algoritmo Levenberg-Marquardt. Nesse algoritmo, é computada uma etapa de avaliação que deve aproximar o ponto da solução ideal. A etapa de avaliação satisfaz um conjunto de equações lineares dependentes do valor funcional e dos valores dos derivados no ponto atual. Por esse motivo, os derivados da função de objetivo ? em relação aos parâmetros ? i, i são entradas necessárias para o algoritmo Levenberg-Marquardt. Embora haja 60 parâmetros, há um atalho que permite calcular muito menos. Pela Regra de Cadeia de Cálculo,

Mostra uma equação que permite um atalho usando a Regra de Cadeia de Cálculo.

em que j = 1, 2, , 20, Li,ui,vi são o valor CIELAB do i th ponto de exemplo, e Rij é a (i,j )th entrada da matriz R definida acima. Portanto, em vez de calcular derivativos para 60 parâmetros, você pode calcular derivativos para L,a e b usando diferenciação numérica de avanço.

Também é necessário configurar um critério de interrupção para algoritmos iterativos. Na implementação atual, as iterações serão encerradas se o DECIE94 quadrado médio for menor que 1 ou o número de iterações executadas tiver excedido 10. O número 10 vem da experiência prática de que, se as primeiras iterações não reduzirem significativamente o erro, iterações adicionais não ajudariam muito além de mover o ponto de maneira oscilatória, ou seja, o algoritmo pode não convergir. Mesmo no caso de o algoritmo divergir, podemos ter certeza de que o DECIE94 não é pior do que o que começamos, ou seja, com os parâmetros obtidos da regressão linear.

Mesmo com o método anterior de regressão não linear, há vários problemas com o ajuste. Um problema é que os polinômios tendem a solucionar ou submenu além dos pontos de dados. Maxima e minima locais artificiais podem ser introduzidos no processo de ajuste. Isso pode ser contrariado usando polinomiais de baixo grau, que é o motivo pelo qual você não deve usar mais de três graus. Um aspecto mais sério da solução de excesso ou da solução é que, embora um polinomial possa ter qualquer valor real teoricamente, o espaço que ele tenta modelar normalmente tem restrições físicas e restrições práticas. CIEXYZ deve ter todos os X, Y, Z não negativos, que é uma restrição física. Na prática, eles só assumem valores na magnitude de centenas, não milhares ou mais. Da mesma forma, o CIELAB ou CIELUV tem suas próprias restrições físicas e práticas. Quando o espaço RGB é preenchido o suficiente com pontos de exemplo, o problema de solução de excesso ou solução não é grave. No entanto, os pontos RGB capturados do dispositivo de captura geralmente não preenchem o espaço RGB uniformemente. Os pontos podem preencher apenas os 80% do cubo RGB ou, pior, podem residir em uma pasta dimensional inferior. Quando isso acontece, os polinômios regredidos podem fazer um trabalho ruim para extrapolar os valores além dos pontos de dados, às vezes retornando previsões irreais. Você deseja um modelo que sempre retorne valores razoavelmente realistas. Isso requer um método que possa controlar efetivamente o comportamento de limite dos polinômios de regressão impondo custo adicional aos polinomiais que se comportam de forma errática perto do limite do cubo RGB. Uma medida adicional para garantir que os polinomials sempre retornem valores realistas é aplicada recortar a saída no locus espectral do CIE.

É neste ponto que a modelagem do scanner e a modelagem da câmera divergem umas das outras. Espera-se que o modelo de câmera extrapole para regiões além dos pontos amostrados, incluindo os "realces especular", a mesma extrapolação não é necessária para o modelo de scanner. Espera-se que o destino do scanner cubra uma caracterização semelhante aos materiais impressos a serem verificados. O modelo de scanner ainda precisa ser robusto no sentido de que não deve retornar valores irreais, mas não é necessária uma extrapolação muito além do destino de caracterização. Para garantir a robustez, o L-polynomial acima é recortado em 100, ou seja, o modelo polinomial é forçado a não extrapolar além de "Dmin" do destino do scanner.

Espera-se que o modelo de câmera extrapole para realces especular, portanto, o recorte em 100 é indesejável. Em vez disso, o algoritmo a seguir é usado.

Pontos de controle artificiais são introduzidos para controlar o comportamento dos polinomiais em regiões com amostragem insuficiente. Colocando estrategicamente esses pontos de controle com valores apropriados, eles servem para "efetuar pull" dos polinomiais na direção necessária. Na implementação atual, são usados oito pontos de controle correspondentes aos cantos do cubo RGB. Se os valores do dispositivo forem normalizados para o Unity, esses pontos serão:

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

Exceto para o R =G =B = 1 branco, que está associado a um valor CIELAB de L = 100, u =v = 0, o algoritmo de extrapolação a seguir é usado para determinar o valor CIELAB apropriado a ser associado. Geralmente, para um determinado (R,G,B), um peso é associado a cada um dos (Ri,Gi,Bi ) no conjunto de dados amostrado. Há duas metas para atribuir o peso. Primeiro, o peso é inversamente proporcional à distância entre (R,G,B) e (Ri,Gi,Bi ). Em segundo lugar, você deseja descartar ou atribuir peso 0 a pontos que têm uma tonalidade diferente do ponto especificado (R,G,B ). Para levar em conta a matiz, considere pontos que estão dentro de um cone cujo vértice está em (0, 0, 0), cujo eixo coincide com a junção de linha (0, 0, 0) para (R,G,B) e cujo ângulo semi-vertical? satisfaz porque? = 0,9. Confira a Figura 3 para obter uma ilustração deste cone.

Diagrama que mostra a forma do bairro.

Figura 3 : filtrando os pontos de exemplo por ângulo e distância. A forma do bairro representado é apenas para fins ilustrativos. A forma real depende da distância usada; é um bairro em forma de diamante se a norma 1 for usada.

Dentro desse cone, uma segunda filtragem é executada com base na distância RGB, que usa a norma 1, definida por

Mostra a fórmula para a segunda filtragem dentro do cone.

Com o cone atual, a pesquisa inicial é para pontos que estão dentro de uma distância de 0,1 de (R,G,B ). Se nenhum ponto for encontrado nesse raio, o raio será aumentado em 0,1 e a pesquisa será reiniciada. Se a próxima rodada também não apontar nenhum ponto, o raio será aumentado em 0,1. Esse processo continua até que o raio exceda MaxDist/5, em que MaxDist = 3, no caso de 1 norma. Se nenhum ponto for encontrado, o cone será ampliado diminuindo o cos? por 0,05, ou seja, aumentando o ângulo? e reiniciando todo o processo com um raio crescente. Esse processo continua até que um conjunto não vazio de pontos seja encontrado ou cos ? chega a 0, ou seja, o cone se abriu para se tornar um plano. Neste ponto, a pesquisa é reiniciada aumentando o raio, exceto que a pesquisa continua até que o raio atinja MaxDist. Isso garante que, no pior cenário, um conjunto não vazio de pontos será encontrado. O algoritmo é resumido no diagrama de fluxo na Figura 4.

Diagrama que mostra o fluxo do algoritmo.

Figura 4 : diagrama de fluxo para determinar o conjunto S de pontos de exemplo usados na extrapolação para um valor RGB de entrada

Supondo que o processo anterior produz um S de pontos não vazio (Ri,Gi,Bi ) e correspondente (Li,ai,bi ), em seguida, para cada ponto desse tipo, um peso wi é atribuído, dado por

Mostra a fórmula de um peso para cada ponto.

Por fim, o extrapolante é definido por

Mostra a definição do extrapolante.

As equações anteriores constituem uma instância dos "métodos ponderados de distância inversa", comumente chamados de métodos Shepard. Executando cada um dos oito pontos do eq (6) por meio do algoritmo, oito pontos de controle são obtidos, cada um com valores R,G,B e L,a,b, que são colocados no pool com os dados de exemplo originais.

Para garantir que o modelo sempre produza valores de cor válidos e para integridade e estabilidade do sistema em todo o pipeline de processamento de cores, você deve executar um recorte final para a saída do modelo polinomial. A gama visual CIE é descrita pelo componente acromático (Y ou L ) e pelo componente cromático (xy ou a'b', que estão relacionados ao espaço XYZ por uma transformação projetiva). Na implementação atual, a cromática a'b' é usada porque está diretamente relacionada ao espaço CIELUV. Para qualquer valor CIELAB , primeiro recorte L para um valor não negativo:

Mostra o recorte de L para um valor não negativo.

Para permitir extrapolação para realces especular, L não é recortado em 100, o limite superior "convencional" para L no espaço de laboratório.

Em seguida, se L = 0, a e b serão recortados de modo que a*= b =* 0. Se L ? 0, calcular

Mostra a fórmula se L=0.

Esses são os componentes de um vetor no diagrama a'b' do ponto branco (u?',v?' ) para a cor em questão. Defina o locus espectral CIE como o casco convexo de todos os pontos (a',b' ), parametrizado pelo comprimento de onda ?:

Mostra a fórmula para o comprimento de onda.

em que Mostra as funções para correspondência de cores do CIE. são as funções de correspondência de cores do CIE para o observador de 2 graus. Se o vetor estiver fora do locus CIE, a cor será recortada ao ponto no locus CIE que é a interseção do locus e a linha definida pelo vetor. Consulte a Figura 5. Se o recorte tiver ocorrido, o valor a e b será reconstruído pela primeira subtração de a?' e b?' dos recortes a' e b', e, em seguida, multiplicando por 13 L.

Diagrama que mostra o grafo do algoritmo de recorte.

Figura 5 : algoritmo de recorte para valores de laboratório que estão fora da gama visual do CIE

Na implementação atual, o locus espectral do CIE no plano a'b' é representado por uma curva linear em bits com 35 segmentos (correspondente a um comprimento de onda de 360 nm a 700 nm inclusive). Ordenando os segmentos de linha para que seus ângulos sub-pretendidos no ponto branco sejam crescentes, o que equivale a comprimentos de onda decrescentes, o segmento de linha que se cruza com o raio formado pelo vetor acima pode ser encontrado por uma pesquisa binária simples.

Linha de base do modelo de dispositivo de impressora RGB

Uma caracterização de dispositivo de uma impressora RGB consiste na construção de um modelo empírico do dispositivo que prevê a cor CIELUV independente do dispositivo para qualquer valor RGB fornecido

Há duas maneiras de construir o modelo empírico. Uma maneira é usar os dados do dispositivo para uma impressora RGB e a outra é usar dados de parâmetro analítico. No primeiro, os dados de medição fornecidos por um usuário para um dispositivo de impressora RGB são usados para construir uma LUT (tabela de pesquisa 3D). Os dados de medida consistem em valores XYZ para patches RGB de amostra uniforme. Os tamanhos típicos de amostragem são 9 ou 17 para cada componente. Cada patch é medido com um colorimeter ou spectrophotometer no espaço CIEXYZ. O valor XYZ de um patch é convertido em valor CIELUV, formando um LUT 3D. No modelo de dispositivo, o método de interpolação tetraedral do Sakamoto é aplicado ao LUT 3D para prever os dados CIELUV para determinados dados RGB. (Confere 4275413 de Patentes dos EUA (Sakamoto et al.), 4511989 de Patentes dos EUA (Sakamoto), Kang [1]. As duas patentes mencionadas expiraram.). Os dados de parâmetro analítico passados no segundo método são simplesmente um LUT que foi criado anteriormente. Normalmente, esse LUT foi criado usando o primeiro método, embora pudesse ser criado manualmente.

No gerenciamento de cores atual, o mapa de origem é definido como o mapa que vai do espaço RGB para um espaço de cor CIEXYZ independente do dispositivo. O mapa de destino é definido como o mapa que vai do espaço de cor CIEXYZ independente do dispositivo para o espaço RGB. É o inverso do mapa de origem.

O modelo empírico é usado diretamente no mapa de origem. Primeiro, ele mapeia determinados dados RGB em dados CIELUV, que são convertidos em dados XYZ. No mapa de destino, os dados CIEXYZ independentes do dispositivo são convertidos primeiro em dados CIELUV. Em seguida, o modelo empírico e o método de Newton-Raphson clássico são usados para prever os melhores dados RGB para os dados CIELUV. Os detalhes sobre a conversão de dados CieLUV para RGB são os seguintes:

Depois de gerar um LUT 3D de RGB para CieLUV, o mapa de RGB para LUV é criado usando interpolação tetraedral no RGB. Este mapa é indicado pelas seguintes equações:

Mostra as equações do mapa de R G B a L U V.

A inversão do mapa consiste em resolver, para qualquer cor mostra L U V. , o seguinte sistema de equações não lineares:

Mostra as equações não lineares para resolver qualquer L U V de cor.

Uma equação não linear baseada no método de Newton-Raphson clássica é usada no novo CTE. Um palpite inicial, ou um priori see, s anterior -(R 0, G 0, B 0 ) é obtido pesquisando por meio de uma "matriz de sementes" que consiste em uma grade 8x8x8 uniforme de pares pré-computados (RGB,Luv). O Luv correspondente de RGB mais próximo do L*u*v* é escolhido. Cada ponto na matriz de sementes corresponde ao centro de uma célula para que as iterações não comecem com um ponto na face de limite do cubo RGB. Em outras palavras, O RGB das sementes é definido por: STEP = 1/8 s ijk = (STEP/2 + (i-1) STEP, STEP/2+(j-1)STEP, STEP/2+(k-1)STEP) com i,j,k = 1...8 Na i etapa de Newton-Raphson, a próxima estimativa Mostra as variáveis para a próxima estimativa. É obtida pela fórmula:

Mostra a fórmula para a estimativa.

A iteração é interrompida quando o erro (distância no espaço CIELUV) é menor que um nível de tolerância predefinido (0,1 no CTE) ou quando o número de iterações excedeu o número máximo permitido de iterações (10 no CTE). Os valores para a tolerância e o número de iterações foram empiricamente determinados como eficazes. Em versões futuras, o valor de tolerância pode ser alterado.

A matriz jacobiana é calculada usando a diferença de avanço, exceto em um ponto de limite (um ou mais dos R, G, B é 1) em que a diferença de versões anteriores é usada. Em vez de calcular o inverso da matriz jacobiana, o sistema linear é resolvido diretamente usando Gauss-Jordan eliminação com dinâmica completa.

No final das iterações, a convergência ainda pode não ser alcançada porque Newton-Raphson é um algoritmo "local", ou seja, só funciona bem se você começar com um palpite inicial próximo à solução verdadeira. Se, no final das iterações Newton-Raphson, a convergência dentro da tolerância a erros predefinida não tiver sido alcançada, as iterações serão reiniciadas com um novo conjunto de sementes, definido da seguinte maneira.

Por exemplo, a melhor solução obtida até agora é (r, g, b). A partir dessa solução, N a posteriori sementes são derivadas, em que N = 4. Intuitivamente, a solução é movida "em direção ao centro" em um tamanho de etapa que depende de N. Consulte a Figura 6.

Diagrama que mostra as direções de perturbação da solução.

Figura 6 : a direção da perturbação da solução depende de qual octant ela está.

Em outras palavras, se r > 0,5, o valor no canal R será reduzido, caso contrário, o valor será aumentado. Há uma lógica semelhante para os canais G e B. As definições precisas são:

PERTURBATION = 0,5/(N+1)

Dir(r) = -1 se r > 0,5; +1 caso contrário. Da mesma forma para Dir(g) e Dir(b)

O jth a posteriori seed, s ????, is (r + Dir(r) *j * PERTURBATION, g + Dir(g) * j * PERTURBATION, b + Dir(b) * j * PERTURBATION)

Experimente as primeiras ???? e se ele fornecer uma nova solução dentro da tolerância a erros, você poderá parar. Caso contrário, tente o segundo s ???? e assim por diante até que o Nth s ????.

Os esquemas de todo o algoritmo são mostrados na Figura 7.

Diagrama que mostra o fluxo para inverter o modelo de dispositivo.

Figura 7 : esquemas de inverter o modelo de dispositivo

Linha de base do modelo de dispositivo virtual RGB

Esse DM (modelo de dispositivo) é um algoritmo simples de reprodução de matriz/tom. A matriz é derivada do ponto branco e das primárias usando algoritmos de ciência de cores padrão. A curva de reprodução de tom é derivada dos parâmetros de medida de acordo com as descrições do ICC de CurveType e ParametricType (ou invertidas conforme necessário). Os detalhes dos algoritmos internos serão fornecidos após a validação adicional de problemas de alto intervalo dinâmico.

O modelo de dispositivo virtual RGB é uma curva de reprodução de tom/matriz idealizada RGB semelhante ao design de perfil baseado em matriz de três componentes do ICC. Os parâmetros de "medida virtual" do DM incluem um valor de ponto em branco (CIEXYZ absoluto), valores primários RGB (CIEXYZ absoluto) e uma curva de reprodução de tom baseada no ICC ParametricCurveType e CurveType na formatação XML consistente com os esquemas DMP.

A codificação de tipo de função ICC parametricCurveType e o suporte correspondente em IRGBVirtualDeviceModelBase são mostrados na tabela a seguir.

Tipo de função Parâmetros Tipo Observação
Mostra a função 'GammaType'.
g
GammaType
Implementação comum
Mostra a função 'GammaOffsetGainType'.
ga b
GammaOffsetGainType
CIE 122-1966
Mostra a função 'GammaOffsetGainOffsetType'.
ga b c
GammaOffsetGainOffsetType
IEC 61966-3
Mostra a função 'GammaOffsetGainGainType'.
ga b c d
GammaOffsetGainGainType
IEC 61966-2.1
(sRGB)
Mostra uma função para parâmetros 'g a b c d e f'.
ga b c d e f
N/D
Sem suporte no WCS

A curva de tom para dispositivos virtuais RGB é aplicada em DeviceToColorimetric entre os dados de entrada, pDeviceColors e a multiplicação de matriz. Para ColorimetricToDevice, um método deve ser usado para inverter a curva de tom. Na implementação da linha de base, isso é feito pela interpolação direta na mesma curva de tom usada para DeviceToColorimetric.

As curvas devem ser especificadas nos perfis como pares de números no espaço flutuante. O primeiro número representa valores em pDeviceColors. O segundo número representa a saída da curva de tom. Todos os valores na curva de tom devem estar entre minColorantUsed e maxColorantUsed. As curvas de tom devem conter pelo menos duas entradas: uma para minColorantUsed e outra para maxColorantUsed. O número máximo de entradas no ToneCurve é 2048. Em geral, quanto mais entradas na tabela, mais precisamente você pode modelar a curvatura. Uma interpolação linear por etapas é executada entre as entradas.

Você pode considerar métodos alternativos de interpolação. Se você souber algo sobre o comportamento subjacente do dispositivo, poderá usar menos amostras e modelar com mais precisão com uma curva de ordem mais alta. Mas se você usar o tipo de curva errado, será muito impreciso. Sem mais informações, você não pode adivinhar o tipo de curva. Portanto, use a interpolação linear e forneça muitos pontos de dados.

Linha de base do modelo de dispositivo da impressora CMYK

Uma caracterização de dispositivo de uma impressora CMYK consiste na construção de um modelo empírico do dispositivo que prevê a cor impressa para qualquer valor CMYK fornecido. A caracterização também inclui a inversão desse modelo para que uma prescrição do valor cmyk para nós para uma determinada cor a ser impressa possa ser dada. Normalmente, isso é definido em termos de valor CIEXYZ ou CIELAB.

Normalmente, um destino IT8.7/3 que contém patches CMYK é usado. Os patches consistem na amostragem do espaço CMYK de maneira bem definida para que uma grade retangular (com espaçamento não uniforme em C, M, Y e K) seja formada. Cada patch é medido com um colorimeter ou spectrophotometer. As medidas em valores CIEXYZ formam uma LUT (tabela de pesquisa), da qual um modelo empírico da impressora é criado usando o método de interpolação de Sakamoto. US Patent 4275413 (Sakamoto et al.), US Patent 4511989 (Sakamoto), Kang [1]. As duas patentes mencionadas expiraram.

Os requisitos específicos para os exemplos de medida cmyk necessários para que um perfil de modelo de dispositivo seja aceito como válido pelo modelo de dispositivo de linha de base da impressora CMYK são os seguintes. (O conjunto de exemplos é descrito mais claramente como um conjunto de cubos de exemplo CMY, cada um associado a um nível K específico.)

  • No mínimo, cubos CMY válidos devem ser fornecidos para os níveis K = 0 e K = 100.

  • Os níveis intermediários de K podem ser espaçados de forma não uniforme.

  • Qualquer nível K intermediário sem um cubo CMY válido será ignorado.

  • Os cubos CMY podem usar intervalos de amostra não uniformes (espaçamento de grade), mas o mesmo conjunto de intervalos de exemplo deve ser usado em todas as dimensões C,M e Y no cubo CMY para um determinado nível K.

  • Cada cubo CMY de nível K pode usar um número diferente e espaçamento de intervalos de exemplo.

  • Todos os cubos CMY devem conter os "cantos" do cubo CMY, ou seja, amostras cmy em [0,0,0], [0,0,100], [0,100,0], [100,0,0], [0,100,100], [100,0,100], [100,100, 0], [100,100,100].

  • Todos os níveis de grade cmy intermediários devem ser totalmente amostrados em cada canal. Em outras palavras, uma amostra deve existir em cada interseção de grade 3D dentro do cubo CMY.

  • Para os cubos K = 0 e K = 100 CMY, os cubos "somente cantos" 2x2x2 são o mínimo aceito como válido.

    [OBSERVAÇÃO: para os níveis K=0 e K=100, um cubo CMY 3x3x3 será processado como um cubo "somente cantos" 2x2x2; o nível de amostra intermediário é ignorado. Cubos 4x4x4 e maiores terão todos os exemplos em grade usados.]

  • Para níveis K intermediários, cubos CMY 4x4x4 são o mínimo aceito como válido.

Um perfil de alta qualidade usará grades de amostragem mais finas do que o mínimo necessário para a validade, geralmente 9x9x9x9 ou superior. Os exemplos dos destinos IT8.7/3, IT8.7/4 e ECI produzem DMPs (perfis de modelo de dispositivo) válidos para o modelo de dispositivo de linha de base da impressora CMYK. Embora esse modelo de dispositivo seja capaz de ignorar os exemplos desnecessários (fora da grade) nesses destinos, não há garantia de que ele seja capaz de fazer isso para outros destinos e, portanto, é recomendável que amostras desnecessárias sejam removidas dos conjuntos de medidas que entram em perfis para esse modelo de dispositivo.

A inversão do modelo de impressora apresenta mais dificuldades. Dada uma cor de entrada no CIECAM, há uma questão de saber se essa cor está dentro da gama da impressora. Há também a questão em relação à organização de pontos no espaço de aparência de cor. Embora possamos organizar os valores cmyk para cair em uma grade retangular, como é feito no destino IT8.7/3, o mesmo não pode ser dito das cores impressas resultantes, pois elas estão situadas no espaço de aparência de cor. Em geral, eles são espalhados no espaço de aparência de cor sem nenhum padrão específico.

Geralmente, há duas abordagens para o problema de inversão de pontos dispersos. Uma abordagem é usar uma subdivisão geométrica da gama de impressoras usando sólidos tridimensionais elementares, como tetrahedra. Uma subdivisão da gama de impressoras no espaço de aparência de cor pode ser induzida da subdivisão correspondente do espaço CMY(K), consulte Hung[93], Kang[97]. Essa abordagem tem a vantagem da simplicidade computacional. No caso de um tetraedro, apenas quatro pontos são usados em uma interpolação. Por outro lado, o resultado depende muito de alguns pontos, o que significa que um erro de medição terá um efeito significativo sobre o resultado. O interpolante também tende a não ser tão suave. A segunda abordagem não pressupõe nenhuma subdivisão e se baseia na técnica de interpolação de dados dispersos. Um exemplo clássico é a técnica de interpolação shepard ou método ponderado inverso (Consulte Shepard [68]). Aqui, vários pontos ao redor do ponto de entrada são escolhidos de alguma forma, cada um atribuído a um peso, geralmente inversamente proporcional à distância, e o interpolante é tomado como a média ponderada dos pontos vizinhos. Nessa abordagem, a escolha dos pontos vizinhos é fundamental para o desempenho. Embora poucos pontos possam renderizar o interpolante impreciso e não suave, muitos pontos impõem um alto custo computacional, pois os pesos normalmente são funções não lineares e dispendiosos para computar.

As duas abordagens descritas acima têm problemas. A abordagem de subdivisão depende criticamente dos dados serem razoavelmente nulos de ruído e, geralmente, o interpolante não é muito suave. A interpolação de dados dispersos é mais tolerante ao ruído de dados e geralmente fornece um interpolante mais suave, mas é computacionalmente mais caro.

A nova CTE adota uma abordagem alternativa. O dispositivo CMYK é tratado como uma coleção de vários dispositivos CMY, cada um deles com um valor específico de preto (K). Usando um algoritmo de seleção que usa como parâmetros a leveza e o croma, um nível de preto é escolhido. Os valores CMY são obtidos pela inversão da tabela CMY para Luv correspondente usando os métodos Newton empregados em outro lugar pelo algoritmo de impressora RGB.

Use as etapas a seguir.

  1. Imprima o destino de caracterização, que é o destino IT8.7/3, ou um destino que contém amostragem do espaço CMYK em intervalos espaçados regularmente ou irregularmente.
  2. Meça o destino usando um espectrômetro e converta as medidas em espaço CIELUV.
  3. Construa o mapa de encaminhamento de CMYK para Luv.
  4. Use o mapa de encaminhamento para construir um conjunto de mapas CMY para Luv para um intervalo de valores K.
  5. Para qualquer valor luv de entrada, o valor cmyk correspondente é obtido selecionando um dos mapas construídos na etapa 4 acima e invertendo usando o método de Newton para obter um conjunto de colorante CMY para acompanhar o valor K selecionado.

As etapas 1 e 2, que são procedimentos padrão, são executadas por um programa de criação de perfil que não faz parte da nova CTE. O destino IT8.7/3 contém uma amostragem razoavelmente detalhada de todos os valores cmyk em vários níveis de C, M, Y e K. Como alternativa, um destino personalizado com amostragem uniforme dos canais C, M, Y e K pode ser usado. Depois que o destino é impresso, um espectrômetro ou colorimeter pode ser usado para medir o valor XYZ de cada patch e o valor XYZ pode ser convertido no valor Luv usando o modelo CIELUV.

A etapa 3, construção do mapa de avanço de CMYK para Luv, pode ser obtida aplicando qualquer técnica de interpolação conhecida, como método tetraedral ou multilinear, na grade retangular no espaço CMYK. Na nova CTE, uma interpolação tetradimensional 4-dimensional é usada. Como as grades de amostragem cmy geralmente são diferentes em cada nível de K, no entanto, usamos uma técnica de super-amostragem, conforme detalhado abaixo. Para um determinado ponto CMYK, os níveis K de sanduíche são determinados primeiro com base no valor K. Em seguida, introduza uma "super-grade" em cada nível K que é uma união das grades CMY em cada um dos dois níveis K. Em cada nível K, o valor luv de qualquer ponto de grade recém-introduzido é obtido por uma interpolação tetraedral tridimensional dentro desse nível K. Por fim, uma interpolação tetraedral tridimensional para o ponto CMYK específico é executada nessa nova grade.

Diagrama que mostra a superamostragem.

Figura 8 : Superamostragem

A etapa 4 constrói um conjunto de LUTs (tabelas de pesquisa CMY para Luv). O mapa de avanço construído na Etapa 3 é chamado repetidamente para resampler o espaço CMYK. O espaço de cor cmyk é amostrado usando um espaçamento par de K e uma amostragem diferente, mas ainda uniformemente espaçada, de CMY.

A etapa 5 é um procedimento para obter o valor cmyk usando os LUTs construídos na Etapa 4 para qualquer ponto Luv de entrada. O valor apropriado de K é escolhido analisando a leveza, bem como o grau de cor no Luv solicitado. Depois que a tabela é selecionada, os valores cmy são obtidos da tabela usando o método newton (conforme documentado no modelo de dispositivo de impressora RGB anteriormente).

O espaço CIELUV é usado no modelo de impressora em vez de CIEJab porque o modelo de dispositivo deve ser baseado exclusivamente em dados colorimétricos disponíveis no DMP. O DMP contém dados colorimétricos para cada patch medido, incluindo o ponto branco de mídia, portanto, é possível converter dados CIEXYZ em dados CIELUV. No entanto, não é possível converter em CIECAM02 JCh ou Jab, pois não há acesso às informações de condição de exibição no DMP.

Linha de base do modelo de dispositivo do projetor RGB

Observação: muitos projetores RGB têm mais de um modo operacional. Em um modo, que geralmente é o padrão e pode ser chamado de algo como "apresentação", a resposta de cor do projetor é otimizada para o brilho máximo. No entanto, nesse modo, o projetor perde a capacidade de reproduzir cores claras, ligeiramente cromáticas, como amarelos pálidos e alguns tons de carne. Em outro modo, muitas vezes chamado de "filme", "vídeo" ou "sRGB", o projetor é otimizado para reprodução de imagens realistas e cenas naturais. Nesse modo, o brilho máximo é trocado para melhorar a qualidade geral da reprodução de cores. Para obter uma reprodução de cores satisfatória com projetores RGB, é necessário colocar o projetor em um modo em que uma gama suave de cores possa ser reproduzida.

Diagrama que mostra um modelo de dispositivo DLP.

Figura 9 : modelo de dispositivo DLP

Um valor RGB de entrada passa por dois caminhos computacionais. O primeiro é o modelo de matriz, que resulta em um valor XYZ. Isso é seguido imediatamente pela conversão de XYZ para Luv. A segunda é a interpolação LUT não uniforme usando interpolação tetraedral. A saída da interpolação já está no espaço Luv por construção. As duas saídas são adicionadas para obter o valor de Luv previsto. Isso é finalmente convertido em XYZ, que é a saída esperada do modelo colorimétrico para o dispositivo DLP.

Como os projetores são dispositivos de exibição, eles também dão suporte à inversão do modelo, ou seja, a transformação de XYZ para RGB. Como o modelo de dispositivo transforma o espaço RGB em espaço XYZ, que são tridimensionais, a inversão é equivalente a resolver três equações não lineares em três desconhecidos. Isso pode ser feito por técnicas padrão de resolução de equações, como Newton-Raphson. No entanto, é preferível primeiro converter XYZ em Luv e, em seguida, inverter a transformação Luv para RGB, pois o espaço Luv é mais percepticamente linear do que o espaço XYZ.

Linha de base do modelo de dispositivo ICC

A interoperabilidade do fluxo de trabalho CITE ICC é habilitada criando um perfil especial de modelo de dispositivo de linha de base de dispositivo ICC que armazena o objeto de perfil e cria uma transformação ICC usando um perfil XYZ sem operações. Essa transformação é usada para traduzir entre as cores do dispositivo e do CIEXYZ.

Diagrama que mostra a interoperabilidade do fluxo de trabalho C E/S C.

Figura 10 : Interoperabilidade do fluxo de trabalho CITE ICC

Conceitos básicos de gerenciamento de cores

Algoritmos e esquemas do sistema de cores do Windows