Compartilhar via


Algoritmos de criação de transformação do WCS

Criação de transformações

 

Execução de transformação sequencial

 

Criação de transformações otimizadas

 

ICCProfileFromWCSProfile

 

Preservação negra e geração negra

 

Verificar Gama

Criação de transformações

Para explicar corretamente como as transformações de cor funcionam, é útil explicar o caminho de processamento completo por meio do ICM 2.0 e dos internos da CTE. A função CreateColorTransformW do ICM 2.0 cria uma transformação de cores que os aplicativos podem usar para executar o gerenciamento de cores. Essa função cria um contexto de cor das entradas LOGCOLORSPACE e intent. As intenções são mapeadas para correlacionar o algoritmo de mapeamento de gama ICC de linha de base. Em seguida, a função chama a função ICM 2.0 CreateMultiProfileTransform para processamento de cores consistente. A função CreateColorTransform geralmente copia dados para a estrutura de transformação otimizada interna.

A função CreateMultiProfileTransform do ICM 2.0 aceita uma matriz de perfis e uma matriz de intenções ou um único perfil de link de dispositivo e cria uma transformação de cor que os aplicativos podem usar para executar o mapeamento de cores. Ele processa esses perfis de entrada e intenções para criar modelos de dispositivo, modelos de aparência de cores, descrições de limite de gama e modelos de mapeamento de gama. Veja como isso é feito:

  • Os modelos de dispositivo são inicializados diretamente de perfis de DM. Há um modelo de dispositivo criado para cada perfil na chamada para CreateMultiProfileTransform.
  • Os modelos de aparência de cores são inicializados diretamente de perfis CAM. Há um perfil CAM para cada perfil na chamada para CreateMultiProfileTransform. No entanto, o mesmo perfil cam pode ser especificado para mais de um perfil.
  • Descrições de limite gama são inicializadas de um objeto de modelo de dispositivo e um objeto CAM. Há uma descrição de limite de gama para cada perfil na chamada para CreateMultiProfileTransform.
  • Os modelos de mapeamento de gama são inicializados de dois limites de gama e uma intenção. Você deve criar um modelo de mapeamento de gama entre cada par de modelos de dispositivo criados a partir da chamada para CreateMultiProfileTransform. Observe que isso significa que você usa um modelo de mapa de gama a menos do que o modelo de dispositivo. Como o número de intenções corresponde ao número de modelos de dispositivo, também há uma intenção a mais do que o necessário. A primeira intenção na lista é ignorada. Você percorre a lista de modelos e intenções de dispositivo, criando modelos de mapeamento de gama. Escolha o primeiro e o segundo modelos de dispositivo e a segunda intenção e inicialize o primeiro modelo de mapeamento de gama. Escolha o segundo e o terceiro modelos de dispositivo e a terceira intenção e inicialize o segundo modelo de mapeamento de gama. Continue dessa maneira até que você tenha criado todos os modelos de mapeamento de gama.

Quando os perfis tiverem sido processados corretamente e todos os objetos intermediários tiverem sido criados e inicializados, você poderá criar a transformação CITE com a chamada a seguir. O pDestCAM e o pDestDM são aqueles associados ao último perfil na chamada para CreateMultiProfileTransform.

HRESULT CreateCITEColorTransform(
 __inout     IDeviceModel          *pSourceDM,
 __inout     IColorAppearanceModel *pSourceCAM,
 __in        GamutMapArray         *pGamutMapArray,
 __inout     IColorAppearanceModel *pDestCAM,
 __inout     IDeviceModel          *pDestDM,
             EColorTransformMode    eTransformMode,
 __deref_out IColorTransform      **ppCTS
 );

Suporte para plug-ins

Um problema envolvido na configuração da lista de transformações é validar se um plug-in necessário está disponível. A opção de modelo a seguir fornece essa política para controlar esse comportamento. O gerenciamento dessa lista de transformação é um método na estrutura de transformação otimizada interna, mas cada método de modelo fornece o ponteiro para si mesmo e seu próprio conjunto de valores de parâmetro.

O modo deve ser um dos seguintes.

  • TfmRobust: se um perfil de medida especificar um plug-in preferencial e o plug-in não estiver disponível, o novo sistema CTE usará o plug-in de linha de base. Se nenhum plug-in estiver disponível, a transformação relatará um erro.
  • TfmStrict: se ColorContext especificar um plug-in preferencial, o plug-in deverá estar disponível. Se nenhum plug-in preferencial for encontrado, o plug-in de linha de base será usado. Se nenhum plug-in estiver disponível, a transformação relatará um erro.
  • TfmBaseline: somente plug-ins de linha de base podem ser usados em AddMeasurementStep. Se ColorContext especificar um plug-in preferencial, o plug-in será ignorado. Se o plug-in de linha de base não estiver disponível, a transformação relatará um erro.

Transformar execução

A função TranslateColors da API do ICM 2.0 converte uma matriz de cores do espaço de cor de origem para o espaço de cor de destino, conforme definido por uma transformação de cor. Essa função verifica internamente uma matriz de cores armazenadas em cache para habilitar a correspondência imediata de cores comumente transformadas. Essa transformação dá suporte a matrizes de bytes de 8 bits por canal e matrizes float de 32 bits por canal. Todos os outros formatos serão convertidos antes de passar para a nova CTE.

A função TranslateBitmapBits da API do ICM 2.0 converte as cores de um bitmap com um formato definido para produzir outro bitmap em um formato solicitado. Essa função verifica internamente uma matriz de cores armazenadas em cache para habilitar a correspondência imediata de cores comumente transformadas. Para evitar muitos caminhos de código, suporte e complexidade de teste, há suporte apenas para um número limitado de formatos de bitmap no mecanismo de transformação e interpolação. Essa função deve converter os formatos de bitmap de entrada e saída não nativos em formatos com suporte nativo para processamento. Essa transformação dá suporte apenas a bitmaps de bytes de 8 bits por canal e bitmaps float de 32 bits por canal. Todos os outros formatos serão convertidos antes de passar para a nova CTE.

 

Execução de transformação sequencial

Se o parâmetro dwFlags tiver o SEQUENTIAL_TRANSFORM bit definido quando as funções do ICM CreateColorTransformW ou CreateMultiProfileTransform forem chamadas, as etapas de transformação serão executadas sequencialmente. Isso significa que o código percorre cada modelo de dispositivo, modelo de aparência de cor e modelo de mapeamento de gama separadamente, conforme especificado pela chamada CreateColorTransform ou CreateMultiProfileTransform . Isso pode ser útil para depurar módulos de plug-in, mas é muito mais lento do que executar por meio de uma transformação otimizada. A execução no modo sequencial não é, portanto, recomendada para software de produção. Além disso, pode haver pequenas diferenças nos resultados obtidos no modo sequencial e no modo otimizado. Isso ocorre devido a variações introduzidas quando as funções são concatenadas juntas.

