Algoritmos de creación de transformaciones de WCS

Creación de transformaciones

 

Ejecución de transformación secuencial

 

Creación de transformaciones optimizadas

 

ICCProfileFromWCSProfile

 

Conservación negra y generación negra

 

Comprobación de gamut

Creación de transformaciones

Para explicar correctamente cómo funcionan las transformaciones de color, es útil explicar la ruta de procesamiento completa a través de ICM 2.0 y los internos del CTE. La función CreateColorTransformW de ICM 2.0 crea una transformación de color que las aplicaciones pueden usar para realizar la administración de colores. Esta función crea un contexto de color a partir de las entradas LOGCOLORSPACE y intent. Las intenciones se asignan al algoritmo de asignación de gamuts ICC de línea base correlacionados. A continuación, la función llama a la función CreateMultiProfileTransform de ICM 2.0 para un procesamiento de color coherente. La función CreateColorTransform normalmente copia los datos en la estructura de transformación optimizada interna.

La función CreateMultiProfileTransform de ICM 2.0 acepta una matriz de perfiles y una matriz de intenciones o un perfil de vínculo de dispositivo único y crea una transformación de color que las aplicaciones pueden usar para realizar la asignación de colores. Procesa esos perfiles de entrada e intenciones para crear modelos de dispositivo, modelos de apariencia de color, descripciones de límites de gama y modelos de asignación de gama. Aquí se muestra cómo se hace esto:

  • Los modelos de dispositivo se inicializan directamente desde perfiles dm. Hay un modelo de dispositivo creado para cada perfil de la llamada a CreateMultiProfileTransform.
  • Los modelos de apariencia de color se inicializan directamente desde perfiles CAM. Hay un perfil CAM para cada perfil en la llamada a CreateMultiProfileTransform. Sin embargo, se puede especificar el mismo perfil cam para más de un perfil.
  • Las descripciones de límites de gamut se inicializan a partir de un objeto de modelo de dispositivo y un objeto CAM. Hay una descripción de límite de gama para cada perfil de la llamada a CreateMultiProfileTransform.
  • Los modelos de asignación de gamut se inicializan a partir de dos límites de gama y una intención. Debe crear un modelo de asignación de gama entre cada par de modelos de dispositivo creados a partir de la llamada a CreateMultiProfileTransform. Tenga en cuenta que esto significa que se usa un modelo de mapa de gama inferior al modelo de dispositivo. Dado que el número de intenciones coincide con el número de modelos de dispositivo, también hay una intención más de la necesaria. Se omite la primera intención de la lista. Puede ver la lista de intenciones y modelos de dispositivo, creando modelos de asignación de gama. Elija los modelos de primer y segundo dispositivo y la segunda intención y, a continuación, inicialice el primer modelo de asignación de gama. Elija los modelos de dispositivo segundo y tercero y la tercera intención y, a continuación, inicialice el segundo modelo de asignación de gama. Continúe de esta manera hasta que haya creado todos los modelos de asignación de gama.

Cuando los perfiles se han procesado correctamente y se han creado e inicializado todos los objetos intermedios, puede crear la transformación CITA con la siguiente llamada. Los pDestCAM y pDestDM son los asociados al último perfil de la llamada a CreateMultiProfileTransform.

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

Compatibilidad con complementos

Un problema relacionado con la configuración de la lista de transformaciones es validar si hay disponible un complemento necesario. El siguiente modificador de modelo proporciona esta directiva para controlar este comportamiento. La administración de esta lista de transformaciones es un método en la estructura de transformación optimizada interna, pero cada método de modelo proporciona el puntero a sí mismo y a su propio conjunto de valores de parámetro.

El modo debe ser uno de los siguientes.

  • TfmRobust: si un perfil de medida especifica un complemento preferido y el complemento no está disponible, el nuevo sistema CTE usará el complemento de línea base. Si ninguno de los complementos está disponible, la transformación notificará un error.
  • TfmStrict: si ColorContext especifica un complemento preferido, el complemento debe estar disponible. Si no se encuentra ningún complemento preferido, se usará el complemento de línea base. Si ninguno de los complementos está disponible, la transformación notificará un error.
  • TfmBaseline: solo se pueden usar complementos de línea base en AddMeasurementStep. Si ColorContext especifica un complemento preferido, se omitirá el complemento. Si el complemento de línea base no está disponible, la transformación notificará un error.

Transformación de la ejecución

La función TranslateColors de la API ICM 2.0 traduce una matriz de colores del espacio de colores de origen al espacio de colores de destino tal y como se define en una transformación de color. Esta función comprueba internamente en una matriz de colores almacenados en caché para permitir la coincidencia inmediata de colores comúnmente transformados. Esta transformación admite matrices de bytes de 8 bits por canal y matrices float de 32 bits por canal. Todos los demás formatos se convertirán antes de pasar al nuevo CTE.

La función TranslateBitmapBits de la API ICM 2.0 traduce los colores de un mapa de bits que tiene un formato definido para generar otro mapa de bits en un formato solicitado. Esta función comprueba internamente en una matriz de colores almacenados en caché para permitir la coincidencia inmediata de colores comúnmente transformados. Para evitar demasiadas rutas de acceso de código, compatibilidad y complejidad de pruebas, solo se admite un número limitado de formatos de mapa de bits en el motor de transformación e interpolación. Esta función debe traducir los formatos de mapa de bits entrantes y salientes no nativos a formatos admitidos de forma nativa para su procesamiento. Esta transformación solo admite mapas de bits de bytes de 8 bits por canal y mapas de bits flotantes de 32 bits por canal. Todos los demás formatos se convertirán antes de pasar al nuevo CTE.

 

Ejecución de transformación secuencial

Si el parámetro dwFlags tiene el SEQUENTIAL_TRANSFORM bit establecido cuando se llama a las funciones createColorTransformW o CreateMultiProfileTransform de ICM, los pasos de transformación se ejecutan secuencialmente. Esto significa que el código recorre cada modelo de dispositivo, modelo de apariencia de color y modelo de asignación de gama por separado, según lo especificado por la llamada CreateColorTransform o CreateMultiProfileTransform . Esto puede resultar útil para depurar módulos de complemento, pero es mucho más lento que ejecutarse a través de una transformación optimizada. Por lo tanto, no se recomienda ejecutar en modo secuencial para el software de producción. Además, puede haber pequeñas diferencias en los resultados obtenidos en modo secuencial y en modo optimizado. Esto se debe a variaciones introducidas cuando las funciones se concatenan juntas.

Creación de transformaciones optimizadas

Una transformación optimizada es una tabla de búsqueda multidimensional. La tabla se puede procesar mediante un motor de interpolación multidimensional, como la interpolación tetraédrica, que aplica los colores de entrada a la transformación. En la sección siguiente se describe cómo se crean las tablas de búsqueda optimizadas. En la sección posterior se describe cómo interpolar dentro de las tablas de búsqueda optimizadas.

