Condividi tramite


Algoritmi di creazione della trasformazione WCS

Creazione di trasformazioni

 

Esecuzione della trasformazione sequenziale

 

Creazione di trasformazioni ottimizzate

 

ICCProfileFromWCSProfile

 

Conservazione nera e generazione nera

 

Check Gamut

Creazione di trasformazioni

Per spiegare correttamente il funzionamento delle trasformazioni del colore, è utile spiegare il percorso di elaborazione completo tramite ICM 2.0 e gli interni del CTE. La funzione ICM 2.0 CreateColorTransformW crea una trasformazione del colore che le applicazioni possono usare per eseguire la gestione dei colori. Questa funzione crea un contesto di colore dagli input LOGCOLORSPACE e finalità. Le finalità vengono mappate all'algoritmo di mapping della gamma ICC previsto correla. La funzione chiama quindi la funzione ICM 2.0 CreateMultiProfileTransform per l'elaborazione dei colori coerente. La funzione CreateColorTransform copia in genere i dati nella struttura di trasformazione ottimizzata interna.

La funzione ICM 2.0 CreateMultiProfileTransform accetta una matrice di profili e una matrice di finalità o un singolo profilo di collegamento del dispositivo e crea una trasformazione colore che le applicazioni possono usare per eseguire il mapping dei colori. Elabora i profili di input e le finalità per creare modelli di dispositivo, modelli di aspetto dei colori, descrizioni dei limiti di gamma e modelli di mapping di gamut. Ecco come eseguire questa operazione:

  • I modelli di dispositivo vengono inizializzati direttamente dai profili DM. È disponibile un modello di dispositivo creato per ogni profilo nella chiamata a CreateMultiProfileTransform.
  • I modelli di aspetto colore vengono inizializzati direttamente dai profili CAM. Esiste un profilo CAM per ogni profilo nella chiamata a CreateMultiProfileTransform. Lo stesso profilo CAM può tuttavia essere specificato per più di un profilo.
  • Le descrizioni dei limiti di gamut vengono inizializzate da un oggetto modello di dispositivo e da un oggetto CAM. Esiste una descrizione limite di gamma per ogni profilo nella chiamata a CreateMultiProfileTransform.
  • I modelli di mapping di gamut vengono inizializzati da due limiti di gamma e da una finalità. È necessario creare un modello di mapping di gamut tra ogni coppia di modelli di dispositivo creati dalla chiamata a CreateMultiProfileTransform. Si noti che questo significa che si usa un modello di mappa di gamma inferiore a quello del modello di dispositivo. Poiché il numero di finalità corrisponde al numero di modelli di dispositivo, esiste anche una finalità maggiore di quella necessaria. La prima finalità nell'elenco viene ignorata. Viene illustrato l'elenco dei modelli di dispositivo e delle finalità, creando modelli di mapping di gamut. Selezionare i modelli di primo e secondo dispositivo e la seconda finalità e quindi inizializzare il primo modello di mapping di gamut. Selezionare i modelli di secondo e terzo dispositivo e la terza finalità e quindi inizializzare il secondo modello di mapping di gamut. Continuare in questo modo fino a quando non sono stati creati tutti i modelli di mapping di gamut.

Quando i profili sono stati elaborati correttamente e tutti gli oggetti intermedi sono stati creati e inizializzati, è possibile creare la trasformazione CITE con la chiamata seguente. PDestCAM e pDestDM sono quelli associati all'ultimo profilo nella chiamata 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
 );

Supporto per i plug-in

Un problema relativo alla configurazione dell'elenco di trasformazioni consiste nel verificare se è disponibile un plug-in obbligatorio. L'opzione modello seguente fornisce questo criterio per controllare questo comportamento. La gestione di questo elenco di trasformazioni è un metodo nella struttura di trasformazione ottimizzata interna, ma ogni metodo modello fornisce il puntatore a se stesso e il proprio set di valori di parametro.

La modalità deve essere una delle seguenti.

  • TfmRobust: se un profilo di misurazione specifica un plug-in preferito e il plug-in non è disponibile, il nuovo sistema CTE userà il plug-in di base. Se nessun plug-in è disponibile, la trasformazione segnala un errore.
  • TfmStrict: se colorContext specifica un plug-in preferito, il plug-in deve essere disponibile. Se non viene trovato alcun plug-in preferito, verrà usato il plug-in di base. Se nessun plug-in è disponibile, la trasformazione segnala un errore.
  • TfmBaseline: è possibile usare solo plug-in baseline in AddMeasurementStep. Se ColorContext specifica un plug-in preferito, il plug-in verrà ignorato. Se il plug-in di base non è disponibile, la trasformazione segnala un errore.

Trasformare l'esecuzione

La funzione ICM 2.0 API TranslateColors converte una matrice di colori dallo spazio dei colori di origine allo spazio dei colori di destinazione come definito da una trasformazione del colore. Questa funzione controlla internamente una matrice di colori memorizzati nella cache per consentire la corrispondenza immediata dei colori comunemente trasformati. Questa trasformazione supporta matrici di byte a 8 bit e matrici float a 32 bit per canale. Tutti gli altri formati verranno convertiti prima del passaggio al nuovo CTE.

La funzione ICM 2.0 API TranslateBitmapBits converte i colori di una bitmap con un formato definito per produrre un'altra bitmap in un formato richiesto. Questa funzione controlla internamente una matrice di colori memorizzati nella cache per consentire la corrispondenza immediata dei colori comunemente trasformati. Per evitare troppi percorsi di codice, supporto e test della complessità, solo un numero limitato di formati bitmap è effettivamente supportato nel motore di trasformazione e interpolazione. Questa funzione deve convertire i formati bitmap in ingresso e in uscita non nativi in formati supportati in modo nativo per l'elaborazione. Questa trasformazione supporta solo bitmap di byte a 8 bit e bitmap a 32 bit per canale float. Tutti gli altri formati verranno convertiti prima del passaggio al nuovo CTE.

 

Esecuzione della trasformazione sequenziale

Se il parametro dwFlags ha il SEQUENTIAL_TRANSFORM bit impostato quando vengono chiamate le funzioni ICM CreateColorTransformW o CreateMultiProfileTransform , i passaggi di trasformazione vengono eseguiti in sequenza. Ciò significa che il passaggio del codice attraverso ogni modello di dispositivo, modello di aspetto colore e modello di mapping a gamut separatamente, come specificato dalla chiamata CreateColorTransform o CreateMultiProfileTransform. Questo può essere utile per il debug dei moduli plug-in, ma è molto più lento rispetto all'esecuzione tramite una trasformazione ottimizzata. L'esecuzione in modalità sequenziale non è pertanto consigliata per il software di produzione. Inoltre, potrebbero verificarsi differenze minime nei risultati ottenuti in modalità sequenziale e in modalità ottimizzata. Ciò è dovuto alle variazioni introdotte quando le funzioni vengono concatenate insieme.

Creazione di trasformazioni ottimizzate