Criação de transformações otimizadas

Uma transformação otimizada é uma tabela de pesquisa multidimensional. A tabela pode ser processada por um mecanismo de interpolação multidimensional, como interpolação tetraedral, que aplica as cores de entrada à transformação. A seção a seguir descreve como as tabelas de pesquisa otimizadas são criadas. A seção depois disso descreve como interpolar dentro das tabelas de pesquisa otimizadas.

Tabelas de pesquisa esparsas

Impressoras convencionais têm tintas CMYK. Para estender a gama, uma abordagem é adicionar novas tintas ao sistema. As tintas normalmente adicionadas são cores que as tintas CMYK têm dificuldade para reproduzir. As opções comuns são laranja, verde, vermelho, azul, etc. Para aumentar a "resolução aparente", tintas com tonalidades diferentes podem ser usadas, por exemplo, ciano claro, magenta leve e assim por diante. Na verdade, o dispositivo de impressora tem mais de quatro canais.

Embora as impressoras sejam dispositivos de saída, elas também executam a conversão de cores do espaço do dispositivo em outro espaço de cor. No caso de uma impressora CMYK, isso seria uma transformação de CMYK para XYZ ou o "modelo de avanço" da impressora. Combinando o modelo de encaminhamento com outras transformações, é possível emular uma impressão CMYK em outro dispositivo. Por exemplo, um CMYK de impressora para um monitor RGB possibilitaria um mecanismo de revisão de texto que emula uma impressão dessa impressora CMYK em um monitor. Da mesma forma, o mesmo também se aplica a impressoras hi-fi. Uma conversão CMYKOG para RGB permite o revisor da impressora CMYKOG em um monitor.

A abordagem convencional para implementar essa conversão de cores é usar um LUT uniforme. Por exemplo, em um perfil ICC para uma impressora CMYKOG, a especificação ICC exige uma marca A2B1 que armazena um LUT uniforme que representa uma amostragem uniforme no espaço do dispositivo CMYKOG do modelo de avanço, que vai de CMYKOG para o espaço de conexão do perfil ICC (CIELAB ou CIEXYZ). O perfil de link do dispositivo ICC permite uma transformação direta do espaço do dispositivo CMYKOG para qualquer espaço de cor, incluindo um espaço de dispositivo, também na forma de um LUT amostrado uniformemente no espaço CMYKOG. A amostragem nunca é feita com 256 níveis (profundidade de bit 8) devido ao lut enorme resultante, exceto no caso de dispositivos monocromáticos (1 canal). Em vez disso, a amostragem com profundidade de bits mais baixa é usada; algumas opções típicas são 9 (profundidade de bit 3), 17 (profundidade de bit 4), 33 (profundidade de bit 5). Com o número de níveis inferiores a 256 em cada canal, o LUT é usado em conjunto com um algoritmo de interpolação para produzir o resultado se um nível estiver entre dois níveis amostrados.

Embora um LUT uniforme seja conceitualmente simples de implementar e a interpolação em um LUT uniforme seja geralmente eficiente, o tamanho do LUT aumenta exponencialmente com a dimensão de entrada. Na verdade, se d for o número de etapas usadas no LUT uniforme e n for o número de canais no espaço de cor de origem, o número de nós no LUT será Mostra a variável para o número de nós em um LUT.. Claramente, o número de nós exige rapidamente tanto armazenamento na memória que até mesmo sistemas de computação top de linha têm dificuldade para lidar com a demanda. Para dispositivos com seis ou oito canais, uma implementação icc do perfil de dispositivo requer o uso de algumas etapas no LUT, às vezes até mesmo até cinco etapas na tabela A2B1 para manter o perfil dentro de megabytes em vez de gigabytes. Claramente, o uso de um número menor de etapas aumenta o erro de interpolação, pois agora há menos amostras. Como o LUT deve ser uniforme, a precisão sobre todo o espaço de cor é degradada mesmo nas regiões do espaço em que uma diferença de cor significativa pode ser causada por uma pequena alteração no valor do dispositivo.

Em dispositivos com mais de quatro colorantes, determinados subespaços de todo o espaço do dispositivo são mais importantes do que outros. Por exemplo, no espaço CMYKOG, as tintas ciano e verde raramente são usadas juntas porque suas tonalidades se sobrepõem em grande parte umas às outras. Da mesma forma, tintas amarelas e laranjas se sobrepõem em grande parte umas às outras. Uma redução uniforme no número de etapas pode ser vista como uma degradação geral da qualidade em todo o espaço de cores, o que é algo que você pode pagar pelas combinações improváveis de tinta, mas não para as combinações prováveis ou importantes.

Embora um LUT de amostra uniforme seja simples e eficiente para interpolação, ele impõe enormes requisitos de memória à medida que a dimensão aumenta. Na realidade, embora um dispositivo possa ter seis ou oito canais, eles raramente são usados simultaneamente. Na maioria dos casos, a cor de entrada para a transformação de cores tem apenas alguns colorantes "ativos" e, portanto, reside em um espaço de cores dimensional inferior. Isso também significa que a interpolação pode ser feita com mais eficiência nesse espaço dimensional inferior porque a interpolação é mais rápida quando a dimensão é menor.

Portanto, a abordagem é estratificar todo o espaço do dispositivo em subespaços de várias dimensões. E como dimensões inferiores (aquelas que combinam três ou quatro colorantes) são mais importantes, ao estratificar o espaço, você também pode aplicar diferentes taxas de amostragem; ou seja, um número diferente de etapas, para as partes; aumentar as taxas de amostragem para dimensões mais baixas, reduzindo-as para dimensões mais altas.

Para corrigir notações, n é o número de canais no espaço de cor de origem da transformação de cores que você deseja amostrar. Você também pode se referir a n como a dimensão de entrada e Mostra n maior ou igual a 5. , a menos que especificado de outra forma.

Os blocos de construção básicos são LUTs de várias dimensões e tamanhos de entrada, em vez de um LUT uniforme com dimensão de entrada n. Para ser mais preciso, umLUT é uma rede retangular imposta a um cubo de unidade; ou seja, todas as coordenadas do dispositivo são normalizadas para o intervalo [0, 1]). se for a dimensão de entrada do lut (observe que não precisa ser igual a n, embora Mostra V menor ou igual a n. é necessário), ele consiste em grades de amostragem unidimensionais:

Samp i: mostra uma grade de amostragem unidimensional.

em que todos os xjs devem estar no intervalo [0, 1], Mostra um d(i) sobrescrito é o número de etapas para a amostragem de canal i que deve ser pelo menos 1 e Mostra um spuperscript de X (subscrito) d(i). deve ser 1. Por outro lado, Mostra um X sobrescrito (subscrito 1). Não é necessário ser 0.