Tablas de búsqueda dispersas

Las impresoras convencionales tienen tintas CMYK. Para ampliar la gama, un enfoque consiste en agregar nuevas tintas al sistema. Normalmente, las tintas agregadas son colores que las tintas CMYK tienen dificultades para reproducirse. Las opciones comunes son naranja, verde, rojo, azul, etc. Para aumentar la "resolución aparente", se pueden usar tintas con diferentes tints, por ejemplo, cian claro, magenta claro, etc. En efecto, el dispositivo de impresora tiene más de cuatro canales.

Aunque las impresoras son dispositivos de salida, también realizan la conversión de color del espacio del dispositivo a otro espacio de colores. En el caso de una impresora CMYK, esta sería una transformación de CMYK a XYZ, o el "modelo hacia delante" de la impresora. Al combinar el modelo hacia delante con otras transformaciones, es posible emular una impresión CMYK en otro dispositivo. Por ejemplo, una impresora CMYK en un monitor RGB haría posible un mecanismo de corrección que emula una impresión de esa impresora CMYK en un monitor. Del mismo modo, también se aplica a las impresoras hi-fi. Una conversión CMYKOG a RGB permite la corrección de la impresora CMYKOG en un monitor.

El enfoque convencional para implementar esta conversión de color es mediante un LUT uniforme. Por ejemplo, en un perfil ICC para una impresora CMYKOG, la especificación ICC exige una etiqueta A2B1 que almacena una LUT uniforme que representa un muestreo uniforme en el espacio del dispositivo CMYKOG del modelo de reenvío, que va de CMYKOG al espacio de conexión del perfil ICC (ya sea CIELAB o CIEXYZ). El perfil de vínculo de dispositivo ICC permite una transformación directa del espacio del dispositivo CMYKOG a cualquier espacio de color, incluido un espacio de dispositivo, también en forma de LUT muestreada uniformemente en el espacio CMYKOG. El muestreo nunca se realiza con 256 niveles (profundidad de bits 8) debido al enorme LUT resultante, excepto en el caso de dispositivos monocromáticos (1 canal). En su lugar, se utiliza el muestreo con profundidad de bits inferior; algunas opciones típicas son 9 (profundidad de bits 3), 17 (profundidad de bits 4), 33 (profundidad de bits 5). Con el número de niveles inferiores a 256 en cada canal, la LUT se usa junto con un algoritmo de interpolación para generar el resultado si un nivel está entre dos niveles muestreados.

Aunque un LUT uniforme es conceptualmente sencillo de implementar y la interpolación en una LUT uniforme es generalmente eficaz, el tamaño LUT aumenta exponencialmente con la dimensión de entrada. De hecho, si d es el número de pasos usados en la LUT uniforme, y n es el número de canales en el espacio de colores de origen, el número de nodos de la LUT es Muestra la variable para el número de nodos de un LUT. Claramente, el número de nodos requiere rápidamente tanto almacenamiento en memoria que incluso los sistemas informáticos de la parte superior de la línea tienen dificultades para controlar la demanda. En el caso de los dispositivos con seis o ocho canales, una implementación ICC del perfil de dispositivo requiere el uso de pocos pasos en la LUT, a veces hasta cinco pasos en la tabla A2B1 para mantener el perfil dentro de megabytes en lugar de gigabytes. Claramente, el uso de un número menor de pasos aumenta el error de interpolación, ya que ahora hay menos muestras. Dado que la LUT debe ser uniforme, la precisión en todo el espacio de colores se degrada incluso en esas regiones del espacio donde una diferencia de color significativa puede deberse a pequeños cambios en el valor del dispositivo.

En los dispositivos con más de cuatro colores, algunos subespacios de todo el espacio del dispositivo son más importantes que otros. Por ejemplo, en el espacio CMYKOG, las tintas cian y verde rara vez se usan juntas porque sus tonos se superponen entre sí. De forma similar, las tintas amarillas y naranjas se superponen en gran medida entre sí. Una reducción uniforme del número de pasos se puede considerar como una degradación general de la calidad en todo el espacio de colores, que es algo que se puede permitir para las combinaciones improbables de tinta, pero no para las combinaciones probables o importantes.

Aunque un LUT muestreado uniformemente es sencillo y eficaz para la interpolación, impone enormes requisitos de memoria a medida que aumenta la dimensión. En realidad, mientras que un dispositivo puede tener seis o ocho canales, rara vez se usan simultáneamente. En la mayoría de los casos, el color de entrada para la transformación de color tiene solo unos cuantos colores "activos", por lo que reside en un espacio de colores dimensional inferior. Esto también significa que la interpolación se puede realizar de forma más eficaz en ese espacio dimensional inferior, ya que la interpolación es más rápida cuando la dimensión es inferior.

Por lo tanto, el enfoque consiste en estratificar todo el espacio del dispositivo en subespacios de varias dimensiones. Y dado que las dimensiones más bajas (que combinan tres o cuatro colores) son más importantes, al ratificar el espacio, también se pueden aplicar diferentes frecuencias de muestreo; es decir, un número diferente de pasos, a las piezas; aumentar las tasas de muestreo para las dimensiones más bajas, lo que las reduce para dimensiones más altas.

Para corregir notaciones, n es el número de canales en el espacio de colores de origen de la transformación de color que desea muestrear. También puede hacer referencia a n como la dimensión de entrada y Muestra n mayor o igual que 5. , a menos que se especifique lo contrario.

Los bloques de creación básicos son LUT de varias dimensiones y tamaños de entrada, en lugar de una LUT uniforme con dimensión de entrada n. Para ser más precisos, unLUT es una red rectangular impuesta en un cubo unitario; es decir, todas las coordenadas del dispositivo se normalizan en el intervalo [0, 1]). si es la dimensión de entrada de la lut (tenga en cuenta que no tiene que ser igual a n, aunque muestra V menor o igual que n). Entonces consta de cuadrículas de muestreo unidimensional:

Samp i: muestra una cuadrícula de muestreo unidimensional.

donde todos los xjs deben estar en el intervalo [0, 1], Muestra un superíndice d(i). es el número de pasos para el muestreo del canal i que debe ser al menos 1 y Muestra un spuperscript de X (subíndice) d(i). Por otro lado, muestra un superíndice X (subíndice 1). No es necesario que sea 0.

Solo se definirán los dos casos especiales siguientes de LUT.

LUT cerrada: se trata de una LUT con el requisito adicional de que para cada Samp*i*, Muestra un superíndice X (subíndice 1) es igual a 0. y Muestra un superíndice d(i) mayor o igual que 2. . Una LUT cerrada uniforme es una LUT cerrada que tiene el mismo LUT Muestra un superíndice d(i). para cada canal, y los nodos se espacian uniformemente entre 0 y 1.