Una trasformazione ottimizzata è una tabella di ricerca multidimensionale. La tabella può essere elaborata da un motore di interpolazione multidimensionale, ad esempio l'interpolazione tetrahedrale, che applica i colori di input alla trasformazione. Nella sezione seguente viene descritto come vengono create le tabelle di ricerca ottimizzate. La sezione successiva descrive come interpolare all'interno delle tabelle di ricerca ottimizzate.

Tabelle di ricerca sparse

Le stampanti convenzionali dispongono di inchiostri CMYK. Per estendere la gamma, un approccio consiste nell'aggiungere nuovi inchiostri al sistema. Gli inchiostri in genere aggiunti sono colori che gli inchiostri CMYK hanno difficoltà a riprodurre. Le scelte comuni sono arancione, verde, rosso, blu e così via. Per aumentare la "risoluzione apparente", gli inchiostri con tinte diverse possono essere usati, ad esempio, ciano chiaro, magenta chiaro e così via. In effetti, il dispositivo stampante ha più di quattro canali.

Anche se le stampanti sono dispositivi di output, eseguono anche la conversione del colore dallo spazio del dispositivo a un altro spazio colore. Nel caso di una stampante CMYK, si tratta di una trasformazione da CMYK a XYZ o dal "modello in avanti" della stampante. Combinando il modello di inoltro con altre trasformazioni, è possibile emulare una stampa CMYK in un altro dispositivo. Ad esempio, un CMYK della stampante a un monitor RGB renderebbe possibile un meccanismo di correzione che emula una stampa di tale stampante CMYK su un monitor. Analogamente, lo stesso vale anche per le stampanti hi-fi. Una conversione CMYKOG a RGB consente la correzione della stampante CMYKOG su un monitor.

L'approccio convenzionale all'implementazione di tale conversione dei colori consiste nell'usare una LUT uniforme. Ad esempio, in un profilo ICC per una stampante CMYKOG, la specifica ICC richiede un tag A2B1 che archivia una LUT uniforme che rappresenta un campionamento uniforme nello spazio dei dispositivi CMYKOG del modello avanti, che passa da CMYKOG allo spazio di connessione del profilo ICC (CIELAB o CIEXYZ). Il profilo di collegamento del dispositivo ICC consente una trasformazione diretta dallo spazio del dispositivo CMYKOG a qualsiasi spazio di colore, incluso uno spazio del dispositivo, anche sotto forma di un'LUT campione uniformemente nello spazio CMYKOG. Il campionamento non viene mai eseguito con 256 livelli (profondità bit 8) a causa dell'enorme LUT risultante, tranne nel caso di dispositivi monocromi (1 canale). Viene invece usato il campionamento con profondità di bit inferiore; alcune scelte tipiche sono 9 (profondità bit 3), 17 (profondità di bit 4), 33 (profondità bit 5). Con il numero di livelli inferiori a 256 in ogni canale, la LUT viene usata insieme a un algoritmo di interpolazione per produrre il risultato se un livello è compreso tra due livelli campione.

Anche se una LUT uniforme è concettualmente semplice da implementare e l'interpolazione su una LUT uniforme è in genere efficiente, la dimensione LUT aumenta in modo esponenziale con la dimensione di input. In effetti, se d è il numero di passaggi usati nella LUT uniforme e n è il numero di canali nello spazio del colore di origine, il numero di nodi nella LUT è Mostra la variabile per il numero di nodi in una LUT. Chiaramente, il numero di nodi richiede rapidamente tanto spazio di archiviazione in memoria che anche i sistemi di calcolo top-of-line hanno difficoltà a gestire la domanda. Per i dispositivi con sei o otto canali, un'implementazione ICC del profilo del dispositivo richiede l'uso di pochi passaggi nella LUT, talvolta anche fino a cinque passaggi nella tabella A2B1 per mantenere il profilo all'interno di megabyte anziché gigabyte. Chiaramente, l'uso di un numero minore di passaggi aumenta l'errore di interpolazione, perché sono ora presenti meno campioni. Poiché la LUT deve essere uniforme, l'accuratezza sull'intero spazio dei colori è danneggiata anche nelle aree dello spazio in cui una differenza di colore significativa può essere causata da una piccola modifica nel valore del dispositivo.

Nei dispositivi con più di quattro colori, alcuni spazi secondari dell'intero spazio del dispositivo sono più importanti di altri. Ad esempio, nello spazio CMYKOG, gli inchiostri ciano e verdi vengono usati raramente insieme perché le loro tonalità si sovrappongono in gran parte tra loro. Analogamente, gli inchiostri gialli e arancioni si sovrappongono in gran parte tra loro. Una riduzione uniforme del numero di passaggi può essere vista come una riduzione complessiva della qualità nell'intero spazio dei colori, che è qualcosa che è possibile permettersi per le combinazioni ink improbabili, ma non per le combinazioni probabili o importanti.

Anche se una LUT a campione uniforme è semplice ed efficiente per l'interpolazione, impone requisiti di memoria enormi come aumento della dimensione. In realtà, mentre un dispositivo potrebbe avere sei o otto canali, vengono raramente usati simultaneamente. Nella maggior parte dei casi, il colore di input per la trasformazione colore ha solo alcuni colori "attivi" e quindi risiede in uno spazio colore dimensionale inferiore. Ciò significa anche che l'interpolazione può essere eseguita in modo più efficiente in tale spazio dimensionale inferiore perché l'interpolazione è più veloce quando la dimensione è inferiore.

Pertanto, l'approccio consiste nello stratificare l'intero spazio del dispositivo in spazi secondari di varie dimensioni. E perché le dimensioni inferiori (quelle che combinano tre o quattro colori) sono più importanti, stratificando lo spazio, è anche possibile applicare diverse tariffe di campionamento; vale a dire, un numero diverso di passaggi, ai pezzi; aumento delle tariffe di campionamento per dimensioni inferiori, riducendole per dimensioni superiori.

Per correggere le notazioni, n è il numero di canali nello spazio dei colori di origine della trasformazione colore che si desidera eseguire. È anche possibile fare riferimento a n come dimensione di input e Mostra n maggiore o uguale a 5. , a meno che non sia specificato diversamente.

I blocchi predefiniti di base sono luts di varie dimensioni e dimensioni di input, anziché una LUT uniforme con dimensione di input n. Per essere più precisi, unLUT è un reticolo rettangolare imposto su un cubo unitario; ovvero, tutte le coordinate del dispositivo sono normalizzate nell'intervallo [0, 1]). se è la dimensione di input della lu (si noti che non deve essere uguale a n, anche se Mostra V minore o uguale a n. è necessaria), è costituita da griglia di campionamento unidimensionale:

Samp i: mostra una griglia di campionamento unidimensionale.

dove tutte le xjs devono trovarsi nell'intervallo [0, 1], mostra un d(i). È il numero di passaggi per il campionamento del canale i che deve essere almeno 1 e Mostra un spuperscript di X (sottoscript) d(i). D'altra parte, mostra una X di soprascrizione (sottoscript 1). Non è necessario essere 0.

Verranno definiti solo i due casi speciali seguenti di LUT.

LUT chiuso: si tratta di un valore LUT con il requisito aggiuntivo che per ogni Samp*i*, mostra un valore X di trascrizione (sottoscript 1) uguale a 0. e Mostra und(i) superiore o uguale a 2. Una LUT chiusa uniforme è un valore LUT chiuso con lo stesso oggetto Show a superscript d(i). Per ogni canale e i nodi vengono spaziati in modo uniforme tra 0 e 1.