Somente os dois casos especiais de LUT a seguir serão definidos.

LUT fechado: esse é um LUT com o requisito adicional de que para cada Samp*i*, Mostra um X sobrescrito (subscrito 1) igual a 0. e Mostra um d(i) sobrescrito maior ou igual a 2. . Um LUT fechado uniforme é um LUT fechado que tem o mesmo Mostra um d(i) sobrescrito para cada canal e os nós são espaçados uniformemente entre 0 e 1.

Abrir LUT: esse é um LUT com o requisito adicional de que para cada Samp i, SHows a superscript X (subscrito 1) maior que 0. . Não há problema em ter Mostra um d(i) sobrescrito igual a 1. .

O objetivo é estratificar o cubo de unidade [0, 1] n em uma coleção de LUTs fechados e LUTs abertos, de modo que toda a coleção cubra o cubo de unidade. É conceitualmente mais simples organizar esses "estratos LUT" por suas dimensões, para que no nível superior:

Mostra o nível superior para organizar os estratos L U T por suas dimensões.

em que Mostra sigma subscrito k. é a "coleção k -dimensional strata". Observe que a dimensão de estratos começa a partir de 3 em vez de 0; ou seja, aponta, porque a interpolação de combinações de três colorantes pode ser tratada sem muita necessidade de memória.

Descrição do estrato LUT

Nesta implementação:

  1. Mostra sigma subscrito 3. consiste em LUTs fechados com três entradas, uma de cada combinação possível de três colorantes escolhidos entre os n colorantes.

  2. Mostra sigma subscrito 4. consiste em um LUT fechado para a combinação CMYK (ou os quatro primeiros colorantes), juntamente com Shows (n mais de 4) menos 1. abra LUTs para todas as outras combinações de quatro colorantes. Ao distribuir a combinação cmyk, você reconhece que é uma combinação importante.

  3. Para Mostra k igual a 5, ..., n. , mostra sigma subscript k. consiste em Shows (n over k). LUTs abertos, um para cada combinação possível de escolher k colorants do total de n colorantes.

Resta especificar os tamanhos dos LUTs. A principal diferença entre LUTs abertos e fechados é que LUTs abertos não se sobrepõem e LUTs fechados podem se sobrepor nos rostos de limite. O fato de que a amostragem unidimensional em um LUT aberto não contém 0, essencialmente significa que um LUT aberto está faltando metade dos rostos de limite, daí o nome "aberto". Se dois LUTs não se sobrepõem, você poderá usar um número diferente de etapas ou locais de nó em cada canal. O mesmo não será verdadeiro se dois LUTs se sobrepuserem. Nesse caso, se o número de etapas ou os locais do nó forem diferentes, um ponto na interseção dos dois LUTs receberá um valor de interpolação diferente, dependendo de qual LUT é usado na interpolação. Uma solução simples para esse problema é usar a amostragem uniforme com o mesmo número de etapas sempre que dois LUTs se sobrepõem. Em outras palavras:

Todos os LUTs fechados (todos os LUTs de três cores e o CMYK LUT nesta implementação) devem ser uniformes e ter o mesmo número de etapas, que são indicadas como d.

Os dois algoritmos a seguir podem ser usados para determinar o número de etapas d para LUTs fechados e o número de etapas para LUTs abertos.

Algoritmo nº 1

Esse algoritmo não requer entrada externa.

Todos os LUTs fechados serão uniformes com o número d de etapas.

Todos os LUTs abertos da dimensão k terão o mesmo número de etapas Mostra d(k) em cada canal de entrada e os nós são espaçados igualmente; ou seja, para cada Mostra i igual a 1, 2, ..., k. .

Samp i: mostra o algoritmo samp i.

Por fim, especifique d e d (k ) na tabela 1 a seguir. Os três modos, "prova", "normal" e "melhor" são as configurações de qualidade do ICM 2.0. Nessa implementação, o modo de prova tem o menor volume de memória e o melhor modo tem o maior volume de memória.

Para implementar esse algoritmo, você deve chamar o algoritmo nº 2 a seguir. Os usuários podem especificar seus próprios locais de amostragem, usando as tabelas como um guia.

Algoritmo nº 2

Esse algoritmo requer entrada externa na forma de uma lista de locais de amostragem "importantes", mas é mais adaptável e pode economizar espaço de memória potencialmente.

A entrada necessária é uma matriz de valores de dispositivo fornecidos pelo usuário. Esses valores de dispositivo indicam qual região do espaço de cor do dispositivo é importante; ou seja, qual região deve ser amostrada mais.

Todos os LUTs fechados serão uniformes com o número d de etapas, conforme descrito em Algoritmo nº 1. Os valores para d são fornecidos na Tabela 1.

(a) LUT Fechado Uniforme

Modo de prova Modo Normal Melhor modo
D 9 17 33

 

(b) Abrir LUT

Dimensão de entrada Modo de prova Modo Normal Melhor modo
4 5 7 9
5 2 3 3
6 2 3 3
7 2 2 2
8 ou mais 2 2 2

 

Tabela 1: Tamanhos de LUT usados no algoritmo

Cada LUT aberto pode ter um número diferente de etapas em cada canal de entrada e os locais de amostragem não precisam ser espaçados igualmente. Para um determinado estrato LUT aberto, há uma combinação de colorante associada, por exemplo, Mostra c subscrito 1, ..., C subscrito k. , em que o subscrito C i. s são inteiros distintos entre 1 e n. Eles são os índices de canal correspondentes aos colorantes "ativos" neste estrato.

ETAPA 1: Filtre a matriz inserida de valores de dispositivo que não estão contidos neste estrato. Um valor de dispositivo Mostra x subscrito 1, X subscrito 2, ..., X subscrito n. está contido no estrato, se e somente se Mostra um conjunto de valores para um canal e todos os outros canais são 0. Se o conjunto filtrado tiver N entradas, vamos

Mostra uma equação a ser usada se o conjunto filtrado tiver N entradas.

Para cada Mostra i igual a 1, 2, ..., k. , iterar as seguintes etapas 2-5:

ETAPA 2: se mostrar d provisoriamente subscrito (k) igual a 1. , Samp i tem apenas 1 ponto, que deve ser 1,0. Vá para o próximo i. Caso contrário, continue para a ETAPA 3.

ETAPA 3: classifique os exemplos filtrados em ordem crescente no canal Mostra I. subscrito em C .

ETAPA 4: Definir a grade de amostragem "provisória" usando os nós

Mostra os nós usados para definir a grade de amostragem

em que Mostra j igual a 1, 2, ..., d subscript provisório (k). .

ETAPA 5: regularize a grade provisória para garantir que ela esteja em conformidade com a monotonicidade estrita e também que ela termine com 1.0. Como a matriz já está classificada, os nós na grade provisória já são não descritônicos monotônicos. No entanto, nós adjacentes podem ser idênticos. Você pode corrigir isso removendo nós idênticos, se necessário. Por fim, após esse procedimento, se o ponto final for menor que 1,0, substitua-o por 1,0.