Open LUT: se trata de una LUT con el requisito adicional de que para cada Samp i, SHows a superíndice X (subíndice 1) mayor que 0. . Es correcto que muestre un superíndice d(i) igual a 1. .

El objetivo es estratificar el cubo unitario [0, 1] n en una colección de LUT cerradas y LUT abiertas, de modo que toda la colección cubra el cubo de unidad. Conceptualmente es más sencillo organizar estos "estratos LUT" por sus dimensiones, de modo que en el nivel superior:

Muestra el nivel superior para organizar los estratos L U T por sus dimensiones.

donde Muestra subíndice sigma k. es la "colección k -dimensional strata". Tenga en cuenta que la dimensión strata comienza de 3 en lugar de 0; es decir, puntos, porque la interpolación de combinaciones de tres colores se puede controlar sin demasiado requisito de memoria.

Descripción de los estratos LUT

En esta implementación:

  1. Muestra el subíndice sigma 3. consta de LUT cerradas con tres entradas, una de cada combinación posible de tres colores elegidas fuera de los n colores.

  2. Muestra el subíndice sigma 4. consta de un LUT cerrado para la combinación CMYK (o los cuatro primeros colorantes), junto con Shows (n más de 4) menos 1. LUT abiertas para las demás combinaciones de cuatro colores. Al descartar la combinación de CMYK, se reconoce que es una combinación importante.

  3. Para Muestra k igual a 5, ..., n. , Muestra subíndice sigma k. consta de Shows (n over k). LUT abiertos, uno para cada combinación posible de elegir k colorants del total de n colorants.

Permanece para especificar los tamaños de las LUT. La diferencia clave entre las LUT abiertas y cerradas es que las LUT abiertas no se superponen y las LUT cerradas pueden superponerse en las caras de límite. El hecho de que el muestreo unidimensional en una LUT abierta no contenga 0, básicamente significa que falta la mitad de las caras de límite abiertas, por lo que el nombre "abierto". Si dos LUT no se superponen, puede usar un número diferente de pasos o ubicaciones de nodo en cada canal. Lo mismo no es cierto si dos LUT se superponen. En ese caso, si el número de pasos o las ubicaciones de nodo son diferentes, un punto que se encuentra en la intersección de los dos LUT recibirá un valor de interpolación diferente en función de qué LUT se use en la interpolación. Una solución sencilla a este problema es usar el muestreo uniforme con el mismo número de pasos cada vez que se superponen dos LUT. En otras palabras:

Todas las LUT cerradas (las LUT de tres colores y la CMYK LUT en esta implementación) deben ser uniformes y tienen el mismo número de pasos, que se indican d.

Los dos algoritmos siguientes se pueden usar para determinar el número de pasos d para las LUT cerradas y el número de pasos para las LUT abiertas.

Algoritmo n.º 1

Este algoritmo no requiere entrada externa.

Todas las LU cerradas serán uniformes con el número d de pasos.

Todas las LU abiertas de la dimensión k tendrán el mismo número de pasos Muestra d(k). en cada canal de entrada y los nodos están igualmente espaciados; es decir, para cada muestra i igual a 1, 2, ..., k. .

Samp i: muestra el algoritmo samp i.

Por último, especifique d y d (k ) en la tabla 1 siguiente. Los tres modos, "prueba", "normal" y "mejor" son la configuración de calidad ICM 2.0. En esta implementación, el modo de prueba tiene la superficie de memoria más pequeña y el mejor modo tiene la mayor superficie de memoria.

Para implementar este algoritmo, debe llamar al siguiente algoritmo #2. Los usuarios pueden especificar sus propias ubicaciones de muestreo mediante las tablas como guía.

Algoritmo n.º 2

Este algoritmo requiere una entrada externa en forma de una lista de ubicaciones de muestreo "importantes", pero es más adaptable y puede ahorrar espacio de memoria potencialmente.

La entrada necesaria es una matriz de valores de dispositivo proporcionados por el usuario. Estos valores de dispositivo indican qué región del espacio de colores del dispositivo es importante; es decir, qué región se debe muestrear más.

Todas las LUT cerradas serán uniformes con el número d de pasos, tal y como se describe en Algoritmo n.º 1. Los valores de d se proporcionan en la tabla 1.

(a) Uniforme cerrado LUT

Modo de prueba Modo Normal Mejor modo
D 9 17 33

 

(b) Abrir LUT

Dimensión de entrada Modo de prueba Modo Normal Mejor modo
4 5 7 9
5 2 3 3
6 2 3 3
7 2 2 2
8 o más 2 2 2

 

Tabla 1: Tamaños de LUT usados en el algoritmo

Cada LUT abierta puede tener un número diferente de pasos en cada canal de entrada y las ubicaciones de muestreo no tienen que estar espaciadas igualmente. Para un estrato LUT abierto determinado, hay una combinación de colorante asociada, por ejemplo, Muestra el subíndice C 1, ..., C subíndice k. , donde el subíndice C muestra i. s son enteros distintos entre 1 y n. Son los índices de canal correspondientes a los colores "activos" de esta estrato.

PASO 1: Filtre la matriz de valores de dispositivo de entrada que no se encuentran en este estrato. Un valor de dispositivo Muestra X subíndice 1, X subíndice 2, ..., X subíndice n. está contenido en la estrata, si y solo si muestra un conjunto de valores para un canal. y todos los demás canales son 0. Si el conjunto filtrado tiene N entradas, deje

Muestra una ecuación que se va a usar si el conjunto filtrado tiene N entradas.

Para cada muestra i igual a 1, 2, ..., k. , itera los pasos siguientes 2-5:

PASO 2: Si muestra d subíndice provisional (k) igual a 1. , Samp i solo tiene 1 punto, que debe ser 1.0. Pase a la siguiente i. De lo contrario, continúe con el PASO 3.

PASO 3: Ordene las muestras filtradas en orden ascendente en el canal I del subíndice C.

PASO 4: Definir la cuadrícula de muestreo "provisional" mediante los nodos

Muestra los nodos usados para definir la cuadrícula de muestreo

donde muestra j igual a 1, 2, ..., d subíndice provisional (k).

PASO 5: Regularice la cuadrícula provisional para asegurarse de que se ajusta a la monotonicidad estricta y también que termina con 1.0. Dado que la matriz ya está ordenada, los nodos de la cuadrícula provisional ya están monotonic nondecreasing. Sin embargo, los nodos adyacentes pueden ser idénticos. Puede corregirlo quitando nodos idénticos, si es necesario. Por último, después de este procedimiento, si el punto final es menor que 1.0, reemplácelo por 1.0.