Open LUT: si tratta di un valore LUT con il requisito aggiuntivo che per ogni Samp i, SHows a superscript X (sottoscript 1) maggiore di 0. È OK per avere Show a superscript d(i) uguale a 1. .

L'obiettivo è quello di stratificare il cubo unità [0, 1] n in una raccolta di LUT chiusi e aperte, in modo che l'intera raccolta coprirà il cubo unità. È concettualmente più semplice organizzare questi "strati LUT" in base alle loro dimensioni, in modo che nel livello superiore:

Mostra il livello superiore per organizzare gli strati T dell'L in base alle loro dimensioni.

dove Mostra la sottoscrizione sigma k. è la raccolta "k -dimensional strata". Si noti che la dimensione strata inizia da 3 anziché da 0; ovvero, punti, perché l'interpolazione di combinazioni a tre colori può essere gestita senza un requisito di memoria troppo elevato.

Descrizione dello strato LUT

In questa implementazione:

  1. Mostra il sottoscritto sigma 3. è costituito da luts chiusi con tre input, uno da ogni possibile combinazione di tre colori scelti tra i colori n .

  2. Mostra il sottoscritto sigma 4. è costituito da un valore LUT chiuso per la combinazione CMYK (o i primi quattro colori), insieme a Show (n oltre 4) meno 1. open LUTs per tutte le altre combinazioni a quattro colori. Inserendo la combinazione CMYK, si riconosce che è una combinazione importante.

  3. Per Show k uguale a 5, ..., n. , Showsigma subscript k. consiste in Show (n over k). Open LUTs, uno per ogni possibile combinazione di colori k dal totale di n colorinti.

Rimane da specificare le dimensioni delle UNITÀ di interfaccia utente.It rimane per specificare le dimensioni delle LUTS. La differenza chiave tra luts aperti e chiusi è che le LUT aperte non si sovrappongono e le LUT chiuse potrebbero sovrapporsi ai visi dei limiti. Il fatto che il campionamento unidimensionale in una LUT aperta non contiene 0, significa essenzialmente che una LUT aperta manca metà dei visi dei limiti, quindi il nome "aperto". Se due LUT non si sovrappongono, è possibile usare un numero diverso di passaggi o posizioni dei nodi in ogni canale. Lo stesso non è vero se due LUTS si sovrappongono. In tal caso, se il numero di passaggi o le posizioni del nodo sono diversi, un punto che si trova nell'intersezione dei due LUT riceverà un valore di interpolazione diverso a seconda del valore LUT usato nell'interpolazione. Una semplice soluzione a questo problema consiste nell'usare il campionamento uniforme con lo stesso numero di passaggi ogni volta che si sovrappongono due LUTS. In altre parole:

Tutte le LUT chiuse (tutte le LUT a tre colori e la LUT CMYK in questa implementazione) devono essere uniformi e avere lo stesso numero di passaggi, che vengono denotati d.

I due algoritmi seguenti possono essere usati per determinare il numero di passaggi d per le LUTS chiuse e il numero di passaggi per le LUTS aperte.

Algoritmo #1

Questo algoritmo non richiede input esterno.

Tutte le LUT chiuse saranno uniformi con il numero d di passaggi.

Tutte le LUT aperte della dimensione k avranno lo stesso numero di passaggi Mostra d(k). in ogni canale di input e i nodi sono altrettanto spaziati; ovvero, per ogni mostra i uguale a 1, 2, ..., k. .

Samp i: mostra l'algoritmo samp i.

Infine, specificare d e d (k ) nella tabella 1 seguente. Le tre modalità, "proof", "normal" e "best" sono le impostazioni di qualità di ICM 2.0. In questa implementazione, la modalità di prova ha il footprint di memoria più piccolo e la modalità migliore ha il footprint di memoria più grande.

Per implementare questo algoritmo, è necessario chiamare l'algoritmo #2 seguente. Gli utenti possono specificare i propri percorsi di campionamento usando le tabelle come guida.

Algoritmo #2

Questo algoritmo richiede l'input esterno sotto forma di un elenco di posizioni di campionamento "importanti", ma è più adattivo e può risparmiare spazio di memoria potenzialmente.

L'input richiesto è una matrice di valori del dispositivo forniti dall'utente. Questi valori del dispositivo indicano quale area dello spazio dei colori del dispositivo è importante; ovvero, quale area deve essere campionata di più.

Tutte le LUT chiuse saranno uniformi con il numero d di passaggi descritti in Algoritmo #1. I valori per d vengono forniti nella tabella 1.

(a) LUT chiuso uniforme

Modalità di prova Modalità normale Modalità migliore
D 9 17 33

 

(b) Open LUT

Dimensione di input Modalità di prova Modalità normale Modalità migliore
4 5 7 9
5 2 3 3
6 2 3 3
7 2 2 2
8 o più 2 2 2

 

Tabella 1: Dimensioni LUT usate nell'algoritmo

Ogni LUT aperto può avere un numero diverso di passaggi in ogni canale di input e le posizioni di campionamento non devono essere ugualmente spaziate. Per uno strato di LUT aperto specificato, esiste una combinazione colorante associata, ad esempio mostra la sottoscrizione C 1, ..., C sottoscript k. , dove la sottoscrizione Show C i. s sono interi distinti tra 1 e n. Sono gli indici di canale corrispondenti ai colori "attivi" in questo strato.

PASSAGGIO 1: Filtrare la matrice immessa di valori del dispositivo che non sono contenuti in questo strato. Un valore del dispositivo Mostra X pedice 1, X pedice 2, ..., X pedice n. è contenuto nello strato, se e solo se Mostra un set di valori per un canale. E tutti gli altri canali sono 0. Se il set filtrato contiene N voci, let

Mostra un'equazione da utilizzare se il set filtrato contiene N voci.

Per ogni mostra i uguale a 1, 2, ..., k. , eseguire l'iterazione dei passaggi seguenti da 2 a 5:

PASSAGGIO 2: se mostra d indice provvisorio (k) uguale a 1. , Samp i ha solo 1 punto, che deve essere 1,0. Vai alla prossima i. In caso contrario, continuare con il passaggio 3.

PASSAGGIO 3: Ordinare i campioni filtrati in ordine crescente nel canale Mostra indice C.

PASSAGGIO 4: Definire la griglia di campionamento "provvisoria" usando i nodi

Mostra i nodi usati per definire la griglia di campionamento

dove Mostra j uguale a 1, 2, ..., d indice provvisorio (k). .

PASSAGGIO 5: regolare la griglia provvisoria per assicurarsi che sia conforme a una rigida monotonicità e che termini con 1,0. Poiché la matrice è già ordinata, i nodi nella griglia provvisoria sono già monotonici che non aumentano. Tuttavia, i nodi adiacenti potrebbero essere identici. È possibile risolvere questo problema rimuovendo nodi identici, se necessario. Infine, dopo questa procedura, se il punto finale è minore di 1,0, sostituirlo con 1,0.