Observe que a ETAPA 5 é o motivo pelo qual os estratos LUT podem ter um número diferente de etapas em cada canal. Após a regularização, o número de etapas em um canal pode ser menor do que Mostra a tentativa de subscrito (k).

Interpolação

Você pode construir a estratificação do cubo de unidade por meio de estratos LUT abertos e estratos LUT fechados. Para executar a interpolação usando essa "estrutura LUT esparsa", siga estas etapas. Suponha um determinado valor de dispositivo de entrada Shows (X subscrito 1, X subscrito 2, ..., X subscrito n). .

ETAPA 1: determinar o número de canais "ativos". Esse é o número de canais diferentes de zero. Isso determina a dimensão k do estrato para pesquisar o estrato que contém. Mais precisamente, a dimensão de estratos será 3 se o número de canais ativos for Mostrar menor ou igual a 3. , caso contrário, a dimensão de estratos será igual ao número de canais ativos.

ETAPA 2: em Mostra sigma subscrito k. , pesquise o estrato que contém. Um valor de dispositivo estará contido em um estrato aberto se todos os canais correspondentes ao estrato tiverem valor diferente de zero e todos os outros canais forem zero. Um valor de dispositivo estará contido em um estrato fechado se cada canal não representado pelo estrato for zero. Se nenhum estrato contendo for encontrado, haverá uma condição de erro. Cancelar e relatar falha. Se um estrato contendo for encontrado, prossiga para a próxima etapa.

ETAPA 3: se o estrato que contém for fechado, a interpolação dentro do estrato poderá ser feita por qualquer algoritmo de interpolação conhecido. Nessa implementação, a escolha do algoritmo é a interpolação tetraedral. Se o estrato que contém estiver aberto e o valor do dispositivo estiver estritamente dentro do estrato, ou seja,

Mostra x subscrito i maior ou igual a... primeiro nó no canal i th

em que i é um índice de canal para o estrato, então o algoritmo de interpolação padrão, como interpolação tetraedral, funciona.

Se mostrar x subscrito menor que... primeiro nó no i th channel para alguns i, o valor do dispositivo cairá na "lacuna" entre o estrato e os subespaços dimensional inferiores. Esse MOI não está preocupado com um algoritmo de interpolação em si, portanto, qualquer algoritmo de interpolação pode ser usado para interpolar dentro dessa "lacuna", embora o algoritmo preferencial seja a interpolação transfinita a seguir.

A arquitetura do módulo de interpolação é ilustrada nas duas partes da Figura 1.

Diagrama que mostra a parte um da arquitetura do módulo de interpolação.

Diagrama que mostra a parte dois da arquitetura do módulo de interpolação.

Figura 1: Arquitetura do módulo de intepolação

Conforme explicado anteriormente, esse algoritmo é capaz de obter amostragem razoavelmente densa em regiões do espaço do dispositivo que contêm uma combinação importante de colorantes, minimizando o tamanho total de LUTs necessários. A tabela a seguir mostra uma comparação do número de nós necessários para a implementação de LUT esparsa (usando o Algoritmo nº 1 e o modo normal) e a implementação de LUT uniforme correspondente.

Número de canais de entrada LUT esparso LUT uniforme
5 142498 1419857
6 217582 24137567
7 347444 410338673
8 559618 6975757441

 

Interpolação dentro de um cubo de unidade

Uma etapa básica no caso da grade retangular é a interpolação dentro de uma célula delimitada. Para um ponto de entrada, você pode determinar a célula delimitando facilmente. Em uma grade retangular, o valor de saída em cada um dos vértices (pontos de canto) da célula delimitador é especificado. Eles também são as únicas condições de limite (BCs) que um interpolante deve satisfazer: o interpolante deve passar por todos esses pontos. Observe que essas condições de limite estão em pontos "discretos", nesse caso, os pontos de canto de 2n da célula, em que n é a dimensão do espaço de cor.

É útil formalizar o conceito de condições de limite antes de seguir em frente. Para qualquer subconjunto S do limite da célula delimitador (o cubo de unidade em n dimensões), uma condição de limite em S é uma especificação de uma função BC: S → Rm, em que m é a dimensão de saída. Em outras palavras, um interpolante, que pode ser indicado Interp: [0,1]n→ Rm, é necessário para satisfazer: Interp(x) = BC(x) para todos os x em S.

No cenário padrão de interpolação no cubo de unidade, S é o conjunto de pontos discretos que são os vértices de 2n do cubo.

Agora você pode generalizar as condições de limite para resolver os problemas descritos anteriormente e fornecer um novo algoritmo de interpolação dentro do cubo de unidade. Em vez de permitir apenas pontos de limite discretos, as condições de limite podem ser impostas em uma face de limite inteira do cubo. As suposições precisas são as seguintes:

(a) O ponto vn =(1,1,...,1) é especial e apenas uma condição de limite discreta é permitida. Em outras palavras, nenhuma condição de limite contínuo pode ser imposta às n faces de limite xi=1 (i=1,...,n).

(b) Para cada um dos n limites restantes enfrenta xi=0 (i=1,...,n), a condição de limite pode ser imposta em toda a face, com a condição de compatibilidade de que, se duas faces se cruzarem, as condições de limite nos rostos devem concordar com a interseção.

(c) Todos os vértices não contidos nos rostos com condição de limite terão uma condição de limite individual (discreta).

Você pode se referir a uma condição de limite discreta como dados finitos e a uma condição de limite contínuo como dados transfinitos na discussão da interpolação em dados finitos e transfinitos.

Primeiro, examine a interpolação tetraedral padrão (como a usada na patente de Sakamoto), que ajuda a definir as notações para essa formulação específica do problema. Sabe-se que o cubo de unidade [0,1]n pode ser subdividido em n! tetrahedra, parametrizada pelo conjunto de permutações em n símbolos. Mais especificamente, cada tetraedro é definido por desigualdades

Mostra a fórmula para as desigualdades dos tetraedros.

em que σ:{1,2,..,n}→{1,2,...,n} é uma permutação de "símbolos" 1, 2, ..., n, ou seja, é um mapeamento bijetivo do conjunto de n símbolos. Por exemplo, se n = 3 e σ = (3, 2, 1), o que significa σ(1)=3, σ(2)=2, σ(3)=1, então o tetraedro correspondente é definido por z≥y≥x, em que a notação comum x, y, z é usada para x1, x2, x3. Observe que esses tetraedros não são desconexos uns dos outros. Para fins de interpolação, pontos deitados em uma face comum de dois tetraedros distintos terão o mesmo valor de interpolação, independentemente de qual tetraedro é usado na interpolação. Ainda assim, no cenário padrão de interpolação em pontos finitos, para um determinado ponto de entrada (x1, ..., xn), primeiro determine em qual tetraedro ele está ou, equivalentemente, a permutação correspondente σ, em seguida, o interpolador tetraedral é definido como