Tenga en cuenta que el PASO 5 es la razón por la que los estratos LUT pueden tener un número diferente de pasos en cada canal. Después de la regularización, el número de pasos de un canal puede ser menor que Muestra d subíndice provisional (k).

Interpolación

Puede construir la estratificación del cubo de unidad mediante estratos LUT abiertos y estratos LUT cerrados. Para realizar la interpolación mediante esta "estructura LUT dispersa", siga estos pasos. Supongamos que se muestra un valor de dispositivo de entrada determinado (X subíndice 1, X subíndice 2, ..., X subíndice n).

PASO 1: Determinar el número de canales "activos". Este es el número de canales distintos de cero. Esto determina la dimensión de estrato k para buscar el estrato contenedor. Más precisamente, la dimensión de estratos es 3 si el número de canales activos es Muestra menor o igual que 3. En caso contrario, la dimensión strata es igual que el número de canales activos.

PASO 2: En Muestra el subíndice sigma k. , busque el estrato contenedor. Un valor de dispositivo se incluye en un estrato abierto si todos los canales correspondientes al estrato tienen un valor distinto de cero y todos los demás canales son cero. Un valor de dispositivo se encuentra en un estrato cerrado si cada canal no representado por el estrato es cero. Si no se encuentra ningún estrato contenedor, hay una condición de error. Cancelación e informe de un error. Si se encuentra un estrato contenedor, continúe con el paso siguiente.

PASO 3: Si se cierra el estrato contenedor, cualquier algoritmo de interpolación conocido puede realizar la interpolación dentro del estrato. En esta implementación, la elección del algoritmo es la interpolación tetrahedral. Si el estrato contenedor está abierto y el valor del dispositivo está estrictamente dentro del estrato, es decir,

Muestra X subíndice i mayor o igual que... primer nodo en el canal i

donde i es un índice de canal para el estrato y, a continuación, funciona el algoritmo de interpolación estándar, como la interpolación tetrahedral.

Si muestra X subíndice i menor que... primer nodo en el canal i para algún i, el valor del dispositivo entra en la "brecha" entre el estrato y los subespacios dimensionales inferiores. Este MOI no se ocupa de un algoritmo de interpolación por se, por lo que cualquier algoritmo de interpolación se puede usar para interpolar dentro de esta "brecha", aunque el algoritmo preferido es la siguiente interpolación transfinida.

La arquitectura del módulo de interpolación se ilustra en las dos partes de la figura 1.

Diagrama que muestra la parte uno de la arquitectura del módulo de interpolación.

Diagrama que muestra la parte dos de la arquitectura del módulo de interpolación.

Figura 1: Arquitectura del módulo de intepolation

Como se explicó anteriormente, este algoritmo puede lograr un muestreo razonablemente denso en las regiones del espacio del dispositivo que contienen una combinación importante de colorantes, a la vez que minimiza el tamaño total de las LUT necesarias. En la tabla siguiente se muestra una comparación del número de nodos necesarios para la implementación dispersa de LUT (mediante el algoritmo #1 y el modo normal) y la implementación uniforme de LUT correspondiente.

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

 

Interpolación dentro de un cubo de unidad

Un paso básico en el caso de la cuadrícula rectangular es la interpolación dentro de una celda envolvente. Para un punto de entrada, puede determinar fácilmente la celda envolvente. En una cuadrícula rectangular, se especifica el valor de salida en cada uno de los vértices (puntos de esquina) de la celda envolvente. También son las únicas condiciones de límite (NIC) que debe cumplir un interpolante: el interpolante debe pasar por todos estos puntos. Tenga en cuenta que estas condiciones de límite están en puntos "discretos", en este caso los 2n puntos de esquina de la celda, donde n es la dimensión del espacio de colores.

Es útil formalizar el concepto de condiciones de límite antes de continuar. Para cualquier subconjunto S del límite de la celda envolvente (el cubo de unidad en n dimensiones), una condición de límite en S es una especificación de una función BC: S → Rm, donde m es la dimensión de salida. Es decir, se requiere un interpolante, que puede indicarse Interp: [0,1]n→ Rm, para satisfacer: Interp(x) = BC(x) para todas las x en S.

En el escenario estándar de interpolación en el cubo de unidad, S es el conjunto de puntos discretos que son los 2n vértices del cubo.

Ahora puede generalizar las condiciones de límite para resolver los problemas descritos anteriormente y proporcionar un nuevo algoritmo de interpolación dentro del cubo de unidad. En lugar de permitir solo puntos de límite discretos, las condiciones de límite se pueden imponer en una cara de límite completa del cubo. Las suposiciones precisas son las siguientes:

(a) El punto vn =(1,1,...,1) es especial y solo se permite una condición de límite discreta. En otras palabras, no se puede imponer ninguna condición de límite continua en las n caras de límite xi=1 (i=1,...,n).

(b) Para cada una de las n caras de límite restantes xi=0 (i=1,...,n), la condición de límite se puede imponer en toda la cara, con la condición de compatibilidad que, si dos caras se cruzan, las condiciones de límite de las caras deben estar de acuerdo en la intersección.

(c) Cualquier vértice que no esté contenido en las caras con condición de límite tendrá una condición de límite individual (discreta).

Puede hacer referencia a una condición de límite discreta como datos finitos y una condición de límite continuo como datos transfinidos para analizar la interpolación en datos finitos y transfinidos.

En primer lugar, revise la interpolación tetraedral estándar (como la utilizada en la patente de Sakamoto) que ayuda a establecer las notaciones para esta formulación concreta del problema. Se sabe que el cubo de unidad [0,1]n se puede subdividir en n! tetrahedra, parametrizada por el conjunto de permutaciones en n símbolos. Más concretamente, cada uno de estos tetraedrones se define por desigualdades

Muestra la fórmula de las desigualdades de los tetraedrones.

donde σ:{1,2,..,n}→{1,2,...,n} es una permutación de "símbolos" 1, 2, ..., n, es decir, es una asignación bijetiva del conjunto de n símbolos. Por ejemplo, si n = 3 y σ = (3, 2, 1), lo que significa σ(1)=3, σ(2)=2, σ(3)=1, el tetraedron correspondiente se define mediante z≥y≥x, donde se usa la notación común x, y, z para x1, x2, x3. Tenga en cuenta que estos tetrahedrones no están separados entre sí. Para la interpolación, los puntos que se basan en una cara común de dos tetraedrones distintos tendrán el mismo valor de interpolación, independientemente de qué tetraedro se use en la interpolación. Sin embargo, en el escenario estándar de interpolación en puntos finitos, para un punto de entrada determinado (x1, ..., xn), primero determine en qué tetraedro se encuentra, o equivalentemente, la permutación correspondiente σ, a continuación, el interpolante tetrahedral se define como

Muestra la ecuación que define el interpolante tetrahedral.

donde muestra la ecuación para los vectores de base estándar. para i=1, ..., n y e1, ..., en son los vectores de base estándar. Antes de pasar a la generalización, tenga en cuenta que v0, v1, ..., vn son los vértices del tetraedro y Muestra las coordenadas barícéntricas. son las coordenadas "barycéntricas".

En el caso general de los BCs en caras de límite, puede usar el concepto de proyección barycéntrica. Como antes, para un punto de entrada determinado (x1, ..., xn), primero determine en qué tetraedro se encuentra, o equivalentemente, la permutación correspondiente σ. A continuación, realice una serie de proyecciones barycéntricas, como se indica a continuación. La primera proyección Muestra el subíndice BProj 1 (x). envía el punto al plano Muestra delta de subíndice X (1) igual a 0. a menos que Muestra X igual a V subíndice n. en cuyo caso no se cambia. La definición precisa del mapa BProj se define de la siguiente manera:

Muestra la ecuación para la definición precisa del mapa BProj.

con Muestra la ecuación para el subíndice P k. y k = 1, 2, ..., n.

En el caso Muestra X es igual a V subíndice n. , puede detener, porque BC se define en vn por Suposición (a). En el caso Muestra X no es igual a V subíndice n. , es claro que Muestra el subíndice BProj 1 (X). tiene el componente σ(1)ésimo componente eliminado. En otras palabras, está en una de las caras de límite. Está en una cara en la que se define BC, en cuyo caso puede detener o realizar otra proyección barycéntrica Muestra el subíndice BProj 2 (X). donde muestra X' igual a BProj subíndice 1 (X). . Y si muestra X''= subíndice Bproj 1 (X'). está en una cara en la que se define BC, puede detener; de lo contrario, realice otra proyección Muestra el subíndice BProj 3 (X''). . Dado que cada proyección elimina un componente, la dimensión efectiva disminuye, por lo que sabe que el proceso debe detenerse finalmente. En el peor de los casos, se realizan n proyecciones hasta la dimensión 0, es decir, vértices en el cubo, que según Suposición (c), sabe que BC se definirá en.