Si noti che IL PASSAGGIO 5 è il motivo per cui lo strato LUT può avere un numero diverso di passaggi in ogni canale. Dopo la regolarizzazione, il numero di passaggi in un canale può essere minore di Show d subscript tentative (k). .

Interpolazione

È possibile costruire la stratificazione del cubo di unità aprendo strati LUT e strati LUT chiusi. Per eseguire l'interpolazione usando questa "struttura LUT di tipo sparse", seguire questa procedura. Si supponga che un determinato valore del dispositivo di input Mostri (indice X 1, pedice X 2, ..., pedice X n). .

PASSAGGIO 1: Determinare il numero di canali "attivi". Questo è il numero di canali diversi da zero. Ciò determina la dimensione strata k per cercare lo strato contenitore. Più precisamente, la dimensione strata è 3 se il numero di canali attivi è Mostra minore o uguale a 3. In caso contrario, la dimensione strata corrisponde al numero di canali attivi.

PASSAGGIO 2: All'interno di Mostra il pedice sigma k. , cercare lo strato contenitore. Un valore del dispositivo è contenuto in uno strato aperto se tutti i canali corrispondenti allo strato hanno un valore diverso da zero e tutti gli altri canali sono zero. Un valore del dispositivo è contenuto in uno strato chiuso se ogni canale non rappresentato dallo strato è zero. Se non viene trovato alcun strato contenente, è presente una condizione di errore. Annullamento e segnalazione dell'errore. Se viene trovato uno strato contenitore, procedere con il passaggio successivo.

PASSAGGIO 3: se lo strato contenitore è chiuso, l'interpolazione all'interno dello strato può essere eseguita da qualsiasi algoritmo di interpolazione noto. In questa implementazione, la scelta dell'algoritmo è l'interpolazione tetrahedrale. Se lo strato contenitore è aperto e il valore del dispositivo si trova rigorosamente all'interno dello strato, ovvero

Mostra X pedice i maggiore o uguale a... primo nodo nel canale i

dove i è un indice del canale per lo strato, quindi funziona l'algoritmo di interpolazione standard, ad esempio l'interpolazione tetrahedrale.

Se mostra X pedice i minore di... primo nodo nel canale i per alcuni i, il valore del dispositivo rientra nel "gap" tra lo strato e gli spazi secondari dimensionali inferiori. Questo moi non è interessato da un algoritmo di interpolazione, quindi qualsiasi algoritmo di interpolazione può essere usato per interpolare all'interno di questo "gap", anche se l'algoritmo preferito è l'interpolazione trasfinite seguente.

L'architettura del modulo di interpolazione è illustrata nelle due parti della figura 1.

Diagramma che mostra la prima parte dell'architettura del modulo di interpolazione.

Diagramma che mostra la seconda parte dell'architettura del modulo di interpolazione.

Figura 1: Architettura del modulo Intepolation

Come spiegato in precedenza, questo algoritmo è in grado di ottenere un campionamento ragionevolmente denso nelle aree dello spazio del dispositivo che contengono una combinazione importante di colori, riducendo al minimo le dimensioni totali dei LUT necessari. La tabella seguente illustra un confronto tra il numero di nodi necessari per l'implementazione LUT di tipo sparse (usando l'algoritmo 1 e la modalità normale) e l'implementazione LUT uniforme corrispondente.

Numero di canali di input Sparse LUT LUT uniforme
5 142498 1419857
6 217582 24137567
7 347444 410338673
8 559618 6975757441

 

Interpolazione all'interno di un cubo di unità

Un passaggio di base nel caso della griglia rettangolare è l'interpolazione all'interno di una cella di inclusione. Per un punto di input, è possibile determinare facilmente la cella di inclusione. In una griglia rettangolare, viene specificato il valore di output in ognuno dei vertici (punti di angolo) della cella contenitore. Sono anche le uniche condizioni limite (BCS) che un interpolante deve soddisfare: l'interpolante deve passare attraverso tutti questi punti. Si noti che queste condizioni limite si trovano in punti "discreti", in questo caso i 2n punti di angolo della cella, dove n è la dimensione dello spazio dei colori.

È utile formalizzare il concetto di condizioni limite prima di procedere. Per qualsiasi subset S del limite della cella contenitore (il cubo unità in n dimensioni), una condizione limite in S è una specifica di una funzione BC: S → Rm, dove m è la dimensione di output. In altre parole, un interpolante, che può essere indicato interp: [0,1]n→ Rm, è necessario per soddisfare: Interp(x) = BC(x) per tutte le x in S.

Nello scenario standard dell'interpolazione nel cubo di unità, S è il set di punti discreti che rappresentano i 2n vertici del cubo.

È ora possibile generalizzare le condizioni limite per risolvere i problemi descritti in precedenza e fornire un nuovo algoritmo di interpolazione all'interno del cubo di unità. Invece di consentire solo punti limite discreti, le condizioni limite possono essere imposte su un intero viso limite del cubo. I presupposti precisi sono i seguenti:

(a) Il punto vn =(1,1,...,1) è speciale e è consentita solo una condizione di limite discreta. In altre parole, non è possibile imporre condizioni di limite continuo sui n visi limite xi=1 (i=1,...,n).

(b) Per ognuno dei rimanenti n limiti visi xi=0 (i=1,...,n), è possibile imporre una condizione limite per l'intero viso, con la condizione di compatibilità che se due facce si intersecano, le condizioni limite sui visi devono concordare l'intersezione.

(c) Tutti i vertici non contenuti nei visi con condizione limite avranno una condizione limite singola (discreta).

È possibile fare riferimento a una condizione di limite discreto come dati finiti e a una condizione di limite continuo come dati trasfinite per discutere l'interpolazione sui dati finiti e trasfinite.

In primo luogo, esaminare l'interpolazione tetrahedrale standard (come quella usata nel brevetto di Sakamoto) che aiuta a impostare le notazioni per questa particolare formulazione del problema. È noto che il cubo unità [0,1]n può essere suddiviso in n! tetrahedra, con parametri per il set di permutazioni su n simboli. In particolare, ogni tetraedro è definito dalle disuguaglianze

Mostra la formula per le disuguaglianze dei tetrahedron.

dove σ:{1,2,..,n}→{1,2,...,n} è una permutazione di "simboli" 1, 2, ..., n, ovvero è un mapping biiettivo del set di simboli n. Ad esempio, se n = 3 e σ = (3, 2, 1), ovvero σ(1)=3, σ(2)=2, σ(3)=1, il tetrahedron corrispondente viene definito da z≥y≥x, dove la notazione comune x, y, z viene usata per x1, x2, x3. Si noti che questi tetrahedron non sono disgiunti l'uno dall'altro. Ai fini dell'interpolazione, i punti che si trovano su un viso comune di due tetraedron distinti avranno lo stesso valore di interpolazione indipendentemente dal tetrahedron usato nell'interpolazione. Tuttavia, nello scenario standard di interpolazione su punti finiti, per un determinato punto di input (x1, ..., xn), determinare prima quale tetrahedron si trova in, o in modo equivalente, il corrispondente permutazione σ, quindi l'interpolante tetrahedral è definito come