Mostra a equação que define o interpolante tetraedral.

em que Mostra a equação para os vetores de base padrão. para i=1, ..., n e e1, ..., en são os vetores de base padrão. Antes de passar para a generalização, observe que v0, v1, ..., vn são os vértices do tetraedro e Mostra as coordenadas barycentric. São as "coordenadas barycentric".

Para o caso geral de BCs em rostos de limite, você pode usar o conceito de projeção barycentric. Como antes, para um determinado ponto de entrada (x1, ..., xn), primeiro determine em qual tetraedro ele está ou, equivalentemente, a permutação correspondente σ. Em seguida, execute uma série de projeções barycentricas, da seguinte maneira. A primeira projeção Mostra bproj subscrito 1 (x). envia o ponto para o plano Mostra x delta subscrito (1) igual a 0. A menos que Mostre X igual a V subscrito n. Nesse caso, ele não é alterado. A definição precisa do mapa BProj é definida da seguinte maneira:

Mostra a equação para a definição precisa do mapa BProj.

com Mostra a equação para P subscrito k. e k = 1, 2, ..., n.

No caso , Mostra que X é igual a V subscrito n. , você pode parar, porque BC é definido em vn por Assunção (a). No caso , Mostra que X não é igual a V subscrito n. , é claro que Mostra BProj subscrito 1 (X). tem o componente σ(1)th aniquilado. Em outras palavras, ele está em um dos rostos de limite. Ele está em um rosto no qual BC é definido, nesse caso, você pode parar ou executa outra projeção barycentric mostra BProj subscrito 2 (X'). em que Mostra X' igual a BProj subscrito 1 (X). E se Mostra X''= Bproj subscrito 1 (X'). está em um rosto no qual BC está definido, você pode parar; caso contrário, execute mais uma projeção Mostra o subscrito BProj 3 (X''). Como cada projeção aniquila um componente, a dimensão efetiva diminui, então você sabe que o processo deve parar. No pior cenário, você executa n projeções até a dimensão 0, ou seja, vértices no cubo, que de acordo com Assunção (c), você sabe que BC será definido.

Supondo que as projeções K tenham sido executadas, com

Mostra uma equação a ser usada supondo que a projeção K tenha sido executada.

x(0)= x, o ponto de entrada e BC são definidos em x(k). Em seguida, desenrola as projeções definindo uma série de vetores de saída:

Mostra equações para uma série de vetores de saída.

em que Mostra a equação de Y sobrescrito (K). e você finalmente obtém a resposta

Mostra Interp(x) igual a y sobrescrito (0).

Exemplo trabalhado

Diagrama que mostra um exemplo trabalhado de interpolação com um cubo de unidade.

Figura 2: Exemplo trabalhado

Considere a situação descrita na Figura 2, em que n = 3, m = 1 e você tem os seguintes BCs:

(a) Quatro BCs discretos nos vértices

(0, 0, 1): β001

(0, 1, 1): β011

(1, 0, 1): β101

(1, 1, 1): β111

(b) Um BC contínuo na face x3=0: F(x1, x2)

Computação nº 1: ponto de entrada x = (0,8, 0,5, 0,2). O tetraedro delimitado está associado à permutação <1, 2, 3>.

1ª projeção: mostra a equação da primeira projeção.

Isso já está na face x3=0, para que você possa parar. Substituição com versões anteriores, em seguida, dá

Mostra a resposta para a primeira projeção. que é a resposta.

Computação nº 2: ponto de entrada x = (0,2, 0,5, 0,8). O tetraedro delimitado está associado à permutação <3, 2, 1>.

1ª projeção: mostra a equação para a primeira projeção da computação 2.

2ª projeção: mostra a equação para a segunda projeção da computação 2.

3ª projeção: mostra a equação para a terceira projeção da computação 2. , que está na face x3=0. Substituição com versões anteriores, em seguida, dá

Mostra as duas primeiras equações para a substituição com versões anteriores.

Mostra a terceira equação para a substituição com versões anteriores, que é a resposta final.

Aplicativos

(a) Interpolação Tetraedral Sequencial

Diagrama que mostra a interpolação tetraedral sequencial.

Figura 3: Interpolação tetraedral sequencial

Consulte a Figura 3. Para interpolar entre dois planos nos quais grades incompatíveis foram impostas, considere uma célula que coloque um determinado ponto P mostrado na figura. Os vértices "superiores" da célula vêm diretamente da grade no plano superior. Os vértices na face inferior não são compatíveis com a grade no plano inferior, portanto, toda a face é tratada como tendo um BC com valores obtidos pela interpolação na grade no plano inferior. Em seguida, fica claro que essa configuração atende a Suposições (a), (b) e (c) acima, e você pode aplicar o algoritmo de interpolação.

Também está claro que o algoritmo reduziu a dimensão do problema de interpolação em 1, pois o resultado é uma combinação linear de valores nos vértices na grade superior e interpolação no plano inferior, que tem dimensão menor que 1. Se houver uma configuração de plano de sanduíche semelhante no plano inferior, você poderá aplicar o procedimento nesse plano, reduzindo ainda mais a dimensão em 1. Este procedimento pode continuar até que você alcance a dimensão 0. Essa cascata de projeções e interpolações pode ser chamada de "Interpolação Tetraedral Sequencial".

(b) Interpolação de lacuna

Diagrama que mostra a interpolação de lacunas.

Figura 4: Interpolação de lacunas

Esta é uma grade imposta a um cubo sentado estritamente dentro do quadrante positivo. O cubo em si tem uma grade e cada plano de coordenadas tem grades que não são necessariamente compatíveis. A "lacuna" entre o cubo e os planos de coordenadas tem uma seção cruzada que é "em forma de L" e não é passível de ser compatível com técnicas padrão. No entanto, com a técnica introduzida aqui, você pode facilmente introduzir células que cobrem essa lacuna. A Figura 4 ilustra um destes. As grades nos planos de coordenadas dão suporte à interpolação que fornece os BCs necessários para todas as faces inferiores da célula, com um vértice restante cujo BC é fornecido pelo canto inferior do cubo.

Nota final sobre a implementação

No aplicativo real, o "cubo de unidade" que é a configuração básica do algoritmo é extraído de reticências maiores e os valores nos vértices podem exigir um cálculo caro. Por outro lado, também está claro que a interpolação tetraedral requer apenas os valores nos vértices do tetraedro, que é um subconjunto de todos os vértices do cubo de unidade. Portanto, é mais eficiente implementar o que pode ser chamado de "avaliação adiada". Em uma implementação de software do algoritmo anterior, é comum ter uma sub-rotina que usa o cubo de unidade e os valores em seus vértices como entrada. A avaliação adiada significa que, em vez de passar os valores nos vértices, as informações necessárias para avaliar os valores dos vértices são passadas, sem realmente realizar a avaliação. Dentro da sub-rotina, a avaliação real desses valores será realizada somente para os vértices que pertencem ao tetraedro delimitador, depois que o tetraedro delimitador for determinado.

Tabela de pesquisa para uso com dispositivos de origem RGB virtuais de alto intervalo dinâmico

No caso de uma transformação ser construída com um dispositivo de origem modelado como um dispositivo RGB virtual, é possível que os valores colorantes de origem possam ser negativos ou maiores que o Unity (1.0). Quando isso ocorre, o dispositivo de origem é chamado de ter um HDR (alto intervalo dinâmico). Consideração especial é feita para este caso.

No caso de transformações de HDR, os valores mínimo e máximo para cada canal colorante podem ser determinados a partir do limite de gama do dispositivo. Usando esses valores, um dimensionamento simples para cada canal colorante é aplicado para que valores colorantes iguais ao colorante mínimo sejam convertidos em 0,0 e valores colorantes iguais ao colorante máximo sejam convertidos em 1,0, com um dimensionamento linear de valores entre para mapear linearmente entre 0,0 e 1,0.

ICCProfileFromWCSProfile

Como a main finalidade desse recurso é dar suporte a versões pré-Vista do Windows, você deve gerar perfis ICC versão 2.2 conforme definido no ICC Specification ICC.1:1998-09. Em determinados casos (consulte a tabela a seguir "Mapeamento de classe de perfil dispositivo de linha de base para ICC"), você pode criar uma matriz ou um perfil ICC baseado em TRC a partir de um perfil WCS. Em outros casos, o perfil ICC consiste em LUTs. O processo a seguir descreve como criar os LUTs AToB e BToA. É claro que os perfis ICC também têm outros campos. Alguns dos dados podem ser derivados do perfil do WCS. Para outros dados, você precisará desenvolver padrões inteligentes. Os direitos autorais serão atribuídos à Microsoft; uma vez que é a tecnologia da Microsoft que está sendo usada para criar os LUTs.

Esse design deve funcionar para todos os tipos de modelos de dispositivo, incluindo plug-ins. Desde que o plug-in tenha um modelo de dispositivo de linha de base associado, o tipo de dispositivo subjacente pode ser determinado.

A parte difícil de criar um perfil icc é criar as tabelas de pesquisa AToB e BToA. Essas tabelas mapeiam entre o espaço do dispositivo, por exemplo, RGB ou CMYK, e o Espaço de Conexão de Perfil (PCS), que é uma variante do CIELAB. Isso é fundamentalmente o mesmo que o processo de gerenciamento de cores usado na transformação CITE para mapear do espaço do dispositivo para o espaço do dispositivo. No entanto, você deve ter as informações a seguir para fazer a transformação.

  1. Condições de exibição de referência para o PCS.

  2. Referenciar a gama pcs.

  3. Modelo de dispositivo que converte entre valores de PCS e colorimetria.

O perfil do WCS e seu CAM associado são fornecidos como parâmetros. Há dois modelos de dispositivo de linha de base que são convertidos entre a colorimetria e a codificação do PCS. O motivo pelo qual você precisa de dois é explicado abaixo.

  1. Você pode obter as condições de exibição de referência para o PCS da especificação de formato de perfil DO ICC. As informações fornecidas na especificação de formato de perfil ICC são suficientes para calcular todos os dados necessários para inicializar o CAM usado pelo CMS. Para consistência e flexibilidade, essas informações são armazenadas em um perfil de cor do WCS.

  2. Você também pode usar um perfil do WCS para armazenar exemplos que definem a gama de referência do PCS. O CMS (sistema de gerenciamento de cores) CITE tem duas maneiras de criar limites de gama. Uma delas é amostrar o espaço completo do dispositivo e usar o modelo de dispositivo para criar valores de medida. O segundo método é usar exemplos medidos do perfil para criar um limite de gama de referência. Como a gama do ICC PCS é muito grande para fazer uma gama de referência útil, o primeiro método é inadequado. Mas o segundo método é uma abordagem flexível baseada em perfil. Para redefinir a gama de PCS de referência, você pode alterar os dados de medida no perfil do dispositivo PCS.

  3. O ICC PCS é uma modelagem de um dispositivo ideal. Ao criar um modelo do PCS como um dispositivo real, você pode aproveitar o processo de gerenciamento de cores usado no CMM Inteligente. Criar um modelo de dispositivo da colorimetria para a codificação pcs é simples. Você simplesmente mapeia entre os valores colorimétricos verdadeiros e os valores codificados por PCS. Como a interface CMS para modelos de dispositivo dá suporte apenas a valores XYZ, talvez você também precise mapear entre XYZ e LAB. Essa é uma transformação bem conhecida. Esse modelo é descrito no documento 2.2.02 "Modelos de Dispositivo de Linha de Base" nas seções 7.9 e 7.10.

Talvez seja necessário executar algum mapeamento de gama, se a gama do dispositivo for maior que a gama do PCS. Os GMMs de linha de base podem ser usados para essa finalidade. Observe que um perfil ICC criado corretamente tem tabelas de pesquisa para as intenções Colorimetric, Perceptual e Saturation relativas, embora todas elas possam apontar para o mesmo LUT internamente.

Diagrama que mostra a criação de um A T o B L U T.

Figura 5: Criação de um LUT AToB

Esse processo é ilustrado na Figura 5. Primeiro, o modelo de dispositivo é inicializado a partir dos dados no perfil de DM. Em seguida, construa um limite de gama do dispositivo da seguinte maneira. Uma amostragem de dados do modelo de dispositivo é executada por meio do modelo de dispositivo para obter dados colorimétricos. Os dados colorimétricos são executados por meio do CAM para criar dados de aparência. Os dados de aparência são usados para criar o limite de gama do dispositivo.

Em seguida, use dados do perfil de medição de PCS de referência para criar um limite de gama para o PCS.

Use os dois limites de gama criados para inicializar um GMM. Em seguida, use o modelo de dispositivo, o GMM e o modelo de dispositivo PCS para criar uma transformação. Execute uma amostragem do espaço do dispositivo por meio da transformação para criar um LUT AToB.

Diagrama que mostra a criação de um A T o B L U T usando uma amostragem de espaço P C S.

Figura 6: Criação de um LUT BToA

A Figura 6 ilustra a criação do LUT BToA. Isso é quase idêntico à criação de um LUT AToB, com as funções de origem e destino trocadas. Além disso, você deve amostrar a gama completa de PCS para criar o LUT.

Observe que, como o CAM (CIECAM02 no WCS) está envolvido no processo, a adaptação cromática entre o ponto branco da mídia e o ponto branco do PCS (exigido pelo ICC para ser o de D50) é efetuada de forma transparente pelo CAM.

Dispositivos RGB virtuais HDR

Deve-se considerar especialmente ao gerar perfis para dispositivos RGB virtuais HDR; ou seja, dispositivos para os quais os valores colorantes podem ser menores que 0,0 ou maiores que 1,0. Na geração do LUT atob, um conjunto maior de LUTs de entrada 1D é criado. Os valores colorantes são dimensionados e deslocados para o intervalo 0 . 1 usando os valores de colorante mínimo e máximo no perfil do WCS.

Como o espaço colorante para dispositivos HDR provavelmente não será completamente preenchido, o suporte especial também é fornecido no LUT 3D para a marca. Para lidar com cores na região pouco populada, os colorantes são recodificados para que a extrapolação além de 0,0 e 1,0 possa ser obtida. O intervalo usado é -1 .. +4.

Devido ao redimensionamento aplicado ao LUT 3D, um conjunto de LUTs de saída 1D é criado para mapear o resultado de volta para o intervalo 0 . 1.

Mais de um PCS

O ICC constatou que um PCS não era suficientemente flexível para atender a todos os usos pretendidos de um CMS. Na versão 4 da Especificação de Perfil, o ICC esclareceu que, na verdade, há duas codificações pcs. Um é usado para as intenções colorimétricas; outro é usado para a intenção perceptual. (Nenhum PCS é especificado para a intenção de Saturação. O ICC deixou esta parte ambígua.) O PCS colorimétrico tem uma leveza mínima e máxima especificada, mas os valores de chroma e matiz variam para aproximadamente ± 127. Este PCS parece um prisma retangular. Conforme mencionado anteriormente, o volume de PCS perceptivo se assemelha à gama de uma impressora inkjet.

Os dois PCSs ICC também têm duas codificações digitais diferentes. No PCS perceptivo, um valor igual a zero representa uma leveza de zero. No PCS colorimétrico, um valor igual a zero representa a leveza mínima do PCS, que é maior que zero. Você pode resolver esse problema tendo um modelo de dispositivo diferente para cada uma das codificações do PCS.

Mapeamento de gama

Para criar os LUTs AToB em um perfil ICC, você mapeia da gama do dispositivo para o espaço de PCS apropriado. Para criar os LUTs BToA, você mapeia do espaço pcs para a gama de dispositivos. O mapeamento para os LUTs AToB é bastante semelhante ao usado em um CMS baseado em medida. Para os PCS perceptivos, mapeie a gama plausível do dispositivo para o limite de gama de PCS perceptivo, usando recorte ou compactação para qualquer cor fora de gama. Para as intenções colorimétricas, talvez seja necessário recortar a leveza, mas os valores de chroma e matiz caberão na gama colorimétrica de PCS.

O mapeamento para os LUTs do BToA é um pouco diferente. As intenções colorimétricas ainda são fáceis; basta recortar valores de PCS para a gama de dispositivos. Mas o ICC exige que todos os valores de PCS possíveis sejam mapeados para algum valor de dispositivo, não apenas aqueles dentro da gama de referência do PCS perceptivo. Portanto, você deve garantir que os GMMs possam lidar com as cores de origem que estão fora da gama de referência. Isso pode ser tratado cortando essas cores para o limite de gama do dispositivo.

Mapeamento de classe de perfil de dispositivo de linha de base para ICC

Tipo de dispositivo de linha de base Classe de perfil ICC Comentário
Dispositivo de captura RGB Dispositivo de entrada ("scnr") PCS é CIELAB. AToB0Tag é Dispositivo para PCS com intenção colorimétrica relativa.
CRT, monitor LCD Exibir Dispositivo ("mntr") PCS é CIEXYZ. Consulte o seguinte para conversão de modelo.
Projetor RGB Espaço de Cor ("spac") PCS é CIELAB.
Impressora RGB e CMYK Dispositivo de saída ("prtr") PCS é CIELAB.
Dispositivo Virtual RGB (caso não HDR) Exibir Dispositivo ("mntr") PCS é CIEXYZ.
Dispositivo Virtual RGB (caso HDR) Espaço de Cor ("spac") PCS é CIELAB.

 

A conversão de perfis de monitor não envolve a criação de LUTs, mas consiste na criação de uma matriz ou modelo TRC. O modelo usado no ICC é ligeiramente diferente daquele usado na modelagem WCS CRT ou LCD em que o termo "correção preta" está ausente. Especificamente:

Modelo do WCS: mostra um modelo W C S.

Modelo ICC: mostra um modelo I C C.

A conversão do modelo do WCS para o modelo ICC é feita da seguinte maneira.

Definir novas curvas:

Mostra uma matriz para definir novas curvas.

Não são curvas de reprodução de tom porque não mapeiam de 1 a 1. Uma normalização conseguirá isso. As definições finais do modelo ICC são:

Mostra as definições finais do modelo I C C.

Mostra a matriz final para o modelo I C C.

Para dispositivos virtuais RGB não HDR, você também está gerando um perfil ICC de exibição para eficiência de espaço. Nesse caso, a matriz tristimulus M ICC pode ser obtida diretamente das primárias do perfil do WCS sem a conversão de modelo acima. Uma última, mas importante, observe que essa matriz tristimulus deve ser adaptada cronmaticamente ao D50 para estar em conformidade com a especificação ICC do PCS. Em outras palavras, as entradas em cada linha da matriz a ser codificada no perfil ICC devem somar, respectivamente, 96,42, 100 e 82,49. Na implementação atual, a adaptação cromática é feita pelo CAT02, que também é a transformação de adaptação cromática usada no CAM02.

Preservação negra e geração negra

A implementação da preservação negra está vinculada à geração do canal preto em dispositivos que dão suporte a um canal preto. Para fazer isso, informações sobre cada cor de origem são coletadas para permitir que modelos de dispositivo que dão suporte a um canal preto determinem a melhor maneira de definir o canal preto na saída. Embora a preservação preta seja pertinente para transformações de cores que se convertem entre um dispositivo de canal preto em outro, a geração preta é implementada para todas as transformações que envolvem um dispositivo de destino de canal preto.

As informações do canal negro são registradas em uma estrutura de dados chamada BlackInformation. A estrutura BlackInformation contém um booliano que indica se a cor contém apenas colorante preto e um valor numérico indicando o grau de "negritude" chamado peso preto. Para dispositivos de origem que dão suporte a um canal preto, o peso preto é a porcentagem de colorante preto na cor de origem. Para dispositivos de origem que não contêm um canal preto, o peso preto é calculado usando os outros colorantes e o valor de aparência. Um valor chamado "pureza de cor" é calculado usando a diferença entre o valor de colorante máximo e o valor de colorante mínimo dividido pelo valor de colorante máximo. Um valor chamado "leveza relativa" é calculado usando a diferença entre a leveza da cor e a leveza mínima para o dispositivo de destino dividido pela diferença entre a leveza mínima e máxima para o dispositivo de destino. Se o dispositivo de origem for um dispositivo aditivo (monitor ou projetor), o peso preto será determinado como 1,0 menos a pureza da cor multiplicada pela leveza relativa. Por exemplo, se o dispositivo de origem for um monitor RGB, o valor máximo e o valor mínimo de R, G e B para cada cor serão calculados e o peso preto será determinado pela fórmula:

BW = (1,0 – (max(R,G,B) – min(R,G,B)) / max(R, G, B)) * leveza relativa

Se o dispositivo de origem der suporte à coloração subtrativa, por exemplo, uma impressora CMY, os colorantes individuais deverão ser "complementados" (subtraídos de 1,0) antes do uso na fórmula anterior. Portanto, para uma impressora CMY, R = 1,0 – C, G = 1,0 – M e B = 1,0 – Y.

As informações pretas para cada cor processada pela transformação de cores são determinadas durante o processo de tradução de cores. As informações somente em preto só serão determinadas se a preservação negra for especificada. A espessura preta é sempre determinada se o modelo de dispositivo de destino dá suporte a um colorante preto. As informações pretas são passadas para o modelo de dispositivo de destino por meio do método ColorimetricToDeviceColorsWithBlack , que usa o LUT resultante.

Observe que, devido à otimização da transformação de cores, o processo acima ocorre somente durante a criação do LUT de transformação otimizado, não durante a execução do método TranslateColors.

Otimização para transformações com mais de três canais de origem

O tamanho da transformação otimizada é determinado por vários fatores: o número de canais de cores no dispositivo de origem, o número de etapas na tabela para cada canal de cor de origem e o número de canais de cores no dispositivo de saída. A fórmula para determinar o tamanho da tabela de transformação é:

Tamanho = Número de etapas por fonte de canal \ dispositivo(Número\ de\ canais\ in\ origem\ dispositivo) x número de canais no dispositivo de saída

Como você pode ver, o tamanho da tabela aumenta exponencialmente dependendo do número de canais no dispositivo de origem. Muitos dispositivos de origem dão suporte a três canais de cores, por exemplo, Vermelho, Verde e Azul. No entanto, se um dispositivo de origem der suporte a quatro canais, como CMYK, o tamanho da tabela e o tempo necessário para construir a tabela aumentarão em um fator do número de etapas. Em um CMS baseado em medidas em que as transformações são construídas "em tempo real", desta vez pode muito bem ser inaceitável.

Para reduzir o tempo necessário para construir a tabela de conversão de cores, é possível aproveitar dois fatos. Primeiro, embora o dispositivo de origem possa dar suporte a mais de três canais de cores, o espaço de cor independente do dispositivo intermediário (CIECAM02 Ja C b C ) tem apenas três canais de cores. Em segundo lugar, a parte mais demorada do processamento não é a modelagem do dispositivo (convertendo de coordenadas de cor do dispositivo em valores tristimulus), mas o mapeamento de gama. Usando esses fatos, você pode construir uma tabela preliminar de conversão de cores que converte cores no espaço de cores independente do dispositivo por meio das etapas de mapeamento de gama e, por fim, por meio do modelo de cor do dispositivo de saída. A construção desta tabela é da dimensão três. Em seguida, construímos a tabela de conversão de cores final da dimensão quatro convertendo as combinações de cor de origem em espaço intermediário independente do dispositivo e, em seguida, usando a tabela preliminar de conversão de cores, concluir a conversão para o espaço de cor do dispositivo de saída. Portanto, você reduz da computação (número de etapas na tabela de pesquisa) número\ de\ canais de cálculos de mapeamento de gama para o número de etapas na tabela intermediária ₃ cálculos de mapeamento de gama. Embora você precise executar o número de etapas no número (tabela de pesquisa) \ de\ canais computações de modelagem de dispositivo e pesquisas de tabela tridimensional, isso ainda é muito mais rápido do que o cálculo original.

O processo anterior funcionará bem desde que não haja necessidade de passar informações entre o modelo de dispositivo de origem e qualquer outro componente na transformação de cores. No entanto, se o dispositivo de saída e o dispositivo de origem derem suporte a um colorante preto e o colorante preto de origem for usado para determinar o colorante preto de saída, o processo não comunicará corretamente as informações pretas de origem. Um processo alternativo é construir uma tabela de conversão de cores preliminar que converte cores no espaço de cores independente do dispositivo apenas por meio das etapas de mapeamento de gama. Em seguida, construa a tabela de conversão de cores final da dimensão quatro usando as seguintes etapas: a) converta as combinações de cores de origem em espaço intermediário independente do dispositivo, b) execute as etapas de mapeamento de gama interpolando na tabela de cores preliminares em vez de aplicar os processos reais de mapeamento de gama e c) use os valores resultantes das etapas de mapeamento de gama e quaisquer informações de canal preto de origem para calcular os colorantes do dispositivo de saída usando o modelo de dispositivo de saída. Esse processo também pode ser usado quando há informações transferidas entre os modelos de dispositivo de origem e saída, mesmo que não haja canal preto; por exemplo, se os dois módulos forem implementados com uma arquitetura de plug-in que permita o intercâmbio de dados entre módulos.