Suponiendo que se han realizado proyecciones K, con

Muestra una ecuación para usar suponiendo que se ha realizado la proyección K.

x(0)= x, el punto de entrada y BC se define en x(k). A continuación, desenrede las proyecciones definiendo una serie de vectores de salida:

Muestra ecuaciones para una serie de vectores de salida.

donde muestra la ecuación para superíndice Y (K). , y finalmente obtiene la respuesta.

Muestra Interp(x) igual a y superíndice (0).

Ejemplo práctico

Diagrama que muestra un ejemplo trabajado de interpolación con un cubo de unidad.

Figura 2: Ejemplo de trabajo

Tenga en cuenta la situación que se muestra en la figura 2, donde n = 3, m = 1 y tiene los siguientes BC:

(a) Cuatro BCs discretos en los vértices

(0, 0, 1): β001

(0, 1, 1): β011

(1, 0, 1): β101

(1, 1, 1): β111

(b) Un BC continuo en la cara x3=0: F(x1, x2)

Cálculo n.º 1: punto de entrada x = (0,8, 0,5, 0,2). El tetrahedro envolvente está asociado a la permutación <1, 2, 3>.

1ª proyección: muestra la ecuación de la primera proyección.

Esto ya está en la cara x3=0, por lo que puede detener. Después, la sustitución hacia atrás da

Muestra la respuesta de la primera proyección. que es la respuesta.

Cálculo n.º 2: punto de entrada x = (0,2, 0,5, 0,8). El tetrahedro envolvente está asociado a la permutación <3, 2, 1>.

1ª proyección: muestra la ecuación para la primera proyección del cálculo 2.

2ª proyección: muestra la ecuación para la segunda proyección del cálculo 2.

Proyección 3ª: muestra la ecuación para la tercera proyección del cálculo 2. , que está en la cara x3=0. Después, la sustitución hacia atrás da

Muestra las dos primeras ecuaciones para la sustitución hacia atrás.

Muestra la tercera ecuación para la sustitución hacia atrás, que es la respuesta final.

APLICACIONES

(a) Interpolación tetrahedral secuencial

Diagrama que muestra la interpolación tetrahedral secuencial.

Figura 3: Interpolación tetrahedral secuencial

Consulte la figura 3. Para interpolar entre dos planos en los que se han impuesto cuadrículas incompatibles, considere una celda que incluye un punto determinado P que se muestra en la figura. Los vértices "top" de la celda proceden directamente de la cuadrícula del plano superior. Los vértices de la cara inferior no son compatibles con la cuadrícula del plano inferior, por lo que toda la cara se trata como tener un BC con valores obtenidos por interpolación en la cuadrícula del plano inferior. A continuación, es claro que esta configuración satisface las suposiciones (a), (b) y (c) anteriores, y puede aplicar el algoritmo de interpolación.

También es evidente que el algoritmo ha reducido la dimensión del problema de interpolación en 1, porque el resultado es una combinación lineal de valores en los vértices de la cuadrícula superior y la interpolación en el plano inferior, que tiene la dimensión menos 1. Si existe una configuración de plano de sándwich similar en el plano inferior, puede aplicar el procedimiento en ese plano, reduciendo aún más la dimensión en 1. Este procedimiento puede continuar hasta alcanzar la dimensión 0. Esta cascada de proyecciones e interpolaciones se puede denominar "Interpolación tetraedral secuencial".

(b) Interpolación de brechas

Diagrama que muestra la interpolación de brechas.

Figura 4: Interpolación de brechas

Se trata de una cuadrícula impuesta en un cubo que se encuentra estrictamente dentro del cuadrante positivo. El propio cubo tiene una cuadrícula en él y cada plano de coordenadas tiene cuadrículas que no son necesariamente compatibles. La "brecha" entre el cubo y los planos de coordenadas tiene una sección transversal que es "en forma L" y no es accesible para las técnicas estándar. Sin embargo, con la técnica introducida aquí, puede introducir fácilmente celdas que cubran esta brecha. En la figura 4 se muestra una de estas. Las cuadrículas de los planos de coordenadas admiten la interpolación que proporciona los BCs necesarios para todas las caras inferiores de la celda, con un vértice restante cuyo BC proporciona la esquina inferior del cubo.

Nota final sobre la implementación

En la aplicación real, el "cubo de unidad" que es el valor básico del algoritmo se extrae de las celosas más grandes y los valores de los vértices pueden requerir un cálculo costoso. Por otro lado, también está claro que la interpolación tetrahedral solo requiere los valores en los vértices del tetrahedro, que es un subconjunto de todos los vértices del cubo de unidad. Por lo tanto, es más eficaz implementar lo que se puede denominar "evaluación diferida". En una implementación de software del algoritmo anterior, es habitual tener una subrutina que toma el cubo de unidad y los valores en sus vértices como entrada. La evaluación diferida significa que, en lugar de pasar los valores en los vértices, se pasa la información necesaria para evaluar los valores de los vértices, sin llevar a cabo realmente la evaluación. Dentro de la subrutina, la evaluación real de estos valores se llevará a cabo solo para aquellos vértices que pertenecen al tetraedro envolvente, después de determinar el tetrahedro envolvente.