Mostra l'equazione che definisce l'interpolante tetrahedral.

dove Mostra l'equazione per i vettori di base standard. per i=1, ..., n e e1, ..., en sono i vettori di base standard. Prima di passare alla generalizzazione, si noti che v0, v1, ..., vn sono i vertici della tetrahedron e Mostra le coordinate bariche. Sono le ".

Per il caso generale dei BCS sui visi limite, è possibile usare il concetto di proiezione barycentrica. Come in precedenza, per un determinato punto di input (x1, ..., xn), determinare prima in quale tetrahedron si trova o in modo equivalente, la permutazione corrispondente σ. Eseguire quindi una serie di proiezioni barycentriche, come indicato di seguito. La prima proiezione Mostra il pedice BProj 1 (x). invia il punto al piano Mostra delta pedice X (1) uguale a 0. A meno che Non mostri X uguale a V pedice n. Nel qual caso non viene modificato. La definizione precisa della mappa BProj è definita come segue:

Mostra l'equazione per la definizione precisa della mappa BProj.

con Mostra l'equazione per il pedice P k. e k = 1, 2, ..., n.

Nel caso mostra X è uguale a V pedice n. , è possibile arrestare, perché BC è definito in vn in base all'ipotesi (a). Nel caso mostra X non è uguale al pedice V n. , è chiaro che mostra il pedice BProj 1 (X). ha il componente σ(1)th componente annidato. In altre parole, si trova su uno dei visi limite. Si trova su un viso in cui è definito BC, nel qual caso è possibile arrestare oppure eseguire un'altra proiezione barycentrica Mostra pedice BProj 2 (X'). dove Mostra X' uguale al pedice BProj 1 (X). . E se mostra X''= pedice Bproj 1 (X'). si trova su un viso in cui è definito BC, è possibile arrestare; in caso contrario, eseguire un'altra proiezione mostra il pedice BProj 3 (X''). . Poiché ogni proiezione annienta un componente, la dimensione effettiva diminuisce, quindi si sa che il processo deve essere arrestato. Nello scenario peggiore, si eseguono n proiezioni fino alla dimensione 0, ovvero i vertici del cubo, che in base all'ipotesi (c), si sa che bc verrà definito.

Supponendo che siano state eseguite proiezioni K, con

Mostra un'equazione da utilizzare presupponendo che sia stata eseguita la proiezione K.

x(0)= x, il punto di input e BC è definito in x(k). Rimuovere quindi le proiezioni definendo una serie di vettori di output:

Mostra le equazioni per una serie di vettori di output.

dove Mostra l'equazione per l'apice Y (K). e infine si ottiene la risposta

Mostra Interp(x) uguale a y apice (0).

Esempio lavorato

Diagramma che mostra un esempio lavorato di interpolazione con un cubo di unità.

Figura 2: Esempio di lavoro

Si consideri la situazione illustrata nella figura 2, dove n = 3, m = 1 e sono presenti i BCS seguenti:

(a) Quattro BCS discreti sui vertici

(0, 0, 1): β001

(0, 1, 1): β011

(1, 0, 1): β101

(1, 1, 1): β111

(b) Bc continuo sul viso x3=0: F(x1, x2)

Calcolo n. 1: punto di input x = (0,8, 0,5, 0,2). Il tetrahedron racchiuso è associato alla permutazione <1, 2, 3>.

proiezione: mostra l'equazione per la prima proiezione.

Questo è già sul viso x3=0, quindi è possibile arrestarlo. La sostituzione con le versioni precedenti restituisce quindi

Mostra la risposta per la prima proiezione. che è la risposta.

Calcolo n. 2: punto di input x = (0.2, 0.5, 0.8). Il tetrahedron racchiuso è associato alla permutazione <3, 2, 1>.

Prima proiezione: mostra l'equazione per la prima proiezione del calcolo 2.

Seconda proiezione: mostra l'equazione per la seconda proiezione di calcolo 2.

Terza proiezione: mostra l'equazione per la terza proiezione di calcolo 2. , che si trova sul viso x3=0. La sostituzione con le versioni precedenti restituisce quindi

Mostra le prime due equazioni per la sostituzione con le versioni precedenti.

Mostra la terza equazione per la sostituzione con le versioni precedenti. Questa è la risposta finale.

Applicazioni

(a) Interpolazione sequenziale di Tetrahedral

Diagramma che mostra l'interpolazione quadriedrale sequenziale.

Figura 3: Interpolazione tetrahedral sequenziale

Fare riferimento alla figura 3. Per eseguire l'interpolazione tra due piani in cui sono state imposte griglie incompatibili, considerare una cella che racchiude un punto P specificato illustrato nella figura. I vertici "superiore" della cella provengono direttamente dalla griglia nel piano superiore. I vertici nella faccia inferiore non sono compatibili con la griglia nel piano inferiore, quindi l'intera faccia viene considerata come una bc con valori ottenuti dall'interpolazione sulla griglia nel piano inferiore. È quindi chiaro che questa configurazione soddisfa i presupposti (a), (b) e (c) precedenti ed è possibile applicare l'algoritmo di interpolazione.

È anche chiaro che l'algoritmo ha ridotto la dimensione del problema di interpolazione di 1, perché il risultato è una combinazione lineare di valori nei vertici della griglia superiore e l'interpolazione nel piano inferiore, con dimensione minore di 1. Se nel piano inferiore esiste una configurazione simile del piano sandwiching, è possibile applicare la procedura in tale piano, riducendo ulteriormente la dimensione di 1. Questa procedura può continuare fino a raggiungere la dimensione 0. Questa cascata di proiezioni e interpolazioni può essere chiamata "Interpolazione sequenziale di tetrahedrali".

(b) Interpolazione gap

Diagramma che mostra l'interpolazione dei gap.

Figura 4: Interpolazione di gap

Si tratta di una griglia imposta su un cubo seduto rigorosamente all'interno del quadrante positivo. Il cubo stesso ha una griglia su di essa e ogni piano di coordinate ha griglie non necessariamente compatibili. Il "gap" tra il cubo e i piani di coordinate ha una sezione trasversale "A forma di L" e non è utilizzabile per le tecniche standard. Tuttavia, con la tecnica introdotta qui, è possibile introdurre facilmente celle che coprono questo divario. La figura 4 illustra una di queste. Le griglie sui piani di coordinate supportano l'interpolazione che fornisce i BCS necessari per tutti i visi inferiori della cella, con un vertice rimanente il cui bc è fornito dall'angolo inferiore del cubo.

Nota finale sull'implementazione

Nell'applicazione effettiva, il "cubo unità" che rappresenta l'impostazione di base dell'algoritmo viene estratto da reticoli più grandi e i valori nei vertici possono richiedere calcoli costosi. D'altra parte, è chiaro anche che l'interpolazione tetrahedral richiede solo i valori ai vertici del tetrahedron, che è un subset di tutti i vertici del cubo unità. Pertanto, è più efficiente implementare ciò che può essere chiamato "valutazione posticipata". In un'implementazione software dell'algoritmo precedente è in genere presente una subroutine che accetta il cubo di unità e i valori ai vertici come input. La valutazione posticipata indica che invece di passare i valori ai vertici, le informazioni necessarie per valutare i valori dei vertici vengono passate, senza eseguire effettivamente la valutazione. All'interno della subroutine, la valutazione effettiva di questi valori verrà eseguita solo per i vertici che appartengono al tetraedro racchiuso, dopo che viene determinato il tetraedro racchiuso.

Tabella di ricerca da usare con dispositivi di origine RGB virtuali con intervallo dinamico elevato

Nel caso in cui una trasformazione venga costruita con un dispositivo di origine modellato come dispositivo RGB virtuale, è possibile che i valori coloranti di origine siano negativi o maggiori di unity (1,0). In questo caso, il dispositivo di origine viene definito con un intervallo dinamico elevato (HDR). Per questo caso viene fatta una considerazione particolare.

Nel caso delle trasformazioni HDR, i valori minimo e massimo per ogni canale colorante possono essere determinati dal limite di gamut del dispositivo. Usando questi valori, viene applicata una semplice scala per ogni canale colorante in modo che i valori coloranti uguali al colorante minimo vengano convertiti in 0,0 e i valori coloranti uguali al colore massimo verrebbero convertiti in 1,0, con una scala lineare di valori tra per eseguire il mapping lineare tra 0,0 e 1,0.

ICCProfileFromWCSProfile

Poiché lo scopo principale di questa funzionalità è supportare le versioni pre-Vista di Windows, è necessario generare profili CPI versione 2.2, come definito nella specifica CPI.1:1:1998-09. In alcuni casi (vedere la tabella seguente "Baseline Device To ICC Profile Mapping"), è possibile creare una matrice o un profilo CP basato su TRC da un profilo WCS. In altri casi, il profilo CPI è costituito da LUT. Il processo seguente descrive come creare le unità LOGICHE AToB e BToA. Naturalmente, anche i profili CPI hanno altri campi. Alcuni dati possono essere derivati dal profilo WCS. Per altri dati, è necessario sviluppare impostazioni predefinite intelligenti. Il copyright verrà assegnato a Microsoft; poiché si tratta di una tecnologia Microsoft usata per creare i LUT.

Questa progettazione deve funzionare per tutti i tipi di modelli di dispositivo, inclusi i plug-in. Se il plug-in ha un modello di dispositivo di base associato, è possibile determinare il tipo di dispositivo sottostante.

La parte difficile della creazione di un profilo ICC consiste nella creazione delle tabelle di ricerca AToB e BToA. Queste tabelle eseguono il mapping tra lo spazio del dispositivo, ad esempio RGB o CMYK, e lo spazio di connessione profilo (PCS), che è una variante di CIELAB. Si tratta fondamentalmente dello stesso processo di gestione dei colori usato nella trasformazione CITE per eseguire il mapping dallo spazio del dispositivo allo spazio del dispositivo. Per eseguire la trasformazione, tuttavia, è necessario disporre delle informazioni seguenti.

  1. Fare riferimento alle condizioni di visualizzazione per PCS.

  2. Gamma PCS di riferimento.

  3. Modello di dispositivo che converte tra valori PCS e colorimetria.

Il profilo WCS e la relativa CAM associata vengono forniti come parametri. Esistono due modelli di dispositivo di base che convertono tra colorimetria e codifica PCS. Il motivo per cui sono necessarie due è illustrato di seguito.

  1. È possibile ottenere le condizioni di visualizzazione dei riferimenti per il PCS dalla specifica del formato del profilo CPI. Le informazioni fornite nella specifica del formato del profilo CPI sono sufficienti per calcolare tutti i dati necessari per inizializzare la CAM usata dal CMS. Per coerenza e flessibilità, queste informazioni vengono archiviate in un profilo colore WCS.

  2. È anche possibile usare un profilo WCS per archiviare esempi che definiscono la gamma di riferimenti del PCS. Il sistema di gestione dei colori CITE (CMS) offre due modi per creare limiti di gamut. Uno consiste nell'campionare lo spazio completo del dispositivo e usare il modello di dispositivo per creare valori di misurazione. Il secondo metodo consiste nell'usare campioni misurati dal profilo per creare un limite di gamut di riferimento. Poiché la gamma del PCS CPS è troppo grande per fare una gamma di riferimenti utile, il primo metodo è inappropriato. Ma il secondo metodo è un approccio flessibile basato su profilo. Per ridefinire la gamma PCS di riferimento, è possibile modificare i dati di misura nel profilo del dispositivo PCS.

  3. IL PCS ICC è una modellazione di un dispositivo ideale. Creando un modello del PCS come dispositivo reale, è possibile sfruttare il processo di gestione dei colori usato in Smart CMM. La creazione di un modello di dispositivo dai colorimetria alla codifica PCS è semplice. È sufficiente eseguire il mapping tra i valori colorimetrici veri e i valori codificati pcS. Poiché l'interfaccia CMS per i modelli di dispositivo supporta solo i valori XYZ, potrebbe anche essere necessario eseguire il mapping tra XYZ e LAB. Si tratta di una trasformazione nota. Questo modello è descritto nel documento 2.2.02 "Modelli di dispositivo baseline" nelle sezioni 7.9 e 7.10.

Potrebbe essere necessario eseguire un mapping di gamut, se il gamut del dispositivo è maggiore del gamut del PCS. Gli GMM di base possono essere usati per questo scopo. Si noti che un profilo ICC creato correttamente include tabelle di ricerca per le finalità Relative Colorimetric, Perceptual e Saturazione, anche se queste possono puntare internamente alla stessa LUT.

Diagramma che mostra la creazione di un oggetto A T o B L T.

Figura 5: Creazione di un'LUT AToB

Questo processo è illustrato nella figura 5. Prima di tutto, il modello di dispositivo viene inizializzato dai dati nel profilo DM. Creare quindi un limite di gamma del dispositivo come indicato di seguito. Un campionamento dei dati dal modello di dispositivo viene eseguito tramite il modello di dispositivo per ottenere dati colorimetrici. I dati colorimetrici vengono eseguiti tramite cam per creare dati di aspetto. I dati di aspetto vengono usati per creare il limite di gamma del dispositivo.

Usare quindi i dati dal profilo di misurazione PCS di riferimento per creare un limite di gamma per il PCS.

Usare i due limiti di gamma appena creati per inizializzare un GMM. Usare quindi il modello di dispositivo, GMM e il modello di dispositivo PCS per creare una trasformazione. Eseguire un campionamento dello spazio del dispositivo tramite la trasformazione per creare un'LUT AToB.

Diagramma che mostra la creazione di un oggetto A T o B L T usando un campionamento dello spazio P C S.

Figura 6: Creazione di una LUT BToA

La figura 6 illustra la creazione della LUT BToA. Questa operazione è quasi identica alla creazione di un'LUT AToB, con i ruoli di origine e destinazione scambiati. È inoltre necessario eseguire l'esempio completo del gamut PCS per creare l'LUT.

Si noti che poiché il CAM (CIECAM02 in WCS) è coinvolto nel processo, l'adattamento cromatico tra il punto bianco multimediale e il punto bianco PCS (richiesto dalla ICC per essere quello di D50) viene generato in modo trasparente dalla CAM.

Dispositivi RGB virtuali HDR

Quando si generano profili per dispositivi RGB virtuali HDR, è necessario tenere conto di una particolare considerazione; ovvero, i dispositivi per i quali i valori coloranti possono essere inferiori a 0,0 o maggiore di 1,0. Nella generazione di ATOB LUT viene compilato un set più ampio di LUts di input 1D. I valori coloranti vengono ridimensionati e offset nell'intervallo 0.. 1 usando i valori coloranti minimi e massimi nel profilo WCS.

Poiché lo spazio colorante per i dispositivi HDR non è completamente popolato, il supporto speciale viene fornito anche nella LUT 3D per il tag. Per gestire i colori nell'area popolata in modo sparse, i colori vengono codificati in modo che l'estrapolazione oltre 0,0 e 1,0 possa essere ottenuta. L'intervallo usato è -1 .. +4.

A causa della scalabilità applicata per la LUT 3D, viene creato un set di LUT di output 1D per eseguire il mapping del risultato all'intervallo 0. 1.

Più PCS

L'ICC ha rilevato che un PCS non era sufficientemente flessibile per soddisfare tutti gli usi previsti di un CMS. Nella versione 4 della specifica del profilo, l'ICC ha spiegato che esistono effettivamente due codifiche PCS. Una viene usata per le finalità colorimetriche; un altro viene usato per la finalità percettiva. Nessun PCS viene specificato per la finalità di saturazione. La CPI ha lasciato questa parte ambigua. Il PCS colorimetrico ha una luminosità minima e massima specificata, ma i valori di colore e colore sono compresi approssimativamente ± 127. Questo PCS sembra un prismo rettangolare. Come accennato in precedenza, il volume PCS perceptuale è simile al gamut di una stampante inkjet.

I due PCS ICC hanno anche due codifica digitali diverse. Nel PCS perceptuale, un valore pari a zero rappresenta una leggerezza pari a zero. Nel PCS colorimetrico, un valore pari a zero rappresenta la leggerezza minima del PCS, maggiore di zero. È possibile risolvere questo problema avendo un modello di dispositivo diverso per ognuna delle codifiche PCS.

Mapping di gamut

Per creare le luts AToB in un profilo ICC, si esegue il mapping dalla gamma di dispositivi allo spazio PCS appropriato. Per creare le LUT BToA, si esegue il mapping dallo spazio PCS al gamma di dispositivi. Il mapping per le luts AToB è molto simile a quello usato in un CMS basato sulla misurazione. Per il PCS perceptuale, eseguire il mapping della gamma del dispositivo plausibile al limite di gamut PCS perceptuale, usando clipping o compressione per qualsiasi colore fuori gamma. Per le finalità colorimetriche, potrebbe essere necessario ritagliare la leggerezza, ma i valori di colore e tonalità sono tutti adatti alla gamma PCS colorimetrica.

Il mapping per le luts BToA è un po' diverso. Le finalità colorimetriche sono ancora facili; è sufficiente ritagliare i valori PCS nella gamma di dispositivi. Tuttavia, l'ICC richiede che tutti i possibili valori PCS vengano mappati a un valore del dispositivo, non solo quelli all'interno del intervallo di riferimento del PCS perceptuale. È quindi necessario assicurarsi che gli GMM possano gestire i colori di origine esterni alla gamma di riferimenti. Questo può essere gestito ritagliando tali colori al limite di gamma del dispositivo.

Mapping delle classi del profilo ICC per il dispositivo di base

Tipo di dispositivo previsto Classe profilo ICC Commento
Dispositivo di acquisizione RGB Dispositivo di input ("scnr") PCS è CIELAB. AToB0Tag è Device to PCS con finalità colorimetriche relative.
Monitoraggio CRT, LCD Display Device ("mntr") PCS è CIEXYZ. Per la conversione del modello, vedere quanto segue.
Proiettore RGB Spazio dei colori ("spac") PCS è CIELAB.
Stampante RGB e CMYK Dispositivo di output ("prtr") PCS è CIELAB.
Dispositivo virtuale RGB (case non HDR) Display Device ("mntr") PCS è CIEXYZ.
Dispositivo virtuale RGB (caso HDR) Spazio dei colori ("spac") PCS è CIELAB.

 

La conversione dei profili di monitoraggio non implica la compilazione di luts, ma invece è costituita dalla creazione di una matrice o di un modello TRC. Il modello usato in ICC è leggermente diverso da quello usato nella modellazione WCS CRT o LCD in cui manca il termine "correzione nera". ovvero:

Modello WCS: mostra un modello W C S.

Modello ICC: mostra un modello C C.

La conversione dal modello WCS al modello ICC viene eseguita come indicato di seguito.

Definire nuove curve:

Mostra una matrice per definire nuove curve.

Queste non sono curve di riproduzione tono perché non mappano da 1 a 1. Una normalizzazione otterrà questo risultato. Le definizioni finali del modello ICC sono:

Mostra le definizioni finali del modello C I C.

Mostra la matrice finale per il modello C I C.

Per i dispositivi virtuali RGB non HDR, si sta generando anche un profilo ICC visualizzato per l'efficienza dello spazio. In tal caso, la matrice tristimulo M ICC può essere ottenuta direttamente dalle primarie del profilo WCS senza la conversione del modello precedente. Un ultimo, ma importante, è che questa matrice tristimula deve essere adattata in modo cromatico a D50 per conformarsi alla specifica CPS. In altre parole, le voci in ogni riga della matrice da codificare nel profilo CPI devono essere sommate rispettivamente a 96,42, 100 e 82,49. Nell'implementazione corrente, l'adattamento cromatico è fatto da CAT02, che è anche la trasformazione di adattamento cromatico utilizzata in CAM02.

Conservazione nera e generazione nera

L'implementazione della conservazione nera è legata alla generazione del canale nero nei dispositivi che supportano un canale nero. A tale scopo, vengono raccolte informazioni su ogni colore di origine per consentire ai modelli di dispositivo che supportano un canale nero di determinare il modo migliore per impostare il canale nero sull'output. Mentre la conservazione nera è pertinente per le trasformazioni di colore che converte tra un dispositivo canale nero in un altro, la generazione nera viene implementata per tutte le trasformazioni che coinvolgono un dispositivo di destinazione del canale nero.

Le informazioni sul canale nero vengono registrate in una struttura di dati denominata BlackInformation. La struttura BlackInformation contiene un valore booleano che indica se il colore contiene solo il colorante nero e un valore numerico che indica il grado di "blackness" chiamato peso nero. Per i dispositivi di origine che supportano un canale nero, il peso nero è la percentuale di colore nero nel colore di origine. Per i dispositivi di origine che non contengono un canale nero, il peso nero viene calcolato usando gli altri colorinti e il valore di aspetto. Un valore denominato "purezza dei colori" viene calcolato prendendo la differenza tra il valore colorante massimo e il valore colorante minimo diviso per il valore colorante massimo. Un valore chiamato "leggerezza relativa" viene calcolato prendendo la differenza tra la leggerezza del colore e la leggerezza minima per il dispositivo di destinazione diviso per la differenza tra la leggerezza minima e massima per il dispositivo di destinazione. Se il dispositivo di origine è un dispositivo aggiuntivo (monitor o proiettore), il peso nero viene determinato come 1,0 meno la purezza del colore moltiplicata per la leggerezza relativa. Ad esempio, se il dispositivo di origine è un monitor RGB, il valore massimo e il valore minimo di R, G e B per ogni colore vengono calcolati e il peso nero è determinato dalla formula:

BW = (1.0 – (max(R,G,B) – min(R,G,B)) / max(R, G, B)) * leggerezza relativa

Se il dispositivo di origine supporta la colorazione sottrazione, ad esempio una stampante CMY, i singoli colori devono essere "quelli complementari" (sottratti da 1,0) prima dell'uso nella formula precedente. Pertanto, per una stampante CMY, R = 1,0 – C, G = 1,0 – M e B = 1,0 – Y.

Le informazioni sul nero per ogni colore elaborato dalla trasformazione del colore vengono determinate durante il processo di conversione dei colori. Le informazioni solo nere vengono determinate solo se viene specificata la conservazione nera. Il peso nero viene sempre determinato se il modello di dispositivo di destinazione supporta un colore nero. Le informazioni nere vengono passate al modello di dispositivo di destinazione tramite il metodo ColorimetricToDeviceColorsWithBlack , che usa l'LUT risultante.

Si noti che, a causa dell'ottimizzazione della trasformazione del colore, il processo precedente si verifica solo durante la creazione della trasformazione ottimizzata LUT, non durante l'esecuzione del metodo TranslateColors.

Ottimizzazione per le trasformazioni con più di tre canali di origine

Le dimensioni della trasformazione ottimizzata sono determinate da diversi fattori: il numero di canali colore nel dispositivo di origine, il numero di passaggi nella tabella per ogni canale di colore di origine e il numero di canali di colore nel dispositivo di output. La formula per determinare le dimensioni della tabella di trasformazione è:

Size = Number of steps per channel source\ device(Number\ of\ channels\ in\ source\ device) x number of channels in output device

Come si può notare, le dimensioni della tabella aumentano in modo esponenziale a seconda del numero di canali nel dispositivo di origine. Molti dispositivi di origine supportano tre canali colore, ad esempio Red, Green e Blue. Tuttavia, se un dispositivo di origine supporta quattro canali, ad esempio CMYK, le dimensioni della tabella e il tempo necessario per costruire la tabella aumentano di un fattore del numero di passaggi. In un CMS basato su misurazioni in cui le trasformazioni vengono costruite "in tempo reale", questa volta potrebbe essere inaccettabile.

Per ridurre il tempo necessario per costruire la tabella di conversione dei colori, è possibile sfruttare due fatti. In primo luogo, mentre il dispositivo di origine può supportare più di tre canali di colore, lo spazio di colore intermedio indipendente dal dispositivo (CIECAM02 Ja C b C ) ha solo tre canali di colore. In secondo luogo, la parte più lunga dell'elaborazione non è la modellazione del dispositivo (conversione da coordinate di colore del dispositivo a valori tristimuli), ma il mapping di gamut. Usando questi fatti, è possibile creare una tabella di conversione dei colori preliminare che converte i colori nello spazio dei colori indipendente dal dispositivo tramite i passaggi di mapping della gamma e infine tramite il modello di colore del dispositivo di output. La costruzione di questa tabella è di dimensione 3. Viene quindi creata la dimensione quattro tabella finale di conversione dei colori convertendo le combinazioni di colori di origine in uno spazio intermedio indipendente dal dispositivo e quindi, usando la tabella preliminare di conversione dei colori, completare la conversione nello spazio colori del dispositivo di output. Si riduce quindi il calcolo (numero di passaggi nella tabella di ricerca) number\ of\ channels gamut computations to the number of\ channels gamut computations to the number of steps in the intermediate table ₃ gamut mapping computations.so reduce from computing of\ channels gamut mapping computations to the number of steps in the intermediate table ₃ gamut mapping computations. Anche se è necessario eseguire il numero di passaggi nella (tabella di ricerca) numero\ di\ canali di calcolo della modellazione dei dispositivi e ricerche di tabella tridimensionali, questo è ancora molto più veloce del calcolo originale.

Il processo precedente funziona correttamente, purché non siano necessarie informazioni da passare tra il modello di dispositivo di origine e qualsiasi altro componente nella trasformazione del colore. Tuttavia, se il dispositivo di output e il dispositivo di origine supportano entrambi un colorante nero e il colorante nero di origine viene usato per determinare il colore nero di output, il processo non riuscirà a comunicare correttamente le informazioni sul nero di origine. Un processo alternativo consiste nel costruire una tabella di conversione dei colori preliminare che converte i colori nello spazio dei colori indipendente dal dispositivo solo tramite i passaggi di mapping di gamut. Creare quindi la tabella di conversione dei colori finale della dimensione quattro seguendo questa procedura: a) convertire le combinazioni di colori di origine in spazio intermedio indipendente dal dispositivo, b) eseguire i passaggi di mapping della gamma interpolando nella tabella colori preliminare anziché applicare i processi di mapping di gamut effettivi e c) usare i valori risultanti dai passaggi di mapping della gamma e le informazioni sul canale nero di origine per calcolare i colori dei dispositivi di output usando il modello di dispositivo di output. Questo processo può essere usato anche quando sono presenti informazioni trasferite tra i modelli di dispositivo di origine e output anche se non è presente alcun canale nero; ad esempio, se i due moduli vengono implementati con un'architettura plug-in che consente l'interscambio dei dati tra i moduli.