Os dois processos anteriores podem ser usados para melhorar efetivamente o tempo necessário para construir a tabela de transformação de cores tridimensional.

CheckGamut

O ICM chama CreateTransform e CreateMultiProfileTransform para obter uma palavra de valores de sinalizador, um dos quais é ENABLE_GAMUT_CHECKING. Quando esse sinalizador é definido, CITE deve criar a transformação de forma diferente. As etapas iniciais são as mesmas: os CAMs de origem e destino devem ser inicializados e, em seguida, os descritores de limite de gama de origem e destino devem ser inicializados. Independentemente da intenção especificada, o GMM CheckGamut deve ser usado. O GMM CheckGamut deve ser inicializado usando os modelos de dispositivo de origem e destino e descritores de limite de gama. No entanto, a transformação deve criar uma transformação truncada que inclua o modelo de dispositivo de origem, o CAM de origem, quaisquer GMMs intermediários e o GMM CheckGamut. Isso garante que os valores delta J, delta C e delta h gerados pelo CMM CheckGamut se tornem os valores finais resultantes.

O significado de CheckGamut fica claro quando há apenas dois perfis de dispositivo na transformação. Quando há mais de dois perfis de dispositivo e mais de dois GMMs, CheckGamut relata se as cores que foram transformadas por meio do primeiro modelo de dispositivo e todos, exceto o último GMM, estão dentro da gama do dispositivo de destino.

Conceitos básicos de gerenciamento de cores

Algoritmos e esquemas do sistema de cores do Windows