Tabla de búsqueda para su uso con dispositivos de origen RGB de alto rango dinámico

En el caso de que una transformación se construya con un dispositivo de origen que se modele como un dispositivo RGB virtual, es posible que los valores de coloración de origen sean negativos o mayores que unity (1.0). Cuando esto ocurre, el dispositivo de origen se conoce como tener un rango dinámico alto (HDR). Se hace especial consideración para este caso.

En el caso de las transformaciones HDR, los valores mínimo y máximo de cada canal de color se pueden determinar a partir del límite de gama del dispositivo. Mediante el uso de estos valores, se aplica un escalado simple para cada canal de coloración para que los valores de coloreado iguales al coloreado mínimo se conviertan en 0,0 y los valores de coloreado iguales al coloreado máximo se convertirán en 1,0, con una escala lineal de valores entre para asignar linealmente entre 0,0 y 1,0.

ICCProfileFromWCSProfile

Dado que el propósito principal de esta característica es admitir versiones anteriores a Vista de Windows, debe generar perfiles icc de la versión 2.2, tal como se define en la especificación ICC.1:1998-09. En determinados casos (consulte la tabla siguiente "Baseline Device To ICC Profile Class Mapping"), puede crear una matriz o un perfil icc basado en TRC a partir de un perfil WCS. En otros casos, el perfil icc consta de LUT. En el proceso siguiente se describe cómo crear las LUT AToB y BToA. Por supuesto, los perfiles icc también tienen otros campos. Algunos de los datos se pueden derivar del perfil de WCS. Para otros datos, tendrá que desarrollar valores predeterminados inteligentes. Los derechos de autor se asignarán a Microsoft; ya que es tecnología de Microsoft que se usa para crear las LUT.

Este diseño debe funcionar para todos los tipos de modelos de dispositivo, incluidos los complementos. Siempre que el complemento tenga un modelo de dispositivo de línea base asociado, se puede determinar el tipo de dispositivo subyacente.

La parte difícil de crear un perfil ICC es crear las tablas de búsqueda AToB y BToA. Estas tablas se asignan entre el espacio del dispositivo, por ejemplo, RGB o CMYK, y el espacio de conexión de perfiles (PCS), que es una variante de CIELAB. Esto es fundamentalmente lo mismo que el proceso de administración de colores usado en la transformación CITE para asignar desde el espacio del dispositivo al espacio del dispositivo. Sin embargo, debe tener la siguiente información para realizar la transformación.

  1. Condiciones de visualización de referencia para el PCS.

  2. Gama pcS de referencia.

  3. Modelo de dispositivo que se convierte entre los valores de PCS y la colorimetría.

El perfil de WCS y su CAM asociado se proporcionan como parámetros. Hay dos modelos de dispositivo de línea base que se convierten entre colorimetría y la codificación PCS. La razón por la que necesita dos se explica a continuación.

  1. Puede obtener las condiciones de visualización de referencia para el PCS de la especificación de formato de perfil ICC. La información proporcionada en la especificación de formato de perfil ICC es suficiente para calcular todos los datos necesarios para inicializar la CAM utilizada por el CMS. Para mayor coherencia y flexibilidad, esta información se almacena en un perfil de color WCS.

  2. También puede usar un perfil WCS para almacenar ejemplos que definen la gama de referencias del PCS. El sistema de administración de colores CITE (CMS) tiene dos maneras de crear límites de gama. Uno consiste en muestrear el espacio completo del dispositivo y usar el modelo de dispositivo para crear valores de medida. El segundo método consiste en usar ejemplos medidos del perfil para crear un límite de gama de referencia. Dado que la gama del PCS de la ICC es demasiado grande para hacer una gama de referencia útil, el primer método es inadecuado. Pero el segundo método es un enfoque flexible basado en perfiles. Para redefinir la gama de PCS de referencia, puede cambiar los datos de medición en el perfil de dispositivo PCS.

  3. El PCS ICC es un modelado de un dispositivo ideal. Al crear un modelo de PCS como un dispositivo real, puede aprovechar el proceso de administración de colores usado en smart CMM. La creación de un modelo de dispositivo a partir de la colorimetría a la codificación PCS es sencilla. Simplemente se asigna entre los valores colorimétricos verdaderos y los valores codificados por PCS. Dado que la interfaz CMS para los modelos de dispositivo solo admite valores XYZ, es posible que también tenga que asignar entre XYZ y LAB. Se trata de una transformación conocida. Este modelo se describe en el documento 2.2.02 "Modelos de dispositivo de línea base" en las secciones 7.9 y 7.10.

Es posible que tengas que realizar alguna asignación de gama, si la gama del dispositivo es mayor que la de los PCS. Los GMM de línea base se pueden usar para este fin. Tenga en cuenta que un perfil ICC creado correctamente tiene tablas de búsqueda para las intenciones Relative Colorimetric, Perceptual y Saturación, aunque todas pueden apuntar a la misma LUT internamente.

Diagrama que muestra la creación de un A T o B L U T.

Figura 5: Creación de una LUT de AToB

Este proceso se muestra en la figura 5. En primer lugar, el modelo de dispositivo se inicializa a partir de los datos del perfil de DM. A continuación, construya un límite de gama de dispositivos como se indica a continuación. Un muestreo de datos del modelo de dispositivo se ejecuta a través del modelo de dispositivo para obtener datos colorimétricos. Los datos colorimétricos se ejecutan a través del CAM para crear datos de apariencia. Los datos de apariencia se usan para crear el límite de la gama de dispositivos.

A continuación, use los datos del perfil de medición pcS de referencia para crear un límite de gama para el PCS.

Use los dos límites de gama que acaba de crear para inicializar un GMM. A continuación, use el modelo de dispositivo, GMM y el modelo de dispositivo PCS para crear una transformación. Ejecute un muestreo del espacio del dispositivo a través de la transformación para crear una LUT de AToB.

Diagrama que muestra la creación de un A T o B L U T mediante un muestreo del espacio de P C S.

Figura 6: Creación de una LUT de BToA

En la figura 6 se muestra la creación de la LUT de BToA. Esto es casi idéntico a la creación de una LUT de AToB, con los roles de origen y destino intercambiados. Además, debe muestrear la gama completa de PCS para crear la LUT.