I due processi precedenti possono essere usati per migliorare in modo efficace il tempo necessario per costruire la tabella di trasformazione del colore 4dimensionale.

CheckGamut

ICM chiama CreateTransform e CreateMultiProfileTransform accettano una parola di valori di flag, uno dei quali è ENABLE_GAMUT_CHECKING. Quando questo flag è impostato, CITE deve creare la trasformazione in modo diverso. I passaggi iniziali sono gli stessi: le VM di origine e di destinazione devono essere inizializzate, quindi i descrittori di limiti di gamma di origine e di destinazione devono essere inizializzati. Indipendentemente dalla finalità specificata, è necessario usare checkGamut GMM. L'oggetto CheckGamut GMM deve essere inizializzato usando i modelli di dispositivo di origine e di destinazione e i descrittori di limiti di gamut. Tuttavia, la trasformazione deve quindi creare una trasformazione troncata che comprende il modello di dispositivo di origine, la CAM di origine, eventuali GMM intermedi e CheckGamut GMM. Ciò garantisce che i valori delta J, delta C e delta h restituiti da CheckGamut CMM diventino i valori finali risultanti.

Il significato di CheckGamut è chiaro quando nella trasformazione sono presenti solo due profili di dispositivo. Quando sono presenti più di due profili dispositivo e più di due GMM, CheckGamut segnala se i colori trasformati tramite il primo modello di dispositivo e l'ultimo GMM rientrano nella gamma del dispositivo di destinazione.

Concetti di base sulla gestione dei colori

Schemi e algoritmi del sistema colori Di Windows