Tenga en cuenta que, dado que el CAM (CIECAM02 en WCS) está implicado en el proceso, la adaptación cromática entre el punto blanco multimedia y el punto blanco PCS (ordenado por ICC para que sea el de D50) se aplica de forma transparente por la CAM.

Dispositivos RGB virtuales HDR

Debe tenerse en cuenta especial al generar perfiles para dispositivos RGB virtuales HDR; es decir, los dispositivos para los que los valores de coloración pueden ser inferiores a 0,0 o mayores que 1,0. En la generación de la LUT ATOB, se crea un conjunto mayor de LUT de entrada 1D. Los valores de coloración se escalan y se desplazan al intervalo 0 . 1 usando los valores de coloración mínimo y máximo en el perfil de WCS.

Dado que el espacio de coloración para dispositivos HDR no es probable que se rellene completamente, también se proporciona compatibilidad especial en la LUT 3D para la etiqueta. Para controlar los colores de la región dispersamente rellenada, los colores se recuperan para que se pueda lograr la extrapolación más allá de 0,0 y 1,0. El intervalo utilizado es -1 . +4.

Debido al escalado aplicado a la LUT 3D, se crea un conjunto de LUT de salida 1D para asignar el resultado al intervalo 0 . 1.

Más de un PCS

La CPI constató que un PCS no era suficientemente flexible para satisfacer todos los usos previstos de un CMS. En la versión 4 de la especificación de perfil, el ICC aclaró que en realidad hay dos codificaciones PCS. Se usa uno para las intenciones colorimétricas; se usa otra para la intención perceptual. (No se especifica ningún PCS para la intención saturación. La CPI ha dejado esta parte ambigua. El PCS colorimétrico tiene una ligereza mínima y máxima especificada, pero los valores cromáticos y de matiz oscilan aproximadamente ± 127. Este PCS se parece a un prisma rectangular. Como se mencionó anteriormente, el volumen PCS perceptual es similar a la gama de una impresora de inyección de tinta.

Los dos PCS icc también tienen dos codificaciones digitales diferentes. En el PCS perceptual, un valor de cero representa una ligereza de cero. En el PCS colorimétrico, un valor de cero representa la ligereza mínima del PCS, que es mayor que cero. Puede resolver este problema si tiene un modelo de dispositivo diferente para cada una de las codificaciones PCS.

Asignación de gamut

Para crear las LUT de AToB en un perfil ICC, se asigna desde la gama de dispositivos al espacio de PCS adecuado. Para crear las LUT de BToA, se asigna desde el espacio PCS a la gama de dispositivos. La asignación de las LUT de AToB es bastante similar a la que se usa en un CMS basado en medidas. En el caso de los PCS perceptuales, asigne la gama del dispositivo a los límites de la gama de PCS perceptual, mediante recortes o compresión para los colores fuera de la gama. Para las intenciones colorimétricas, es posible que tenga que recortar la ligereza, pero todos los valores de color y matiz van a caber en la gama PCS colorimétrica.

La asignación de las LUT de BToA es un poco diferente. Las intenciones colorimétricas siguen siendo fáciles; solo se recortan los valores de PCS en la gama de dispositivos. Pero el ICC requiere que todos los valores PCS posibles se asignen a algún valor de dispositivo, no solo a los que están dentro de la gama de referencias del PCS perceptual. Por lo tanto, debe asegurarse de que los GMM pueden controlar los colores de origen que están fuera de la gama de referencia. Esto se puede controlar recortando esos colores al límite de la gama de dispositivos.

Asignación de clase de perfil ICC al dispositivo de línea base

Tipo de dispositivo de línea base Clase de perfil ICC Comentario
Dispositivo de captura RGB Dispositivo de entrada ("scnr") PCS es CIELAB. AToB0Tag es Device to PCS con una intención colorimétrica relativa.
CRT, monitor LCD Mostrar dispositivo ("mntr") PCS es CIEXYZ. Consulte lo siguiente para la conversión de modelos.
Proyector RGB Espacio de colores ("espaciado") PCS es CIELAB.
Impresora RGB y CMYK Dispositivo de salida ("prtr") PCS es CIELAB.
Dispositivo virtual RGB (sin mayúsculas y minúsculas HDR) Mostrar dispositivo ("mntr") PCS es CIEXYZ.
Dispositivo virtual RGB (mayúsculas y minúsculas HDR) Espacio de colores ("espaciado") PCS es CIELAB.

 

La conversión de perfiles de supervisión no implica la creación de LUT, sino que consiste en crear una matriz o un modelo TRC. El modelo utilizado en ICC es ligeramente diferente del que se usa en el modelado CRT o LCD de WCS en que falta el término "corrección negra". Concretamente, puede:

Modelo WCS: muestra un modelo de W C S.

Modelo ICC: muestra un modelo de I C C.

La conversión del modelo WCS al modelo ICC se realiza de la siguiente manera.

Definir nuevas curvas:

Muestra una matriz para definir nuevas curvas.

Estas no son curvas de reproducción de tono porque no se asignan de 1 a 1. Una normalización lo logrará. Las definiciones finales del modelo icc son:

Muestra las definiciones finales del modelo de I C C.

Muestra la matriz final del modelo de I C C.

En el caso de los dispositivos virtuales RGB que no son HDR, también se genera un perfil ICC para la eficiencia del espacio. En ese caso, la matriz tristimulus M ICC se puede obtener directamente de las principales del perfil WCS sin la conversión del modelo anterior. Una última, pero importante, tenga en cuenta que esta matriz tristimulus debe adaptarse cromáticamente a D50 para cumplir con la especificación ICC del PCS. Es decir, las entradas de cada fila de la matriz que se van a codificar en el perfil ICC deben sumarse respectivamente a 96,42, 100 y 82,49. En la implementación actual, la adaptación cromática se realiza mediante CAT02, que también es la transformación de adaptación cromática utilizada en CAM02.

Conservación negra y generación negra

La implementación de la conservación negra está unida a la generación del canal negro en dispositivos que admiten un canal negro. Para ello, se recopila información sobre cada color de origen para permitir que los modelos de dispositivo que admitan un canal negro determinen cómo establecer mejor el canal negro en la salida. Aunque la conservación negra es pertinente para las transformaciones de color que se convierten entre un dispositivo de canal negro a otro, la generación negra se implementa para todas las transformaciones que implican un dispositivo de destino de canal negro.

La información del canal negro se registra en una estructura de datos denominada BlackInformation. La estructura BlackInformation contiene un valor booleano que indica si el color solo contiene un color negro y un valor numérico que indica el grado de "negro" denominado peso negro. En el caso de los dispositivos de origen que admiten un canal negro, el peso negro es el porcentaje de color negro en el color de origen. En el caso de los dispositivos de origen que no contienen un canal negro, el peso negro se calcula con los demás colorantes y el valor de apariencia. Un valor denominado "pureza de color" se calcula tomando la diferencia entre el valor de color máximo y el valor de color mínimo dividido por el valor de color máximo. Un valor denominado "ligereza relativa" se calcula tomando la diferencia entre la ligereza del color y la ligereza mínima para el dispositivo de destino dividida por la diferencia entre la ligereza mínima y máxima para el dispositivo de destino. Si el dispositivo de origen es un dispositivo aditivo (monitor o proyector), el peso negro se determina que es el 1,0 menos la pureza del color multiplicada por la ligereza relativa. Por ejemplo, si el dispositivo de origen es un monitor RGB, se calcula el valor máximo y el valor mínimo de R, G y B para cada color y la fórmula determina el peso negro:

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

Si el dispositivo de origen admite la coloración resta, por ejemplo, una impresora CMY, los colorantes individuales deben ser "los complementados" (restados de 1,0) antes de usarlos en la fórmula anterior. Por lo tanto, para una impresora CMY, R = 1,0 – C, G = 1,0 – M y B = 1,0 – Y.

La información negra de cada color procesada por la transformación de color se determina durante el proceso de traducción de colores. La información de solo negro solo se determina si se especifica conservación negra. El peso negro siempre se determina si el modelo de dispositivo de destino admite un color negro. La información negra se pasa al modelo de dispositivo de destino a través del método ColorimetricToDeviceColorsWithBlack , que usa el LUT resultante.

Tenga en cuenta que, debido a la optimización de la transformación de color, el proceso anterior solo se produce durante la creación de la transformación optimizada LUT, no durante la ejecución del método TranslateColors.

Optimización para transformaciones con más de tres canales de origen

El tamaño de la transformación optimizada viene determinado por varios factores: el número de canales de color en el dispositivo de origen, el número de pasos de la tabla para cada canal de color de origen y el número de canales de color en el dispositivo de salida. La fórmula para determinar el tamaño de la tabla de transformación es:

Tamaño = Número de pasos por origen de canal \ dispositivo(Número\ de\ canales\ in\ origen\dispositivo) x número de canales en el dispositivo de salida

Como puede ver, el tamaño de la tabla crece exponencialmente en función del número de canales del dispositivo de origen. Muchos dispositivos de origen admiten tres canales de color, por ejemplo, Rojo, Verde y Azul. Sin embargo, si un dispositivo de origen admite cuatro canales, como CMYK, el tamaño de la tabla y el tiempo necesario para construir la tabla crecen por un factor del número de pasos. En un CMS basado en medidas en el que las transformaciones se construyen "sobre la marcha", esta vez puede ser inaceptable.

Para reducir el tiempo necesario para construir la tabla de conversión de colores, es posible aprovechar dos hechos. En primer lugar, mientras que el dispositivo de origen puede admitir más de tres canales de color, el espacio de colores intermedio independiente del dispositivo (CIECAM02 Ja C b C ) tiene solo tres canales de color. En segundo lugar, la parte más lenta del procesamiento no es el modelado de dispositivos (conversión de coordenadas de color del dispositivo a valores tristimulus), pero la asignación de la gama. Con estos hechos, puede construir una tabla de conversión de color preliminar que convierta los colores en el espacio de colores independiente del dispositivo a través de los pasos de asignación de la gama y, por último, a través del modelo de color del dispositivo de salida. La construcción de esta tabla es de la dimensión tres. A continuación, creamos la tabla de conversión de color final de la dimensión cuatro convirtiendo las combinaciones de color de origen en espacio intermedio independiente del dispositivo y, a continuación, usando la tabla preliminar de conversión de color, finaliza la conversión al espacio de colores del dispositivo de salida. Por lo tanto, se reduce la computación (número de pasos en la tabla de búsqueda) número\ de\ cálculos de asignación demuta de canales al número de pasos de la tabla intermedia ₃ cálculos de asignación demutaciones. Aunque tenga que realizar el número de pasos de la (tabla de búsqueda) número\ de canales\ cálculos de modelado de dispositivos y búsquedas de tablas tridimensionales, esto sigue siendo mucho más rápido que el cálculo original.

El proceso anterior funcionará bien siempre que no sea necesario que la información pase entre el modelo de dispositivo de origen y cualquier otro componente de la transformación de color. Sin embargo, si el dispositivo de salida y el dispositivo de origen admiten un color negro y el color negro de origen se usa para determinar el color negro de salida, el proceso no podrá comunicar correctamente la información negra de origen. Un proceso alternativo consiste en construir una tabla de conversión de color preliminar que convierta los colores en el espacio de colores independiente del dispositivo solo a través de los pasos de asignación de la conversión de gama. A continuación, construya la tabla de conversión de color final de la dimensión cuatro mediante los pasos siguientes: a) convierta las combinaciones de color de origen en el espacio independiente del dispositivo intermedio, b) realice los pasos de asignación de la conversión de gama mediante la interpolación en la tabla de colores preliminar en lugar de aplicar los procesos de asignación de gama reales y c) use los valores resultantes de los pasos de asignación de gama y cualquier información de canal negro de origen para calcular los colorantes del dispositivo de salida mediante el modelo de dispositivo de salida. Este proceso también se puede usar cuando hay información transferida entre los modelos de dispositivo de origen y salida, incluso si no hay ningún canal negro; Por ejemplo, si los dos módulos se implementan con una arquitectura de complemento que permite el intercambio de datos entre módulos.

Los dos procesos anteriores se pueden usar para mejorar eficazmente el tiempo necesario para construir la tabla de transformación de color de cuatro dimensiones.

CheckGamut

El ICM llama a CreateTransform y CreateMultiProfileTransform toman una palabra de valores de marca, uno de los cuales es ENABLE_GAMUT_CHECKING. Cuando se establece esta marca, CITE debe crear la transformación de forma diferente. Los pasos iniciales son los mismos: se deben inicializar las CAM de origen y destino y, a continuación, se deben inicializar los descriptores de límite de gama de origen y destino. Independientemente de la intención especificada, se debe usar checkGamut GMM. CheckGamut GMM debe inicializarse con los modelos de dispositivo de origen y destino y descriptores de límite de gama. Sin embargo, la transformación debe crear una transformación truncada que comprende el modelo de dispositivo de origen, la CAM de origen, los GMM intermedios y checkGamut GMM. Esto garantiza que los valores delta J, delta C y delta h generados por checkGamut CMM se conviertan en los valores resultantes finales.

El significado de CheckGamut es claro cuando solo hay dos perfiles de dispositivo en la transformación. Cuando hay más de dos perfiles de dispositivo y más de dos GMM, CheckGamut informa de si los colores que se han transformado a través del primer modelo de dispositivo y todos, pero el último GMM se encuentra dentro de la gama del dispositivo de destino.

Conceptos básicos de administración de colores

Algoritmos y esquemas del Sistema de colores de Windows