Condividi tramite


Schema e algoritmi del profilo del modello di mappa gamut WCS

Panoramica

Questo schema viene usato per specificare il contenuto di un profilo del modello di mappa a gamut (GMMP). Gli algoritmi di base associati sono descritti nell'argomento seguente.

Lo schema GMMP di base è costituito da informazioni di intestazione comuni, un riferimento facoltativo a un plug-in gamut Map Model preferito e tag di estensione.

Inoltre, il GMMP fornisce informazioni esplicite sul modello di mappa Gamut di destinazione e fornisce un criterio sul modello di mappa gamut di fallback di base da usare se il modello di destinazione non è disponibile. Lo schema può includere informazioni di estensione private, ma non includerà altre informazioni estranee.

Architettura del profilo del modello di mappa gamut

Diagram that shows the Gamut Map Model Profile.

Il campionamento dello spazio colorante del dispositivo di output viene eseguito eseguendo l'iterazione tra i colori da 0,0 a 1,0 con un passaggio frazionario, accumulando tutte le combinazioni di ogni colorante in ogni passaggio e quindi convertendoli dallo spazio colorante del dispositivo allo spazio di aspetto del colore usando il metodo DM::D eviceToColorimetricColors seguito dal metodo CAM::ColorimetricToAppearanceColors. Di seguito è riportato un esempio di come questa operazione viene eseguita per RGB.

For (red= 0.0; red <= 1.0; red += redStep) {

     For (green = 0.0; green <= 1.0; green += greenStep) {

          For (blue = 0.0; blue <= 1.0; blue += blueStep) {

               Colorants[0] = red; colorants[1] = green; colorants[2] = blue;

               pRGBDM->DeviceToColorimetricColors(1, colorants, &amp;XYZ);

               pCAM->ColorimetricToAppearanceColors(1, &amp;XYZ, &amp;JCh);

          }

     }

}

Generazione del limite gamut

Esistono tre componenti per il limite di gamut: le primarie, i campioni neutrali e le shell. Le primarie vengono generate prendendo le primarie del dispositivo e applicando la trasformazione DeviceToColorimetric/ColorimetricToAppearance. I campioni neutri vengono generati eseguendo il campionamento dello spazio colorante del dispositivo nell'area neutra e applicando la stessa trasformazione. Per tre dispositivi coloranti (RGB o CMY), i campioni neutri vengono definiti come con tutti i colori uguali, ad esempio R == G == B. Per CMYK, i campioni neutri vengono definiti come C == M == Y == 0.

I fattori che influenzano i dati usati per creare il limite di gamut sono gli esempi di dati (solo dispositivi di base) e le condizioni di visualizzazione. La dimensione del passaggio usata per eseguire il campionamento completo dello spazio colorante (per i monitor e per la shell plausibile) è una costante interna e non è disponibile per la manipolazione esterna. La modifica delle condizioni di visualizzazione modifica il comportamento del modello di aspetto del colore (CAM) e modifica la forma del limite di gamut, pertanto è necessario generare un limite di gamut associato al profilo delle condizioni di visualizzazione. Se vengono usati dati di esempio, come nel caso delle stampanti di base e dei dispositivi di acquisizione, gli esempi avranno un notevole impatto sulla forma della gamma di riferimento e influiscono sul comportamento del modello stesso.

Per i dispositivi di input, ad esempio fotocamere e scanner, vengono usati diversi campionamento per generare la shell di riferimento e la shell plausibile. La shell di riferimento viene generata dalle misurazioni usate per inizializzare il modello di dispositivo. La shell plausibile viene generata in modo simile all'illustrazione precedente per i dispositivi di output. La differenza è che quando si inserisce una destinazione tipica, non si ottengono valori completamente saturi (dove R, G o B = 255). È necessario estrapolare usando il modello di dispositivo per stimare tali valori.

The GMMP Schema

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

  <xs:annotation>
    <xs:documentation>
      Gamut Map Model profile schema.
      Copyright (C) Microsoft. All rights reserved.
    </xs:documentation>
  </xs:annotation>

  <xs:import namespace="http://schemas.microsoft.com/windows/2005/02/color/WcsCommonProfileTypes" />

  <xs:element name="GamutMapModel">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ProfileName" type="wcs:MultiLocalizedTextType"/>
        <xs:element name="Description" type="wcs:MultiLocalizedTextType" minOccurs="0"/>
        <xs:element name="Author" type="wcs:MultiLocalizedTextType" minOccurs="0"/>
        <xs:element name="DefaultBaselineGamutMapModel">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="HPMinCD_Absolute"/>
              <xs:enumeration value="HPMinCD_Relative"/>
              <xs:enumeration value="SGCK"/>
              <xs:enumeration value="HueMap"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
        <xs:element name="PlugInGamutMapModel" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:any namespace="##other" processContents="skip"
                minOccurs="0" maxOccurs="unbounded" />
            </xs:sequence>
            <xs:attribute name="GUID" type="wcs:GUIDType" use="required"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="ID" type="xs:string" use="optional" />
    </xs:complexType>
  </xs:element>
</xs:schema>

Elementi dello schema GMMP

GamutMapModel

Questo elemento è una sequenza dei sottoelementi seguenti:

  1. Stringa ProfileName,
  2. DefaultBaselineGamutMapModel,
  3. Stringa di descrizione facoltativa,
  4. Stringa autore facoltativa,
  5. PlugInGamutMap facoltativo e
  6. ExtensionType facoltativo.

Condizioni di convalida: ogni sottoelemento viene convalidato dal proprio tipo.

Spazio dei nomi

xmlns:gmm="http://schemas.microsoft.com/windows/2005/02/color/GamutMapModel"

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

Versione

Versione "1.0" con la prima versione di Windows Vista.

Condizioni di convalida: 1.0 in Windows Vista. Anche le versioni <2.0 sono valide per supportare modifiche non di rilievo al formato.

Documentazione

Schema del profilo del modello di mappa gamut.

Copyright (C) Microsoft. Tutti i diritti sono riservati.

Condizioni di convalida: ogni sottoelemento viene convalidato dal proprio tipo.

Tipo DefaultBaselineGamutMapModel

Tipo UINT

Valori di enumerazione:

"MinCD\_Absolute" "MinCD\_Relative" "SIG\_KNedizione Enterprise" "HueMap"

Condizioni di convalida: i valori devono corrispondere a una delle enumerazioni precedenti.

PlugInGamutMapType

Questo elemento è una sequenza di un GUID GUIDType e di qualsiasi sottoelemento.

Condizioni di convalida: il GUID viene usato per trovare la corrispondenza con il GUID DELLA DLL PlugIn GMM. Sono disponibili al massimo 100.000 sottoelementi personalizzati.

Extensiontype

Questo elemento è una sequenza facoltativa di qualsiasi sottoelemento.

Condizioni di convalida: può essere presente un massimo di 100.000 sottoelementi.

Algoritmi di base GMMP

Allineamento degli assi neutrali

La maggior parte degli algoritmi di mapping di gamut ha l'obiettivo di eseguire il mapping dell'asse neutro del dispositivo di origine all'asse neutro del dispositivo di destinazione, ovvero il bianco passa a bianco, nero in nero e grigio in grigio. Questo è affrontato in parte ridimensionando la leggerezza dei colori di origine in modo che corrispondano alla gamma di leggerezza del dispositivo di destinazione. Ma questo non risolve completamente il problema.

È una proprietà fisica della maggior parte dei dispositivi di imaging che la cromaticità del bianco del dispositivo non corrisponde esattamente alla cromaticità del dispositivo nero. Ad esempio, il monitor bianco dipende dalla somma delle cromaticità e delle luminazioni relative dei tre primari, mentre il monitor nero dipende dalla riflessione della superficie di visualizzazione. Il bianco della stampante dipende dalla cromaticità della carta, mentre il nero della stampante dipende dall'inchiostro o dal toner utilizzato. Un modello di aspetto che esegue il mapping del bianco del dispositivo esattamente all'asse neutro dello spazio di aspetto (cromatica esattamente uguale a zero) non eseguirà il mapping del dispositivo nero all'asse neutro. Poiché l'occhio è più sensibile alle differenze cromatiche man mano che aumenta la leggerezza, i grigi medi saranno rappresentati come ancora più cromatici rispetto al nero del dispositivo. (Figura 1 illustra la curvatura degli assi neutri in due dimensioni. Infatti, gli assi neutri formano una curva più complessa in tre dimensioni.

Mentre il CAM prevede che questi colori neutri del dispositivo appariranno cromatici, gli osservatori effettivi sembrano compensare per questo. La maggior parte delle persone non considera questi valori neutrali del dispositivo come cromatici. Per la maggior parte dei modelli di mapping di gamut, è quindi consigliabile continuare a eseguire il mapping delle origini neutrali ai dispositivi neutri.

Per eseguire il mapping delle origini neutre ai dispositivi neutri, modificare i limiti di gamma di origine e di destinazione e ogni pixel quando si applica l'algoritmo di mapping gamut. Prima di tutto, regolare ogni valore nel colore di origine in modo che l'asse neutro del dispositivo di origine in corrispondenza della leggerezza del colore di origine sia direttamente sull'asse neutro dello spazio di aspetto. Vedere il lato sinistro della figura 1. Modificare quindi la descrizione del limite di gamut del dispositivo di destinazione in modo che ogni colore dell'asse neutro del dispositivo di destinazione in corrispondenza della leggerezza del colore del limite del dispositivo di destinazione sia direttamente sull'asse neutro dello spazio di aspetto. Vedere il lato destro della figura 1.

Diagram that shows the Source Gamut Boundary graph on the left, and the Destination Gamut Boundary on the right.

Figura 1 : Allineamento degli assi neutri illustrati. Sinistra: regolazione dei punti di origine rispetto all'asse neutro del dispositivo di origine. Destra: regolando la descrizione del limite di gamma di destinazione rispetto alla descrizione del limite di gamut di destinazione.

Si noti che ogni valore del pixel di origine viene modificato rispetto all'asse neutro in corrispondenza di tale valore di leggerezza. In questo modo si garantisce che i dispositivi di origine neutrali cadranno sull'asse neutro del modello di aspetto. Si spostano anche tutti gli altri colori in corrispondenza della stessa leggerezza, in modo che non vi siano discontinuità nella rappresentazione della gamma di origine. È necessario spostarsi in quantità diverse a livelli di leggerezza diversi, perché i neutrali del dispositivo di origine non sono rappresentati come altrettanto cromatici a diversi livelli di leggerezza. Chiaramente, questa non è una trasformazione semplice.

La gestione dei valori del dispositivo di destinazione è un po' più complessa. Inizialmente, si regola l'intero limite di gamma di destinazione in modo simile, ma rispetto all'asse neutro del dispositivo di destinazione. Questa operazione è illustrata nella figura 1 sul lato destro. Tale regolazione garantisce che i valori grigi di origine verranno mappati ai valori grigi di destinazione. Si tratta dello spazio in cui operano gli algoritmi di mapping della gamma.

Tuttavia, questo spazio non descrive in modo accurato il vero comportamento del dispositivo di destinazione. È necessario invertire il mapping prima che i colori mappati a gamut vengano passati al modello di aspetto e al modello di dispositivo di destinazione. È possibile eseguire l'offset di tutti i valori mappati in base all'opposto dell'offset applicato in precedenza all'asse neutro del dispositivo di destinazione. Questo esegue il mapping dell'asse neutro di destinazione al valore rappresentato originariamente dalla CAM. Esegue la stessa operazione per il limite di gamut e tutti i valori intermedi.

Diagram that shows a graph for undoing the alignment of the destination device neutral axis.

Figura 2 : Annullamento dell'allineamento dell'asse neutro del dispositivo di destinazione

Differenza di colore minima (MinCD)

Minimum Color Difference (MinCD) Relative and Absolute versions ( Minimum Color Difference( MinCD) (Differenze di colore minima ( MinCD) - equivalente alla finalità colorimetrica ICC.

Nota

MinCD GMM è adatto per la mappatura grafica e linea art contenente colori "logo" (colori spot), sfumature di colore del logo con alcuni colori fuori gamma e per la fase finale delle trasformazioni di correzione. Anche se minCD GMM può essere usato per immagini fotografiche interamente all'interno della gamma di destinazione, non è consigliabile per il rendering generale di immagini fotografiche. Il mapping dei colori out-of-gamut ai colori nella superficie di gamut di destinazione può comportare artefatti indesiderati, ad esempio irregolarità del tono o della cromatica in sfumature uniformi che superano il limite di gamut. BasicPhoto è consigliato per le immagini fotografiche. Se un'immagine fotografica o contone richiede un mapping di gamut diverso da BasicPhoto, l'alternativa deve essere quella di creare un plug-in GMM implementando tale mapping, invece di usare MinCD.

 

I colori in-gamut vengono lasciati invariati. Per i colori out-of-gamut, la leggerezza e il cromatico vengono regolati individuando il punto nella gamma di destinazione con la distanza minima di colore dai punti di input fuori gamma. La distanza dei colori viene calcolata nello spazio JCh. Tuttavia, si pesa la distanza in leggerezza (J) e la distanza in cromatica (C) o tonalità (h) in modo diverso. Una funzione di peso dipendente dal cromatico viene usata per la distanza in leggerezza, in modo che il peso sia più piccolo per piccoli cromatici e più grandi per grandi cromatici fino a raggiungere un cromatico di soglia, dopo il quale il peso rimane a 1, ovvero lo stesso peso della distanza in cromatica o tonalità. Di seguito è indicato l'utilizzo consigliato per CMC e CIEDE2000. Esistono due varianti: colorimetrica relativa e colorimetrica assoluta.

Colorimetrica relativa: allineare prima gli assi di origine e di destinazione neutrali come descritto in precedenza. Ritagliare quindi il colore di origine regolato sul limite di gamut di destinazione regolato. (Vedere la figura 4. Cromatica mappata lungo la leggerezza costante. Riaggiusta i valori del dispositivo di destinazione come descritto in precedenza. Nel caso di un limite di gamut della destinazione monocromatica, il ritaglio cromatico indica che il valore di cromatica (C) è impostato su zero (0,0).

Colorimetrica assoluta: è simile alla colorimetrica relativa, ma senza l'allineamento dell'asse neutro di origine e destinazione. Il valore di origine viene ritagliato direttamente sull'asse neutro di destinazione. Si noti che se i limiti della gamma di origine e di destinazione sono monocromatici, il comportamento è identico alla variante colorimetrica relativa; ovvero, viene eseguito l'allineamento degli assi neutrali e quindi il cromatico viene ritagliato su zero. In questo modo si garantisce che venga ottenuto un output ragionevole anche se i supporti e i colori sono notevolmente diversi.

Diagram that shows a graph for MinCD clipping to the adjusted gamut.

Figura 3 : Ritaglio minCD alla gamma regolata

BasicPhoto

Panoramica

BasicPhoto: equivalente alla finalità preferita, pictoriale o percettiva dell'ICC.

Questo algoritmo è una variante del mapping della leggerezza sigmoidale dipendente dal cromatico e del ridimensionamento del ginocchio cusp descritto da CIE TC8-03 in CIE156:2004. Questo algoritmo variant supporta i descrittori di limiti di gamut (GBD) con shell a gamma doppia; ovvero GBD con una shell di riferimento e una shell plausibile. L'algoritmo SGCK, che in origine presuppone solo una shell di gamut nel GBD, si basa sull'algoritmo SIG_KNedizione Enterprise (Braun 1999), che incorpora il mapping della leggerezza sigmoidale e il ridimensionamento della funzione del ginocchio proposto da Braun e Fairchild (1999), combinato con la dipendenza cromatica da GCUSP (Morř, 1998). Mantiene costante di tonalità percepita, ad esempio, l'angolo di tonalità in Jab con correzione della tonalità e usa una scala di leggerezza sigmoidale generica (indipendente dall'immagine) applicata in modo dipendente dal cromatico e una funzione del ginocchio del 90%. La variante si adatta lungo le linee di leggerezza costante.

Il caso di una singola shell di gamut

È utile esaminare l'algoritmo nel caso in cui i GBD di origine e di destinazione abbiano una sola shell di gamut. In questo caso, l'algoritmo è costituito dai calcoli seguenti.

Prima di tutto, eseguire il mapping iniziale della leggerezza usando la formula seguente:

Shows the formula for initial lightness mapping. (1)

dove Jₒ è la leggerezza originale e JR è la leggerezza della riproduzione.

Shows the second lightness mapping formula. (2)

Quando il limite di gamut di origine è monocromatico, il valore della cromatica sarà zero per il limite monocromatico a causa dell'allineamento dell'asse neutro. Il risultato sarà il caso degenerato in cui C è uguale a zero. In questo caso, pC è impostato su 1.

pC è un fattore di ponderazione dipendente dal cromatico (Morovič, 1998) che dipende dal cromatico del colore originale, C e JS sono il risultato della leggerezza originale mappata utilizzando una funzione sigmoidala.

 

Per calcolare JS (Braun e Fairchild, 1999), una tabella di ricerca unidimensionale (LUT) tra i valori originali e di leggerezza della riproduzione viene prima impostata sulla base di una funzione normale cumulativa discreta (S).

Shows a formula to calculate J s. (3)

dove x ₀ e S sono rispettivamente la media e la deviazione standard della distribuzione normale e i = 0,1,2... m,m è il numero di punti usati nella LUT. Si è il valore della funzione normale cumulativa per i /m %. I parametri dipendono dalla leggerezza del punto nero della gamma di riproduzione e possono essere interpolati dalla tabella 1. Per informazioni dettagliate sul calcolo di questi parametri, vedere Braun e Fairchild (1999, p. 391).

J minOut

5.0

10.0

15.0

20,0

x ₀

53,7

56.8

58.2

60.6

S

43,0

40,0

35.0

34.5

Tabella 1 : calcolo del parametro di compressione della leggerezza BasicPhoto

Per usare S come LUT di leggerezza (S LUT ) deve essere prima normalizzato nell'intervallo di leggerezza [0,100]. I dati normalizzati vengono quindi ridimensionati nell'intervallo dinamico del dispositivo di destinazione, come illustrato nell'Equazione 4, dove Jmin\ Out e Jmax\ Out sono i valori della leggerezza del punto nero e del punto bianco del supporto di riproduzione, rispettivamente.

Shows the formula for S as a lightness mapping LUT. (4)

A questo punto, i valori J S possono essere ottenuti dalla SLUT interpolando tra i punti m dei valori J O e J S corrispondenti che contiene e usando l'equazione seguente come input.

Shows the formula to obtain the J S values. (5)

J minIn è il valore di leggerezza del punto nero del mezzo originale, J maxIn è il valore di leggerezza del punto bianco del mezzo originale, e J O è la leggerezza originale. Per riferimento successivo, è possibile indicare la funzione sigmoidal definita nel modo appena descritto, come illustrato nella figura 4 seguente.

Diagram that shows the graph for chroma mapping along constant lightness.

Figura 4 : mapping cromatico lungo la leggerezza costante

In secondo luogo, se il limite di gamut di destinazione è cromatico, comprimere la cromatica lungo linee di leggerezza costante (l) ed eseguire la compressione come indicato di seguito.

Shows the formula to perform the chroma compression. (6)

dove d rappresenta la distanza da E su l;g rappresenta il limite di gamma media; r rappresenta la riproduzione; e o la figura originale 5.

Diagram that shows the graph for chroma and lightness compression in BasicPhoto.

Figura 5 : Chroma e compressione della leggerezza in BasicPhoto

Se il limite di gamut di destinazione è monocromatico, il valore della cromatica viene ritagliato su zero.

In terzo luogo, usare una clip MinCD (descritta in precedenza) per eliminare eventuali errori residui.

Miglioramento nero

L'algoritmo precedente può essere modificato per migliorare il nero quando la destinazione è un dispositivo stampante. Il problema ha a che fare con la scelta di JminOut, che in genere non corrisponde al colore più scuro che una stampante può produrre.

In particolare, il colore con densità più alta, ottenuto inserendo inchiostri al 100% (o la copertura massima possibile, se la limitazione GCR/input penna è attiva), in genere non è "neutrale" nello spazio di aspetto del colore. Vedere la figura 6. In altre parole, se la leggerezza minima neutra viene utilizzata per il dispositivo di destinazione, il scaler di leggerezza costruito verrà mappato a una leggerezza minima che non è la massima densità che può essere ottenuta dalla stampante. Si consideri l'ulteriore caso d'uso del monitor per la stampante. Il monitor nero, R=G=B=0, verrà quindi stampato come non la densità più alta. L'impatto sulla qualità dell'immagine è che c'è una mancanza di profondità e contrasto.

Diagram that shows how the device black point might be darker than the neutral minimum lightness.

Figura 6 : il punto nero del dispositivo può essere più scuro rispetto alla leggerezza minima neutra.

Si supponga che la destinazione "device black point" sia Jkakbk/JkCkh k. Se C k non è zero, il punto nero del dispositivo non è neutro rispetto a CAM02. Se si utilizza J k per la destinazione "leggerezza minima neutra" nella costruzione del scaler di leggerezza; ovvero, impostazione

JminOut = Jk

e applicarlo alla shell di gamut di origine, si ottiene la configurazione illustrata nella figura 7. Nella figura il piano tonalità corrisponde a h k.

Diagram that shows the modified lightness scaler with destination device black point.

Figura 7 : Geometria che usa lo scaler di leggerezza modificato con il punto nero del dispositivo di destinazione

Per consentire l'esecuzione dell'algoritmo di compressione cromatica successiva, è necessario allineare le leggerezze massime e minime sulle shell di origine e di destinazione. A tale scopo, è possibile regolare la shell di destinazione tra J neutralMin e J k spostando i punti a sinistra. Inoltre, questa trasformazione deve essere applicata all'intero spazio Jab, non solo al piano di tonalità corrispondente a h k.

La trasformazione è

Shows the formula for the transformation.

La figura 8 mostra l'effetto della trasformazione.

Diagram that shows the effect of the modified lightness scaler with destination device black point.

Figura 8 : Geometria che usa il scaler di leggerezza modificato con il punto nero del dispositivo di destinazione

Dopo aver applicato l'algoritmo di compressione cromatica consueto, il punto deve quindi essere "spostato indietro", ovvero la trasformazione inversa deve essere applicata per ottenere il colore mappato finale.

Shows the formula for the inverse transformation to obtain the final mapped color.

Maiuscole e minuscole di shell a gamma doppia

L'obiettivo è generalizzare SIG_KNedizione Enterprise per una singola shell di gamut nel caso in cui il GBD del dispositivo di origine o il GBD del dispositivo di destinazione abbia una struttura a due shell. La shell interna verrà chiamata Shell di riferimento, mentre la shell esterna verrà chiamata Shell plausibile. Si vogliono considerare i casi seguenti.

(a) Sia il GBD di origine che il GBD di destinazione hanno una struttura a due shell.

(b) Il GBD di origine ha una struttura a due shell; il GBD di destinazione ha una sola shell.

(c) Il GBD di origine ha una sola shell; il GBD di destinazione ha una struttura a due shell.

(d) Entrambi i GBD di origine e di destinazione GBD hanno una sola shell.

Case (d) è il caso di una singola shell di gamut illustrata in precedenza. Per i casi (a), (b) e (c), è possibile generalizzare il ridimensionamento della leggerezza per usare le informazioni aggiuntive della struttura dual shell. Nei casi (b) e (c) in cui l'origine o la destinazione ha una sola shell, si introduce una "shell di riferimento indotta" che verrà descritta in una sezione successiva, "Shell di riferimento indotta". L'algoritmo generale per due shell verrà descritto per il caso (a). Dopo aver spiegato la costruzione della shell di riferimento indotta, l'algoritmo può essere applicato anche al case (b) e (c). Per quanto riguarda la compressione cromatica, il rapporto di compressione sarà determinato dalle shell più grandi disponibili. In altre parole, se sono disponibili sia shell plausible che shell di riferimento, verrà usata la shell plausibile; in caso contrario, verrà usata la shell di riferimento.

Ridimensionamento della leggerezza generalizzata

L'esistenza di due shell per GBD di origine e di destinazione significa che è necessario eseguire il mapping di un set di quattro punti dal GBD di origine a un set corrispondente nel GBD di destinazione.

Shows how to map a set of four points to a corresponding set.

I pedice hanno i significati seguenti.

o o r: "original" (origine) o "riproduzione" (destinazione)

min o max: leggerezza minima neutra o massima leggerezza neutra

pla o ref: shell plausibile o shell di riferimento

L'ordinamento in ogni quadruplo è anche la grandezza relativa prevista di questi punti.

La mappa Di ridimensionamento della leggerezza usa le stesse prime due equazioni della singola shell, ma J S è definito in modo frammentario come indicato di seguito.

Shows the formula for J S in a piecewise manner. (7)

In altre parole, è sigmoidal all'interno della shell di riferimento e lineare all'esterno. Vedere Figura 9.

Diagram that shows a graph for the Lightness Rescaling function for two-shell GBDs.

Figura 9 : Funzione di ridimensionamento della leggerezza per GBD a due shell

SHELL DI RIFERIMENTO INDOTTA

Dove un GBD ha una shell e l'altra GBD ha due shell, è necessario creare una "Shell di riferimento" per il GBD con una sola shell. La shell esistente, denominata Shell di riferimento, verrà modificata in "Shell plausibile". Infatti, in realtà non devi creare una shell nello spazio jab completo. Poiché il ridimensionamento della leggerezza usa solo J max e J min, è necessario solo creare questi valori per la shell di riferimento indotta. Esistono due casi, a seconda del GBD con due shell.

Caso 1: Il GBD di origine ha due shell; destination GBD ha una shell.

Determinare la shell di riferimento indotta dalla destinazione sull'asse neutro; ovvero J r,\ min,\ ref e J r,\ max,\ ref della shell. Questa operazione viene eseguita usando l'algoritmo seguente.

Shows the algorithm to determine the destination induced Reference Shell.

I fattori ? basso e ? controllo elevato della separazione tra la shell plausibile e la shell di riferimento. Il valore 1 indica che i valori J min o J mₐₓ coincidono. I valori sono "indotti" dalla shell di riferimento di origine e dalla shell plausibile di origine.

Shows the formula for the values of the source Reference Shell and the source Plausible Shell.

I "fattori di fudge" F low e F high sono parametri ottimizzabili che devono essere compresi tra 0 e 1. Se il valore è 0, i dati J min o J mₐₓ vengono indotti direttamente dalle shell di origine. In questo caso, scegliere F low = 0,95 e F high = 0,1.

Caso 2: il GBD di origine ha una shell; il GBD di destinazione ha due shell.

Determinare la shell di riferimento indotta dall'origine sull'asse neutro; ovvero J o,\ min,\ ref e J o,\ max,\ ref della shell. Questa operazione viene eseguita usando l'algoritmo seguente.

Shows the algorithm to determine the destination induced Reference Shell on the neutral axis.

Ancora una volta, i fattori ? basso e ? controllo elevato della separazione tra shell plausibile e shell di riferimento. Il valore 1 indica che i valori J min o J mₐₓ coincidono. I valori sono "indotti" dalla shell di riferimento di origine e dalla shell plausibile di origine:

Shows the algorithm to control the separation between the Reference Shell and source Plausible Shell.

Motivi per le modifiche apportate alle raccomandazioni CIE TC8-03

BasicPhoto differisce dalle raccomandazioni CIE TC8-03 nei modi seguenti.

  1. Chroma non è compresso verso il cuspide, ma lungo linee di leggerezza costante.
  2. L'intervallo di leggerezza utilizza la leggerezza del colore più scuro nella gamma piuttosto che il punto in cui il limite di gamut attraversa l'asse neutro.
  3. BasicPhoto supporta sia una shell gamut di riferimento che una shell di gamut plausibile, se uno dei limiti di gamut nella trasformazione ha due shell.
  4. BasicPhoto usa CIECAM02; anziché usare CIECAM97s per eseguire la conversione in D65 a 400 cd/m2 e quindi usare lo spazio dei colori IPT RIT.

La prima modifica è stata apportata per evitare problemi di inversione del tono che possono verificarsi quando si usa la compressione verso un cusp. Come illustrato nella figura 10, la compressione cusp può causare inversione del tono. Ciò può verificarsi quando i colori di cromatica alta sono più chiari rispetto ai colori della cromatica inferiore. Poiché SGCK comprime ogni pixel in modo indipendente sia in leggerezza che in cromatica, non è garantito mantenere la relazione di leggerezza tra i valori pixel dopo la compressione. Lo svantaggio noto a questa decisione di comprimere su linee di leggerezza costante è che si possono soffrire perdite di cromatica, in particolare nelle aree in cui il limite di gamut di destinazione è molto piatto, come accade con giallo brillante.

Diagram that shows the tone inversion caused by SGCK.

Figura 10 : Inversione del tono causata da SGCK

Shows an original image of a teapot.Shows the SGCK result of the teapot image.Shows the BasicPhoto result of the teapot image.

Figura 11 : immagine originale, risultato SGCK e risultato BasicPhoto

La figura 11 illustra questa inversione del tono. A sinistra è un'immagine originale acquisita da una fotocamera digitale; al centro, l'immagine riprodotta da SGCK; e a destra, l'immagine riprodotta da BasicPhoto. L'immagine a sinistra si trova nello spazio colore della fotocamera digitale, le immagini al centro e a destra si trovano nello spazio colori di un display video LCD. Nell'immagine originale, la parte superiore della teiera è più scura rispetto alla parte inferiore, perché il fondo riflette la tovaglia su cui è seduto. Nell'immagine SGCK, la parte superiore è effettivamente più leggera rispetto alla parte inferiore, a causa dell'inversione del tono. Inoltre, è difficile vedere gli elementi riflessi nella parte inferiore della teiera. A destra BasicPhoto ha fissato l'inversione del tono e gli articoli riflessi sono più chiaramente distinguibili.

La seconda modifica è stata apportata per migliorare la riproduzione di colori quasi neri sulle stampanti in cui il nero più nero non cade direttamente sull'asse CIECAM02 neutro. La figura 12 seguente mostra un'immagine convertita in sRGB; riprodotto per una stampante inkjet RGB con SGCK; e riprodotti per la stessa stampante utilizzando BasicPhoto. L'immagine al centro non usa il dispositivo completo nero, quindi manca il contrasto visto nell'originale. Il contrasto viene ripristinato con BasicPhoto.

Shows the original image of a playset.Shows the image of the playset reproduced for an R G B inkjet printer using SGCK.Shows the image of the playset reproduced for an R G B inkjet printer using BasicPhoto.

Figura 12 : Nero migliorato

La terza modifica è stata apportata per migliorare la riproduzione del colore per le fotocamere digitali. In particolare nei casi in cui la fotocamera digitale è stata profilata usando una destinazione di riferimento, una descrizione del limite di gamut creata dai colori misurati potrebbe non includere tutti i colori che potrebbero essere acquisiti in una scena reale. Invece di ritagliare tutti i colori nella gamma della destinazione del colore misurata, si consente l'estrapolazione per produrre un limite di gamut plausibile. L'algoritmo BasicPhoto è progettato per supportare un limite di gamut estrapolato.

La quarta modifica è stata apportata perché CIECAM02 funziona bene per il mapping di gamut. Il processo consigliato da TC8-03 per la conversione dei colori dei dispositivi in D65 a 400 cd/m2 e quindi l'uso dello spazio colori IPT RIT è sia a elevato utilizzo di calcolo che dispendioso in termini di tempo.

Mapping delle tonalità

HueMap è l'equivalente della finalità Saturazione ICC.

Se il limite di gamut di origine o il limite di gamut di destinazione non contiene primarie, questo modello ripristina il modello MinCD (relativo) descritto in una sezione precedente; ad esempio, i dispositivi per i quali non è possibile determinare le primarie (profili ICC con più di quattro canali) o profili ICC monocromatici.

Questo algoritmo regola innanzitutto la tonalità del valore del colore di input. Quindi regola contemporaneamente la leggerezza e il cromatico, utilizzando un mapping di shearing. Infine, ritaglia il valore del colore per assicurarsi che sia all'interno della gamma.

Il primo passaggio consiste nel determinare le "ruote hue". Trovare i valori JCh per i colori primari e secondari per il dispositivo di origine e di destinazione. Si stanno prendendo in considerazione solo i componenti hue. Ciò comporta una rotellina di tonalità primaria o secondaria con sei punti di colore per ogni dispositivo. Vedere la figura 13.

Diagram that shows the hue wheels with six color points.

Figura 13 : Ruote hue

È possibile ottenere risultati migliori se il primario di origine blu non viene ruotato sul primario blu di destinazione. Al contrario, l'angolo di tonalità principale di origine blu viene usato come angolo di tonalità principale blu di destinazione.

Successivamente, eseguire le rotazioni delle tonalità per ogni colore di input dall'immagine di origine,

a)Usando l'angolo di tonalità del colore di input, determinare la posizione del colore sulla rotellina di tonalità di origine rispetto ai due colori primari o secondari adiacenti. La posizione può essere considerata come una percentuale della distanza tra i primari. Ad esempio, la tonalità del colore di input è il 40% del modo tra il valore di tonalità di Magenta e il valore di tonalità rosso.

b)Sulla ruota delle tonalità di destinazione trovare l'angolo di tonalità associato, ad esempio, il 40% da Magenta a Rosso. Questo valore sarà l'angolo di tonalità di destinazione.

In generale, i primari di origine e i database secondari non saranno gli stessi angoli di tonalità dei primari di destinazione e dei database secondari; ovvero, l'angolo di tonalità di destinazione in genere sarà diverso dall'angolo di tonalità di origine.

Si supponga, ad esempio, che le ruote hue producano i valori seguenti:

Origine M = 295 gradi, Origine R = 355 gradi.

Destinazione M = 290 gradi, Destinazione R = 346 gradi.

Se l'angolo di tonalità del colore di input è di 319 gradi, è il 40% dell'angolo (24 gradi) dall'origine M alla sorgente R. L'angolo da M a R è di 60 gradi e l'angolo da M a tonalità di input è di 24 gradi. Calcolare l'angolo sulla destinazione del 40% dalla destinazione M alla destinazione R (22 gradi), quindi l'angolo di tonalità del colore di destinazione è di 312 gradi.

Calcolare quindi i punti di riferimento delle tonalità per la tonalità di origine e la tonalità di destinazione. Per calcolare il punto di riferimento della tonalità per un determinato valore h (hue), si desidera trovare il valore J (leggerezza) e il valore C (cromatico).

  • Trovare il valore J del punto di riferimento hue interpolando tra i valori J per i punti primari o secondari adiacenti, usando la posizione relativa della tonalità; ad esempio, il 40% in questo esempio.
  • Trovare il valore C massimo in questo valore J e h. Ora hai il JCh del punto di riferimento per la tonalità.

Diagram that shows a hue leaf.

Figura 14 : foglia di tonalità (visualizzazione di una sezione di limiti di gamut in una tonalità specifica)

Il passaggio successivo consiste nel calcolare il mapping di taglio per ogni pixel. Prima di tutto, visualizzare una foglia di tonalità dalla gamma di origine per l'angolo di tonalità del colore di origine e una foglia di tonalità dalla gamma di destinazione per l'angolo di tonalità di destinazione calcolato durante la rotazione delle tonalità. Le foglie di tonalità vengono create prendendo una "sezione" dalla superficie limite di gamut JCh in un angolo di tonalità specifico (vedere la figura 14).

NOTA: per motivi di ottimizzazione delle prestazioni, le foglie di tonalità non vengono effettivamente create; sono descritti e visualizzati qui solo a scopo di visualizzazione. Le operazioni vengono eseguite direttamente sulla superficie limite di gamut in corrispondenza della tonalità specificata. Si calcolano quindi i punti di riferimento delle tonalità per determinare il mapping di taglio.

  • Eseguire un ridimensionamento di leggerezza per mappare i punti neri e bianchi della foglia di origine alla foglia di destinazione (vedere la figura 15). I punti neri e bianchi della foglia di tonalità di origine vengono mappati in modo lineare ai punti neri e bianchi della foglia di tonalità di destinazione, ridimensionando tutte le coordinate J del limite di origine. Il valore del colore di input mappato alle tonalità viene ridimensionato nello stesso modo.

Diagram that shows the lightness mapping.

Figura 15 : Mapping della leggerezza

  • Determinare i punti di riferimento delle tonalità per ogni foglia di tonalità. Applicare un mapping di taglio alla foglia di origine in modo che i punti di riferimento di origine e di destinazione coincidono (vedere la figura 16). Il punto di riferimento per una gamma in corrispondenza di una tonalità specifica è il punto di riferimento della tonalità interpolata tra le primarie adiacenti. Il punto di riferimento della foglia di tonalità di origine viene mappato in modo lineare al punto di riferimento della foglia di tonalità di destinazione, utilizzando un'operazione di "taglio" che blocca l'asse J, mantenendo i punti neri e i punti bianchi stazionari. I punti neri, i punti bianchi e i punti di riferimento delle foglie di origine e destinazione devono coincidere.
  • Applicare il mapping di taglio al valore del colore di input con regolazione della leggerezza. Le coordinate J e C del valore del colore di origine vengono ridimensionate proporzionalmente rispetto alla distanza dall'asse J.
  • Successivamente, viene eseguita una sottile compressione di leggerezza dipendente dal cromatico verso il valore J del punto di riferimento di tonalità sul punto di colore con mapping shear. La compressione verso il riferimento di tonalità J viene eseguita in modo gamma, in cui il bianco, il nero, i grigi e i punti sul riferimento di tonalità J non sono interessati. Tutti gli altri punti tendono verso il riferimento di tonalità J in modo uniforme, leggermente raggruppando verso l'alto vicino al riferimento di tonalità J, con costante rimanente cromatica. La dipendenza cromatica assicura che i colori neutri non sono interessati e l'effetto è aumentato sui colori con cromatica superiore.

Di seguito è riportata una descrizione matematica della compressione della leggerezza verso il riferimento di tonalità J o la regolazione del valore J del punto di destinazione. Viene chiamato punto di destinazione perché è stato eseguito il mapping nella gamma di destinazione.

Prima di tutto, calcolare "factorC" (fattore di dipendenza cromatica) per il punto di destinazione, che determina quanto effetto avrà la compressione della leggerezza. I punti vicino o sull'asse J avranno una compressione minima o nessuna; punti più lontano dall'asse J (high-chroma) avrà più compressione applicata. Moltiplicare per 0,5 per garantire che factorC sia minore di 1, perché è possibile che sourceC potrebbe essere leggermente maggiore di referenceC, ma non due volte più grande.

factorC = (destinationC/referenceC) ? 0.5

dove:

destinationC è il valore C del punto di destinazione.

referenceC è il valore C del punto di riferimento Hue.

Successivamente, determinare se il punto di destinazione J è sopra o sotto il riferimento di tonalità J. Se è precedente, eseguire le operazioni seguenti:

  1. Calcolare "factorJ" per il punto di destinazione rispetto al referenceJ. Questo valore factorJ sarà compreso tra 0 e 1 (0 se nel referenceJ; 1 se è massimoJ).

  2. factorJ = (destinationJ - referenceJ) / (maxJ - referenceJ)

    dove:

    destinationJ è il valore J del punto di destinazione.

    referenceJ è il valore J del punto di riferimento hue.

    maxJ è il valore J massimo della gamma.

  3. Applicare una funzione di alimentazione simile a gamma a factorJ, che ridurrà factorJ di una determinata quantità. In questo esempio viene usata la potenza di 2 (quadrato). Sottrarre il fattore ridottoJ dal fattore originaleJ e moltiplicare il risultato per l'intervallo J totale sopra il riferimento primarioJ per trovare il "deltaJ", che rappresenta la modifica in J dopo la compressione della leggerezza, ma non includendo la dipendenza cromatica.

  4. deltaJ = (factorJ - (factorJ ? factorJ)) ? (maxJ - referenceJ)

  5. Applicare factorC al deltaJ (maggiore è il cromatico, maggiore è l'effetto) e calcolare il nuovo valore J per il punto di destinazione.

  6. destinationJ = destinationJ - (deltaJ ? factorC)

Se J-value per il punto di destinazione è inferiore a referenceJ, viene eseguito un calcolo simile ai passaggi precedenti A-C, usando minJ invece di maxJ per trovare l'intervallo in J per calcolare il factorJ e tenendo conto della polarità delle operazioni "sotto" il referenceJ.

factorJ = (referenceJ - destinationJ) / (referenceJ - minJ)

deltaJ = (factorJ - (factorJ ? factorJ)) ? (referenceJ - minJ)

destinationJ = destinationJ + (deltaJ ? factorC)

dove:

minJ è il valore J minimo della gamma.

La cromatica per i punti di colore di input viene espansa linearmente (quando possibile) lungo una leggerezza costante proporzionale al valore massimo di cromatica delle gamut di origine e destinazione in corrispondenza di tale tonalità e leggerezza. In combinazione con la compressione della leggerezza dipendente dal cromatico precedente, ciò consente di mantenere la saturazione perché il mapping di taglio usando i punti di riferimento a volte causa la sovracompressione del punto di origine nella cromatica (vedere la figura 16).

Diagram that shows shear mapping to match hue reference points, before the shear on the left, after shear on the right.

Figura 16 : Mapping shear, compressione della leggerezza verso il riferimento alla tonalità J e espansione cromatica

Di seguito è riportata una descrizione matematica del processo di espansione della cromatica o la regolazione del valore C del punto di destinazione. Si chiama punto di destinazione perché è stato eseguito il taglio mappato e la leggerezza compressi nella gamma di destinazione.

  1. Prima del mapping di taglio, determinare sourceExtentC (l'estensione cromatica in corrispondenza della leggerezza e della tonalità del punto di origine).

  2. Dopo il mapping di taglio e la compressione della leggerezza che trasforma il punto di origine nel punto di destinazione, determinare la destExtentC (l'estensione cromatica in corrispondenza della leggerezza e della tonalità del punto di destinazione).

  3. Se sourceExtentC è maggiore di destExtentC, non è necessaria alcuna regolazione cromatica al punto di destinazione ed è possibile ignorare il passaggio successivo.

  4. Regolare destinationC (il cromatico del punto di destinazione) per adattarsi all'interno dell'estensione cromatica di destinazione in corrispondenza di questa leggerezza e tonalità.

  5. destinationC = destinationC ? (destExtentC/sourceExtentC)

    dove:

    destinationC è il valore C del punto di destinazione.

    sourceExtentC è il valore C massimo della gamma di origine in corrispondenza della leggerezza e della tonalità del punto di origine.

    destExtentC è il valore C massimo della gamma di destinazione in corrispondenza della leggerezza e della tonalità del punto di destinazione.

Infine, eseguire il ritaglio della distanza mimimum. Se il colore di input con rotazione, leggerezza e mappato alla tonalità rimane leggermente esterno alla gamma di destinazione, ritagliarlo (spostarlo) al punto più vicino sul limite di gamut di destinazione (vedere la figura 17).

Diagram that shows the minimum distance clipping.

Figura 17 : Ritaglio della distanza minima

Descrizione dei limiti gamut e algoritmi della shell gamut

La funzione limite di gamut del dispositivo usa il motore del modello di dispositivo e i parametri analitici per derivare un limite di gamut del dispositivo a colori, descritto come un elenco di vertici indicizzati dello scafo della gamma di dispositivi. Lo scafo viene calcolato in modo diverso a seconda che si stia lavorando con dispositivi additivi, ad esempio monitor e proiettori, o dispositivi sottrazione. L'elenco dei vertici indicizzati viene archiviato in CIEJab. La struttura dell'elenco dei vertici indicizzati è ottimizzata per l'accelerazione hardware di DirectX.

Questo approccio ha molte soluzioni note. Se si cerca "convex hull DirectX" sul Web, si ottengono più di 100 riscontri. Ad esempio, c'è un riferimento dal 1983 in questo argomento specifico (Teoria grafica computer e applicazione, "Shiphulls, superfici b-spline e cadcam",pp. 34-49) con riferimenti che risalgono dal 1970 al 1982 sull'argomento.

La raccolta di punti può essere determinata da informazioni disponibili esternamente, come indicato di seguito:

  • I punti per la shell di riferimento per i monitor vengono generati usando un campionamento del cubo di colori nello spazio colorante del dispositivo.
  • I punti per la shell di riferimento per le stampanti e i dispositivi di acquisizione vengono ottenuti dai dati di esempio usati per inizializzare il modello.
  • I punti per la shell di riferimento per scRGB e sRGB vengono generati usando un campionamento del cubo di colori per sRGB.
  • I punti per la shell plausibile per i dispositivi di acquisizione vengono generati usando un campionamento del cubo di colori nello spazio colorante del dispositivo.
  • I punti per la shell di riferimento per i proiettori vengono generati usando un campionamento di un poliedro nel cubo di colori nello spazio colorante del dispositivo.
  • I punti per la shell possibile per gli spazi di colore a intervalli dinamici estesi vengono generati usando un campionamento del cubo di colori nello spazio stesso.

È possibile creare un elenco di vertici che descrive in modo efficiente la gamma dei dispositivi a colori, in base a un profilo di dispositivo e ai servizi di supporto del sistema.

Per i dispositivi di output, il limite di gamma descrive l'intervallo di colori che può essere visualizzato dal dispositivo. Un limite di gamut viene generato dagli stessi dati usati per modellare il comportamento del dispositivo. Concettualmente, si restituisce un campionamento dell'intervallo di colori che il dispositivo può produrre, misurare i colori, convertire le misurazioni nello spazio di aspetto e quindi usare i risultati per creare il limite di gamut.

I dispositivi di input sono più complessi. Ogni pixel in un'immagine di input deve avere un valore. Ogni pixel deve essere in grado di rappresentare in qualche modo qualsiasi colore trovato nel mondo reale. In questo senso, nessun colore è "fuori gamma" per un dispositivo di input, perché può sempre essere rappresentato.

Tutti i formati di immagine digitale hanno un intervallo dinamico fisso. A causa di questa limitazione, c'è sempre qualche stimolo distinto che si associa allo stesso valore digitale. Quindi, non è possibile stabilire un mapping uno-a-uno tra i colori reali e i valori della fotocamera digitale. Al contrario, il limite di gamut è formato stimando una gamma di colori reali che possono produrre le risposte digitali della fotocamera. L'intervallo stimato viene usato come gamma per il dispositivo di input.

Le primarie sono incluse per fornire il mapping di gamut di tipo finalità grafica aziendale.

Nello stile vero orientato agli oggetti si astrae la rappresentazione sottostante del limite di gamut. In questo modo è possibile modificare la rappresentazione in futuro. Per comprendere il descrittore di limiti di gamut (GBD) usato nella nuova CTE, è prima necessario comprendere il funzionamento degli algoritmi di mapping gamut (GMA). Tradizionalmente, gli GMA sono stati progettati per soddisfare le esigenze della comunità dell'arte grafica; ovvero per riprodurre immagini di cui è già stato eseguito il rendering corretto per il dispositivo in cui è stata creata l'immagine di input. L'obiettivo delle arti grafiche GMA è quello di rendere la migliore riproduzione possibile dell'immagine di input nel dispositivo di output. Il nuovo GBD CTE è progettato per risolvere quattro problemi chiave.

Poiché viene eseguito il rendering dell'immagine di input per il dispositivo di input, tutti i colori rientrano nell'intervallo tra il punto bianco del supporto e il punto nero. Si supponga che l'immagine sia una fotografia di una scena in cui c'è un bianco diffuso, ad esempio una persona in una camicia bianca, e un'evidenziazione speculare, ad esempio la luce che riflette una finestra o un paraurti chrome. Il rendering della scena verrà eseguito sul supporto di input in modo che l'evidenziazione speculare sia mappata al punto bianco del supporto e che il bianco diffuso sia mappato a un colore neutro più scuro rispetto al punto bianco del medio. La scelta di come mappare i colori dalla scena al supporto di input è sia una decisione dipendente dalla scena che una decisione estetica. Se l'evidenziazione speculare non fosse presente nella scena originale, il bianco diffuso verrebbe probabilmente mappato al punto bianco del mezzo. In una scena con un sacco di dettagli di evidenziazione, più intervallo verrebbe lasciato tra il bianco speculare e il bianco diffuso. In una scena in cui l'evidenziazione non è significativa, un intervallo molto piccolo potrebbe essere lasciato.

Per le immagini di cui è stato eseguito il rendering preliminare, il mapping di gamut è relativamente semplice. Fondamentalmente, il punto bianco del supporto originale è mappato al punto bianco del supporto di riproduzione, il punto nero di origine viene mappato al punto nero di destinazione e la maggior parte del mapping è completa. I diversi GMA in esistenza forniscono variazioni per il mapping di altri punti sulla scala del tono del supporto di origine e modi diversi per gestire i valori cromatici out-of-gamut. Ma il mapping di bianco a bianco e nero in nero è coerente in tutte queste variazioni. Questa implementazione richiede che il bianco sia sopra un J* di 50 e nero al di sotto di un J* di 50.

Non tutte le codifiche dei colori limitano gli intervalli di colori per le immagini di input. La codifica dei colori standard IEC scRGB (IEC 61966-2-2) fornisce 16 bit per ognuno dei tre canali di colore rosso, verde e blu (RGB). In tale codifica, il colore di riferimento non viene codificato come triple RGB (0, 0, 0), ma come (4096, 4096, 4096). Il bianco di riferimento è codificato come (12288, 12288, 12288). La codifica scRGB può essere usata per rappresentare evidenziazioni speculari e dettagli ombreggiatura. Include triple RGB che non sono fisicamente possibili perché richiedono quantità negative di luce e codifiche esterne al locus spettrale CIE. Chiaramente, nessun dispositivo può produrre tutti i colori nella gamma scRGB. Infatti, nessun dispositivo può produrre tutti i colori che un essere umano può vedere. Quindi, i dispositivi non possono riempire la gamma scRGB e sarebbe utile essere in grado di rappresentare la parte del gamut che fanno riempimento. Ogni dispositivo ha un intervallo di valori nello spazio scRGB che può produrre. Questi sono i colori "previsti" per il dispositivo; sarebbe sorprendente per il dispositivo produrre colori al di fuori di questa gamma. È presente una trasformazione definita dallo spazio scRGB allo spazio di aspetto, quindi ogni dispositivo ha anche un intervallo di valori di aspetto che si prevede di riprodurre.

Sia in scRGB che nell'input dei dispositivi di acquisizione caratterizzati da una destinazione fissa, è possibile ottenere un valore al di fuori dell'intervallo di valori previsti. Se qualcuno calibra una fotocamera in un target di test; e quindi acquisisce una scena con evidenziazioni speculari, potrebbero esserci pixel più luminosi del punto bianco della destinazione. La stessa cosa può accadere se un rosso che si verifica naturalmente è più cromatico del rosso target. Se un utente accetta un'immagine scRGB da un dispositivo e quindi modifica manualmente i colori nell'immagine, è possibile creare pixel che non rientrano nell'intervallo previsto della gamma di dispositivi, anche se si trovano all'interno della gamma scRGB completa.

Un secondo problema potrebbe non essere, inizialmente, correlato a questo. Si verifica quando si usa una destinazione di colore per caratterizzare un dispositivo di input, ad esempio una fotocamera o uno scanner. Le destinazioni riflettenti vengono in genere prodotte su carta e contengono una serie di patch colorate. I manufaturi forniscono file di dati con misurazioni di colore prese in una condizione di visualizzazione fissa per ogni patch di colore. Gli strumenti di profilatura colori creano un mapping tra questi valori misurati e i valori restituiti dai sensori di colore nei dispositivi. Il problema è che spesso queste destinazioni di colore non coprono l'intera gamma di valori del dispositivo. Ad esempio, lo scanner o la fotocamera potrebbe restituire un valore (253, 253, 253) per il punto bianco di riferimento e una patch rossa di riferimento potrebbe avere un valore RGB pari a (254, 12, 4). Questi rappresentano l'intervallo di valori previsti per il dispositivo di input, in base ai valori di destinazione. Se si caratterizza il dispositivo di input in base alle risposte alla destinazione, ci si aspetta solo i colori all'interno di questo intervallo ristretto. Questa gamma non è solo più piccola della gamma di colori che gli esseri umani possono vedere, è più piccola della gamma di colori che il dispositivo può produrre.

In entrambi i casi, è difficile stimare la gamma del dispositivo di input o dell'immagine, nonostante l'esistenza di una gamma di riferimenti o misurazioni. Nel primo problema, la gamma plausibile del dispositivo di input è inferiore alla gamma completa di scRGB. Nel secondo problema, la gamma di riferimenti della destinazione è inferiore alla gamma completa possibile del dispositivo di input.

Il terzo problema riguarda il mapping del tono. Sono stati proposti molti modelli di limiti di gamut che possono rappresentare in modo adeguato immagini pre-sottoposte a rendering usate nelle arti grafiche, ad esempio la catena di Montagne Fairchild GBD (Braun[97]) e il descrittore limite Di Segment Maxima di Morovi (Morbrun[98]). Ma questi modelli forniscono solo informazioni sugli estremi della gamma del dispositivo; sono informazioni mancanti su altri punti nel mapping tonale. Senza tali informazioni, gli GMA possono solo effettuare stime approssimative del mapping ottimale del tono. Peggio, questi modelli non forniscono alcun aiuto per l'intervallo dinamico esteso in scRGB e nelle immagini della fotocamera digitale.

Come si risolve questo problema nelle industrie fotografiche e videografiche? La fotocamera acquisisce un'immagine. Gli esperti potrebbero discutere della quantità di rendering che si verifica nel dispositivo di acquisizione; ma sono d'accordo che non è una quantità significativa. Entrambe le tecnologie non mappano un bianco diffuso in una scena acquisita al punto bianco del mezzo. Analogamente, non mappano il punto nero dalla scena al punto nero del mezzo. Il comportamento della pellicola fotografica è descritto nello spazio di densità usando una curva caratteristica, spesso chiamata curva Hurter e Driffield, o curva H&D. La curva mostra la densità della scena originale e la densità risultante sul film. La figura 18 mostra una curva H&D tipica. L'asse x rappresenta un aumento dell'esposizione del log. L'asse y rappresenta la densità sulla diapositiva. Cinque punti di riferimento sono contrassegnati sulla curva: nero senza dettaglio, che rappresenta la densità minima sul negativo; nero con dettaglio; scheda di riferimento mid-gray; bianco con dettaglio; e bianco senza dettagli. Si noti che c'è spazio tra nero senza dettagli (che rappresenta il nero del dispositivo) e nero con dettaglio (nero ombreggiatura). Analogamente, c'è spazio tra bianco con dettagli (bianco diffuso) e bianco senza dettagli (che rappresenta il bianco del dispositivo).

Diagram that shows the H and D curve for slide film.

Figura 18 : Curva H&D per il film di diapositiva

L'industria video fornisce "headroom" e "piè di pagina" nelle immagini. Nella specifica ITU 709 la luminanza (denominata Y) viene codificata in 8 bit, con un intervallo compreso tra 0 e 255. Tuttavia, il nero di riferimento è codificato a 15 e il bianco di riferimento è codificato come 235. Ciò lascia l'intervallo di codifica compreso tra 236 e 255 per rappresentare evidenziazioni speculari.

Il settore video presenta un sistema di ciclo essenzialmente chiuso. Anche se ci sono molti fornitori di apparecchiature diverse, i sistemi video sono basati su dispositivi di riferimento. Esiste una codifica standard per le immagini video. Non è necessario comunicare un limite di gamut con le immagini video, perché tutte le immagini vengono codificate per la riproduzione nello stesso dispositivo di riferimento. La pellicola è anche a ciclo chiuso perché non è necessario trasmettere dati intermedi tra componenti diversi. Si vuole una soluzione che consenta la riproduzione delle immagini da dispositivi con gamut variabili e che rappresenti sia scene pre-sottoposte a rendering che non sottoposte a rendering su output con gamut variabili.

Un quarto problema che il nuovo CTE deve risolvere è che i colori grigi visivamente prodotti da un dispositivo, ad esempio, quando rosso=verde=blu su un monitor, spesso non rientrano sull'asse neutro della CAM (quando il cromatico = 0,0). Ciò causa grandi difficoltà per gli GMA. Per fare in modo che gli GMA funzionino correttamente, è necessario regolare la descrizione della gamma del dispositivo e dei punti di input in modo che l'asse neutro del dispositivo cada sull'asse neutro dello spazio di aspetto. È necessario regolare i punti all'esterno dell'asse neutro in base a una quantità simile. In caso contrario, non è possibile eseguire gradazioni uniformi tramite l'immagine. Quando si esce dal GMA, si annulla questo mapping, rispetto all'asse neutro del dispositivo di output. Questo è definito "chiropratico" raddrizzamento dell'asse. Come un chiropratico, non solo raddrizzare lo scheletro (asse neutro), ma si regola il resto del corpo per muoversi insieme allo scheletro. Come un chiropratico, non si regola lo scheletro in base alla stessa quantità attraverso l'intero spazio. È invece possibile modificare diverse sezioni in modo diverso.

Diagram that shows the curvature of the device neutral axis relative to the CIECAM neutral axis.

Figura 19: Curvatura dell'asse neutro del dispositivo rispetto all'asse neutro CIECAM

Ciò che il nuovo CTE richiede è un modello di un limite di gamut che può essere usato per rappresentare immagini di origine sottoposte a rendering e non sottoposte a rendering, fornire informazioni sull'aspetto dei dispositivi neutri e fornire informazioni per le immagini di mapping dei toni con un intervallo di luminanza ampio.

Diagram that shows the three gamut shells.

Figura 20 : Tre shell di gamut

Il limite di gamut è costituito da tre shell che definiscono tre aree.

Nel nuovo CTE, la shell esterna della gamma si forma con uno scafo convesso realizzato da punti campione nella gamma di dispositivi. Uno scafo è formato prendendo un set di punti campione e circondandoli da una superficie. Uno scafo convesso ha la proprietà aggiuntiva di essere convesso ovunque. Pertanto, questo non è lo scafo più piccolo possibile che può essere adatto ai dati. Tuttavia, la sperimentazione ha dimostrato che l'adattamento dei punti di esempio troppo strettamente causa artefatti inapplicati nelle immagini, ad esempio la mancanza di ombreggiatura liscia. Lo scafo convesso sembra risolvere questi problemi.

Nell'algoritmo, i valori di aspetto colore vengono ottenuti per un set di punti campionati dal dispositivo. Per i monitor e le stampanti, i valori di aspetto dei colori vengono ottenuti visualizzando campioni e quindi misurandoli. È anche possibile creare un modello di dispositivo e quindi eseguire dati sintetici tramite il modello di dispositivo per stimare i valori misurati. I valori misurati vengono quindi convertiti dallo spazio colorimetrico (XYZ) allo spazio di aspetto (Jab) e lo scafo viene avvolto intorno ai punti.

Il punto chiave di questo algoritmo è che il punto bianco adottato usato nella conversione da colorimetrica a spazio di aspetto non deve essere il punto bianco del supporto. È invece possibile selezionare un punto più lontano all'interno della gamma e sull'asse neutro (o vicino). Tale punto avrà quindi un valore J pari a 100. I campioni con un valore Y misurato superiore al punto bianco adottato finiranno con un valore J maggiore di 100.

Se si posiziona il punto bianco diffuso della scena come punto bianco adottato per la conversione dello spazio dei colori, le evidenziazioni speculari nella scena verranno facilmente rilevate come avere un valore J maggiore di 100.

Poiché il modello di colore CIECAM02 si basa sul sistema visivo umano, dopo aver selezionato un bianco adottato, il livello di dominanza del punto nero (J = 0) viene determinato automaticamente dal modello. Se l'immagine di input ha un intervallo dinamico ampio, è possibile che siano presenti valori che eseguono il mapping a valori J inferiori a zero.

La figura 21 seguente mostra i dispositivi neutri in esecuzione attraverso il centro dei gamut plausibili e di riferimento.

Diagram that shows the device neutral axis added to gamut boundary.

Figura 21 : Asse neutro del dispositivo aggiunto al limite di gamut

Tutti i mapping di gamut comportano il ritaglio di un intervallo di input in un intervallo di output o la compressione della gamma di input per adattarsi all'interno della gamma di output. Gli algoritmi più complessi sono formati dalla compressione e dal ritaglio in direzioni diverse o dividendo la gamma in aree diverse e quindi eseguendo ritagli o compressione nelle diverse aree.

Il nuovo CTE estende questo concetto per supportare le aree di una possibile gamma, una gamma plausibile e una gamma di riferimenti e consente agli GMA di mapparli in modi diversi. Inoltre, gli GMA hanno informazioni sull'asse neutro del dispositivo. La discussione seguente illustra come gestire le situazioni in cui i gamuts e i riferimenti plausibili sono compressi l'uno sull'altro.

Diagram that shows the G M A with two un-collapsed gamut descriptors.

Figura 22 : GMA con due descrittori di gamut non compressi

Questo esempio può essere visualizzato se si esegue il mapping da un dispositivo di input, ad esempio una fotocamera o uno scanner caratterizzato da una destinazione riflettente, allo spazio scRGB. Qui i colori plausibili che sono più chiari del bianco di riferimento sono evidenziazioni speculari. In pratica, la caratterizzazione di una fotocamera con un bersaglio potrebbe non generare l'intera gamma di valori possibili nella fotocamera; tuttavia, evidenziazioni speculari e colori molto cromatici trovati nella natura sarebbe. Le destinazioni trasmissive hanno in genere una patch che rappresenta la densità minima possibile sul mezzo. Con tale destinazione, le evidenziazioni speculari rientrano nell'intervallo di destinazione. Il nero di riferimento per un bersaglio riflettente sarebbe l'inizio della regione nera dell'ombra. Ciò significa che è probabile che ci siano colori nelle ombre che sono più scuri del nero sul bersaglio. Se l'immagine contiene un sacco di contenuti interessanti in tale area, può essere utile conservare tale variazione tonale.

Diagram that shows the G M A with a collapsed destination gamut.

Figura 23 : GMA con gamma di destinazione compressa

La figura 23 mostra un possibile algoritmo di mapping di gamut quando la gamma di destinazione fornisce solo l'intervallo tra il bianco del dispositivo e il nero e non esistono colori possibili all'esterno di questa gamma. È probabile che ciò accada per i dispositivi di output tipici, ad esempio le stampanti. I colori possibili vengono mappati al bordo della gamma di destinazione. Ma manca una curva del tono per il dispositivo di output. Il GMA deve selezionare un punto neutro di luminanza inferiore da utilizzare come destinazione di mapping per il bianco di riferimento. Un algoritmo sofisticato può eseguire questa operazione istogramming le leggerezza nell'immagine di origine e vedere quanti rientrano nell'intervallo di previsto ma più leggero rispetto al bianco di riferimento. Maggiore è la leggerezza, maggiore è lo spazio necessario nel dispositivo di destinazione tra i punti mappati per le evidenziazioni speculari e il bianco di riferimento. Un algoritmo più semplice potrebbe scegliere una distanza arbitraria verso il basso della scala di leggerezza dal bianco del dispositivo, ad esempio il 5%. Un approccio simile si applica per il mapping del nero massimo e nero ombreggiatura.

Dopo aver generato la curva del tono di destinazione, è possibile eseguire il mapping in un metodo simile a quello usato nella figura 23 precedente. Tutti i punti nella curva del tono di destinazione rientrano nella gamma del dispositivo e tutti i punti nel mapping devono rientrare nella gamma del dispositivo.

Se si invertono le figure a sinistra e a destra e le direzioni delle frecce nella figura 23, è possibile descrivere il caso in cui l'immagine di origine ha solo una gamma di riferimenti e le tre gamut del dispositivo di output non sono compresse l'una sull'altra. Un esempio potrebbe essere il mapping da un monitor a scRGB. Anche in questo caso, il GMA deve sintetizzare i punti di controllo per i cinque punti sulla curva del tono per l'immagine di origine. Alcuni mapping potrebbero inserire tutti i punti della curva del tono all'interno della gamma di dispositivi scRGB, mentre altri mapping potrebbero usare più della gamma scRGB eseguendo il mapping del bianco diffuso al bianco di riferimento e consentendo al bianco speculare di eseguire il mapping a un valore più chiaro.

Infine, si ha il caso in cui entrambi i dispositivi hanno solo la gamma di riferimenti, ovvero il funzionamento della maggior parte degli algoritmi di mapping gamut. Per risolvere questo problema, è sufficiente eseguire il fallback agli algoritmi correnti. In alternativa, se si dispone di un modo ragionevole per determinare i cinque punti di riferimento per i dispositivi di origine e di destinazione, è possibile disporre di eseguire il mapping dei punti di riferimento.

I gamut dei dispositivi contengono più di cinque punti di riferimento sull'asse neutro. Questi rappresentano solo i limiti tra le aree potenziali nell'immagine. Tra ognuno dei punti di riferimento, è possibile usare una qualsiasi delle tecniche di mapping di gamut esistenti. È quindi possibile ritagliarsi l'intervallo di colori imprevisti e comprimere tutti i colori tra il bianco e il nero previsto oppure è possibile ritaglia tutti i colori all'esterno dell'intervallo di riferimento e comprimere all'interno di tale intervallo. Esistono molte possibilità, che possono essere implementate in diversi GMA. Inoltre, gli GMA possono comprimere e ritagliarsi in modi diversi. Tutte queste combinazioni sono trattate all'interno di questa invenzione.

Finora in questa discussione, la gamma è stata considerata come se fosse esclusivamente una funzione del dispositivo in cui è stata creata, acquisita o visualizzata l'immagine. Tuttavia, non c'è motivo per cui tutte le immagini per un dispositivo devono avere la stessa gamma. Gli GMA dipendono dai dati nel GBD. Se il descrittore viene modificato tra le immagini, non esiste alcun modo per sapere gli GMA. In particolare, se le immagini non hanno evidenziazioni speculari, gli GMA offrono prestazioni migliori se il descrittore di gamut non mostra che ci sono colori più chiari rispetto al bianco diffuso.

Nella nuova architettura CTE è possibile usare più di un GMA. L'uso di più GMA è intrinsecamente non definito. Ad esempio, se un dispositivo di acquisizione associa un GMA al suo "look and feel", tende a farlo con un gamut di destinazione "mirato". Lo stesso vale per i dispositivi di output e i gamut di origine "mirati". Il gamut sRGB è un gamut implicito comunemente mirato. Pertanto, è consigliabile usare un singolo GMA, se la prevedibilità è una priorità. Un singolo flusso di lavoro GMA deve essere l'impostazione predefinita per tutti i flussi di lavoro, in particolare per i flussi di lavoro consumer e prosumer. Anche se il mapping di gamut per la riproduzione preferita deve essere eseguito una sola volta, esistono istanze in cui sono inclusi più processi di mapping. Prima di tutto, per la correzione, si esegue un mapping preferito alla gamma del dispositivo di destinazione finale e quindi un rendering colorimetrico alla gamma del dispositivo di correzione. In secondo luogo, alcuni tipi di mapping vengono usati per modificare le caratteristiche dell'immagine, ma non sono inclusi per eseguire il mapping a una gamma di dispositivi, ad esempio regolando la curva del tono o la cromaticità. Se vengono usati più GMA, l'interfaccia di trasformazione accetta una matrice di mappe di gamut associate, ovvero mappe gamut inizializzate con una coppia di descrizioni dei limiti di gamut. Quando sono presenti più mappe di gamut, il limite di gamut di input per una mappa di gamut riuscita deve essere uguale al limite di gamut di output del predecessore.

La funzione limite di gamut del dispositivo accetta il motore del modello di dispositivo e i parametri analitici e deriva un limite di gamut del dispositivo a colori descritto come un elenco di vertici ordinato dello scafo convesso della gamma del dispositivo. L'elenco dei vertici ordinati viene archiviato in CIEJab. La struttura dell'elenco dei vertici ordinati è ottimizzata per l'accelerazione hardware di DirectX. Questo approccio ha molte soluzioni note (cercare "Convex hull DirectX" sul web e si ottengono ben oltre 100 riscontri). C'è anche un riferimento dal 1983 in questo argomento (Teoria grafica computer e applicazione, "Shiphulls, superfici b-spline e cadcam" pp. 34-49), con riferimenti che risalgono dal 1970 al 1982 sull'argomento.

È possibile usare due tecniche diverse per calcolare i triangoli nella shell di gamut. Per altri dispositivi diversi dai dispositivi RGB additivi, si calcola uno scafo convesso. È possibile valutare l'analisi del supporto dello scafo non convesso per altri dispositivi se si ha accesso diretto a tali dispositivi per convalidare l'affidabilità, le prestazioni e la fedeltà degli algoritmi. Si tratta di un processo noto che non richiede ulteriori descrizioni. La tecnica usata per i dispositivi RGB additivi è descritta di seguito.

I diversi GBD presentano vantaggi e svantaggi. La rappresentazione dello scafo convesso garantisce proprietà geometriche belle, ad esempio sezioni di tonalità convesse che forniscono un punto di intersezione univoco con un raggio che emana da un punto sull'asse neutro. Lo svantaggio della rappresentazione dello scafo convesso è anche la convessazione. È noto che molti dispositivi, in particolare i dispositivi di visualizzazione, hanno gamuts che non sono convesse. Se il gamut effettivo devia in modo significativo dal presupposto della convessazione, la rappresentazione dello scafo convesso sarebbe imprecisa, possibilmente nella misura in cui non rappresenta la realtà.

Dopo aver adottato un GBD che fornisce una rappresentazione ragionevolmente accurata della gamma effettiva, si verificano altri problemi, alcuni a causa del concetto stesso di sezione di tonalità. Ci sono almeno due situazioni patologiche. Nella figura 24 seguente, una gamma CRT dà origine a sezioni di tonalità con "isole". Nella figura 25, una gamma di stampanti dà origine a una sezione di tonalità con parte dell'asse neutro mancante. Le fette di tonalità patologiche non sono causate da limiti di gamut particolarmente patologici in questi casi. Sono causati dal concetto stesso di sezione di tonalità, perché (a) viene preso lungo la tonalità costante, e (b) richiede solo una metà del piano che corrisponde all'angolo di tonalità.

Diagram that shows a top view and side view of the 'curving in' in the blue hues.

Figura 24 : un tipico monitor CRT ha una gamma che mostra particolari "curving in" nelle tonalità blu. Se le sezioni di tonalità vengono prese all'interno di questo intervallo di tonalità, le isole isolate possono apparire nelle sezioni di tonalità.

Diagram of a gamut with a 'gap' in its neutral axis.

Figura 25 : una stampante può avere una gamma con "gap" nell'asse neutro. Quando viene presa una sezione di tonalità (che è solo una metà del piano), c'è un "rientro" nella parte del limite che è l'asse neutro. Questo può essere difficile da risolvere in modo algoritmico.

Per risolvere queste patologie, viene proposto un nuovo quadro che abbandona il concetto di sezione di tonalità utilizzata come punto di partenza. Il framework usa invece il set di "elementi linea limite" o linee che si trovano sul limite di gamut. Non forniscono necessariamente una visualizzazione geometrica coerente come le sezioni di tonalità, ma supportano tutte le operazioni comuni di gamut. Oltre a risolvere i problemi menzionati in precedenza, questo approccio suggerisce anche che la costruzione di fette di tonalità, anche quando è possibile, è dispendiosa dal calcolo.

Triangolazione del limite gamut

Il punto iniziale è un GBD costituito da una triangolazione del limite di gamut. I metodi noti di costruzione di GBD in genere forniscono tale triangolazione. Per la concretezza, un metodo di costruzione di GBD per i dispositivi additivi è descritto qui. Questi dispositivi includono monitor (basati sia su CRT che basati su LCD) e proiettori. La geometria semplice del cubo consente di introdurre un reticolo regolare sul cubo. I visi limite del cubo possono essere triangolati in diversi modi, ad esempio quello illustrato nella figura 26. L'architettura fornisce un modello di dispositivo per il dispositivo in modo che i valori colorimetrici dei punti reticolare possano essere ottenuti in modo algoritmico o che le misurazioni siano state effettuate direttamente per tali punti. L'architettura fornisce anche CIECAM02, in modo da poter presupporre che i dati iniziali siano già stati mappati nello spazio CIECAM02 Jab. Quindi ogni punto reticolare sui visi limite del cubo RGB ha un punto corrispondente nello spazio Jab. Le connessioni di punti che formano il set di triangoli nello spazio RGB provocano anche un set di triangoli nello spazio Jab. Questo set di triangoli forma una triangolazione ragionevole del limite di gamut se (a) il reticolo sul cubo RGB è sufficientemente fine e (b) la trasformazione dallo spazio del dispositivo allo spazio dei colori uniforme è topologicamente ben comportata; ovvero mappa il limite al limite e non trasforma la gamma all'interno in modo che i punti interni diventino punti limite.

Diagram that shows a simple method to triangluate the gamut boundary of a device with R G B as its device space.

Figura 26 : un metodo semplice per triangolare il limite di gamma di un dispositivo con RGB come spazio del dispositivo

Elementi linea limite

Il concetto centrale di questo framework è il concetto di elementi linea limite; un set di segmenti di linea che (a) si trovano sul limite di gamut e (b) si trovano su un piano. In questo caso, l'aereo è un piano di tonalità. Ogni segmento di linea è il risultato dell'intersecazione del piano con un triangolo di limite di gamut. Anche se molti ricercatori hanno usato la costruzione di intersecare un piano con triangoli limite, in genere analizzano la relazione tra questi segmenti di linea e tentano di costruire un oggetto geometrico coerente fuori dai segmenti di linea. Sono stati concepiti diversi algoritmi per seguire questi segmenti di linea uno dopo l'altro fino a quando non viene ottenuta un'intera sezione di tonalità, e molti tentativi sono stati effettuati per velocizzare il processo di ricerca.

Questo approccio è diverso. Si interseca il piano con i triangoli per ottenere i segmenti di linea. Si considerino quindi questi segmenti di linea come oggetti concettuali di base . È necessario analizzare la relazione tra i segmenti di linea; non è necessario sapere come sono interconnessi tra loro. Questo punto di vista risolve il problema della sezione di tonalità con isole. Gli approcci noti che tentano di costruire una sezione di tonalità presuppongono che, se si inizia con un segmento di linea e lo segue al segmento di riga successivo e così via; alla fine riporta al punto iniziale, a quel punto verrà costruita un'intera sezione di tonalità. Purtroppo, questo approccio mancherebbe l'isola (e nel peggiore scenario, il continente). Non insistendo sull'ottenimento di un quadro geometrico coerente; ovvero, una sezione di tonalità, è possibile gestire il problema dell'isola senza sforzo. Un'altra differenza importante in questo approccio è che, per velocizzare la costruzione di segmenti di linea, usa un "filtro triangolo". Il filtro triangolo genera alcuni triangoli che sicuramente non produrranno segmenti di linea utili nell'operazione di gamut corrente. Poiché l'intersecazione di un triangolo con il piano è costoso a livello di calcolo, ciò migliora la velocità. Un effetto collaterale è che non è possibile costruire una sezione di tonalità perché alcuni segmenti di linea sarebbero mancanti a causa del filtro dei triangoli.

Operazione gamut: CheckGamut

L'esempio seguente spiega come funziona il framework e come viene eseguito CheckGamut, ovvero l'operazione di controllo se un colore è in gamut.

Il framework generale è illustrato nella figura 27 seguente. Esistono vari componenti. I componenti etichettati in corsivo sono componenti che possono essere diversi nell'implementazione a seconda dell'operazione di gamut in questione. Gli altri componenti sono invarianti in tutte le operazioni di gamut. Per iniziare, Input è un set di attributi di colore. Nel caso di CheckGamut, si tratta del colore della query. Nella figura 27 e nella discussione seguente si presuppone che l'angolo di tonalità sia tra gli attributi del colore di input o che possa essere ottenuto da essi. Questo è chiaramente il caso se l'input è l'intero punto di colore, in Jab o JCh, da cui è possibile calcolare l'angolo di tonalità. Si noti che l'angolo di tonalità è necessario solo perché vengono usati piani di tonalità. A seconda dell'operazione di gamut in questione, potrebbe non essere necessario usare il piano hue. Ad esempio, nella costruzione della routine CheckGamut, è possibile usare piani di costante J. Si tratta di una generalità che non verrà usata o discussa ulteriormente; ma potrebbe essere utile ricordare questa flessibilità della metodologia per supportare altre operazioni di gamut quando il piano hue potrebbe non essere la scelta migliore.

Diagram that shows the flow to support gamut operations.

Figura 27 : Framework per supportare le operazioni di gamut

L'angolo di tonalità, ottenuto direttamente dagli input o calcolati dagli input, viene usato per inizializzare il piano tonalità con etichetta Full Hue Plane nella figura. "Pieno" è sottolineato perché questo è il piano completo, non solo il mezzo piano contenente la tonalità. Il piano completo contiene sia l'angolo di tonalità di input che l'angolo di 180 gradi opposto. La funzionalità chiave del piano hue è la funzione Intersect, illustrata nella sottosezione seguente, Full Hue Plane: Intersect. Si supponga che il GBD sia già stato costruito e che sia disponibile il set di triangoli limite gamut. Intersecare i triangoli che sono sopravvissuti al filtro triangolo con il piano di tonalità usando Intersect. Il componente Filtro triangoli è etichettato in corsivo, il che significa che il componente varia nell'implementazione per diverse operazioni di gamut. Il filtro triangolo per CheckGamut è illustrato nella sezione Operazione gamut: CheckGamut (continua). Il risultato dell'intersecazione di un triangolo con il piano di tonalità è vuoto o un elemento linea limite, ovvero una coppia di punti distinti. Se il risultato non è vuoto, viene passato al processore di elementi line, che esegue di nuovo operazioni diverse a seconda dell'operazione di gamut. Line Element Processor aggiorna la struttura dei dati interna, Internal Processed Data , il cui contenuto o layout dipende anche dall'operazione di gamut. In genere, i dati elaborati interni contengono la "risposta" al problema, che viene continuamente aggiornato con ogni nuovo elemento linea limite trovato. Quando tutti gli elementi linea limite sono stati elaborati, la risposta è stata trovata. Rimane per accedervi tramite l'adattatore di output. Poiché i dati elaborati interni sono specifici dell'operazione di gamut, anche l'adattatore di output è specifico dell'operazione di gamut.

Piano hue completo: interseca

La funzione Intersect calcola l'intersezione del piano di tonalità e un triangolo. Così semplice come suona, questa funzione è importante per due motivi.

Prima di tutto, intersecare ogni bordo del triangolo con il piano potrebbe produrre tre punti di intersezione, una situazione geometricamente impossibile. Il motivo per cui questo problema può verificarsi nel calcolo è che, quando i calcoli vengono eseguiti in virgola mobile, ad esempio, formato I edizione Enterprise E, ci sono incertezze o "rumore numerico", in ogni passaggio che influisce sulla conclusione di se un bordo interseca il piano. Quando il piano interseca i bordi in una situazione di near-miss, i punti di intersezione sono vicini tra loro e la determinazione se un punto di intersezione si trova all'interno del bordo è casuale. Anche se il rumore nei valori numerici dei punti è piccolo, la conclusione qualitativa che ci sono più di due punti di intersezione è geometricamente impossibile e difficile da gestire correttamente nell'algoritmo.

In secondo luogo, questa funzione si trova nel ciclo critico per ogni bordo di ogni triangolo filtrato, quindi è importante ottimizzarne il più possibile l'efficienza.

Per risolvere il primo problema Di rumore numerico, eseguire i calcoli in numeri interi. Per risolvere il secondo problema relativo all'ottimizzazione dell'efficienza, memorizzare nella cache l'attributo più usato di ogni vertice o il "prodotto punto" associato a ogni vertice. Il passaggio in numeri interi è un modo tipico per garantire la coerenza geometrica. L'idea di base è che se dovete quantizzare, fatelo all'inizio. I calcoli successivi possono quindi essere eseguiti in interi e se gli interi sono sufficientemente ampi in modo che non vi sia alcun rischio di overflow, i calcoli possono essere eseguiti con precisione infinita. La funzione di quantizzazione seguente è utile a questo scopo.

ScaleAndTruncate(x) = Parte intera di x*10000

Il fattore di ridimensionamento 10000 indica che il numero a virgola mobile di input ha quattro cifre decimali, sufficientemente precise per questa applicazione. A seconda dell'intervallo di valori dello spazio di aspetto dei colori, si vuole scegliere un tipo integer con bit sufficientemente largo per contenere i calcoli intermedi. Nella maggior parte degli spazi di aspetto dei colori, l'intervallo di ogni coordinata è compreso tra -1.000 e 1.000. La coordinata quantizzata ha un valore assoluto massimo possibile pari a 1.000*10.000 = 10.000.000. Come si vedrà, la quantità intermedia è un prodotto punto, che è una somma di due prodotti di coordinate, quindi ha un valore assoluto massimo possibile pari a 2*(10.000.000) ** = 2?10 ₁₄. Il numero di bit necessari è log ?" (2?10 ₁₄ ) = 47,51. Una scelta pratica per il tipo integer è quindi integer a 64 bit.

Per garantire che l'intersecazione di un piano con un triangolo restituisca sempre un set vuoto o un set di due punti, è necessario considerare il triangolo nel suo complesso, non come singoli bordi del triangolo separatamente. Per comprendere la situazione geometrica, considerare le "distanze firmate" dei vertici del triangolo dal piano di tonalità. Non calcolare direttamente queste distanze firmate; calcolare invece i prodotti punto dei vettori di posizione dei vertici con il vettore normalizzato quantizzato sul piano. In particolare, durante l'inizializzazione del piano hue, il vettore normalizzato quantizzato viene calcolato come segue.

NormalVector = (ScaleAndTruncate(-sin(hue)), ScaleAndTruncate(cos(hue)))

Si noti che questo vettore è un vettore bidimensionale. È possibile usare un vettore bidimensionale perché il piano di tonalità è verticale, quindi il terzo componente del vettore normale è sempre zero. Inoltre, viene inizializzata una tabella di ricerca di prodotti a punti per avere una voce per ogni vertice dai triangoli limite gamut e il prodotto punto corrispondente impostato su un valore non valido.

Durante un'operazione di intersecazione del piano di tonalità con un triangolo, il prodotto punto di ogni vertice del triangolo viene cercato. Se il valore nella tabella di ricerca è il valore non valido, il prodotto punto viene calcolato usando l'espressione seguente.

NormalVector.a*ScaleAndTruncate(vertex.a) + NormalVector.b*ScaleAndTruncate(vertex.b)

Anche in questo caso, il componente J del vertice non viene mai usato, perché il vettore normale è orizzontale. Questo prodotto punto viene quindi salvato nella tabella di ricerca in modo che non sia necessario calcolare di nuovo se il prodotto punto del vertice viene sottoposto a query in un secondo momento.

La memorizzazione nella cache consente di determinare rapidamente se un bordo interseca il piano, dopo che i prodotti punto vengono tabulati nella tabella di ricerca, che viene compilato progressivamente durante l'elaborazione dei vertici.

Diagram that shows the intersection of the hue plane with a triangle.

Figura 28 : Intersecare il piano di tonalità con un triangolo

Affinché il triangolo nella figura 28 interseci il piano di tonalità in un segmento di linea non degenerato, i prodotti punto dei vertici devono trovarsi in uno dei modelli seguenti, se ordinati in ordine crescente.

0,0,+; -,0,0; -,0,+; -,-,+; -,+,+

Un punto finale del segmento di linea si verifica quando il piano viene intersecato da un bordo con vertici con segni diversi nel prodotto punto. Se il segno è zero, il vertice si trova direttamente sul piano e l'intersezione del bordo con il piano è il vertice stesso. Si noti anche che i casi 0,0,0; -,-,0; 0,+,+ non vengono segnalati. Il primo caso (0,0,0) indica che l'intero triangolo si trova sull'aereo. Questo non viene segnalato perché ogni bordo del triangolo deve appartenere a un triangolo adiacente che non si trova interamente sul piano. Il bordo verrà segnalato quando il triangolo viene considerato. Gli altri due casi (-,-,0 e 0,+,+) corrispondono alla configurazione geometrica che il triangolo tocca il piano in un vertice. Questi casi non vengono segnalati perché non generano un segmento di linea non degenerato.

L'algoritmo precedente determina quando calcolare un'intersezione tra un bordo del triangolo e il piano di tonalità. Dopo aver determinato un bordo, l'intersezione viene calcolata usando equazioni parametriche. Se uno dei prodotti punto è zero, l'intersezione è il vertice stesso, quindi non è necessario alcun calcolo. Supponendo che entrambi i prodotti punto dei vertici del bordo siano diversi da zero, vertex1 è il vertice con punto negativo dot product dotProduct1 e vertex2 è il vertice con punto positivo dot product dotProduct2. Questo ordine è importante per garantire che il punto di intersezione calcolato non dipende dalla modalità di visualizzazione dell'ordinamento dei vertici nella rappresentazione del bordo. Il concetto geometrico del bordo è simmetrico rispetto ai vertici. L'aspetto computazionale dell'uso di equazioni parametriche del bordo introduce l'asimmetria (scelta del vertice iniziale), che può dare un punto di intersezione leggermente diverso a causa del rumore numerico e del condizionamento delle equazioni lineari da risolvere. Detto questo, il punto di intersezione, l'intersezione, è dato dal seguente.

t = dotProduct1/(dotProduct1 - dotProduct2)

Intersezione. J = vertex1. J + t * (vertice2. J - vertice1. J)

intersezione.a = vertex1.a + t * (vertex2.a - vertex1.a)

intersection.b = vertex1.b + t * (vertex2.b - vertex1.b)

Operazione gamut: CheckGamut (continua)

L'algoritmo geometrico di base utilizzato per il controllo della gamma consiste nel contare il numero di attraversamenti di raggi. Per un determinato punto di query, considerare un raggio che inizia con il punto di query e puntando verso l'alto (direzione J). Contare il numero di volte in cui questo raggio supera il limite di gamut. Se questo numero è pari, il punto di query è fuori gamma. Se questo numero è dispari, il punto si trova all'interno. In linea di principio, questo algoritmo può essere implementato in 3D, in genere è afflitto da difficoltà causate da situazioni degenerate, ad esempio il raggio che giace (in parte) su un triangolo limite o la degeneracia dimensionale inferiore, ad esempio il raggio che giace (in parte) su un bordo di un triangolo limite. Anche in 2D, devi affrontare queste situazioni degenerate; ma il problema è più semplice ed è stato risolto in modo soddisfacente. Vedere [O'Rourke].

Per un determinato punto di input Jab, determinare l'angolo di tonalità h come indicato di seguito.

h = atan(b/a),

Inizializza il piano tonalità e quindi determina gli elementi linea limite corrispondenti a questo piano di tonalità. Poiché gli elementi linea limite sono rilevanti solo se intersecano il raggio verso l'alto, impostare un filtro triangolo per rimuovere i triangoli che forniscono elementi di linea che sicuramente non intersecano il raggio verso l'alto. In questo caso, prendere in considerazione il rettangolo di selezione del triangolo. Il raggio verso l'alto non intersecerà il triangolo se il punto di query si trova all'esterno dell'"ombreggiatura" del rettangolo di selezione se una sorgente di luce era direttamente sopra. Gonfiare leggermente questo con una tolleranza pre-fissa per consentire il rumore numerico in modo da non buttare inavvertitamente triangoli che potrebbero dare elementi di linea utili. Il risultato è il cilindro rettangolare semi infinito illustrato nella figura 29. Verificare se il punto di query è all'interno o all'esterno di questo cilindro può essere implementato in modo efficiente usando semplici disuguaglianze.

Shows the triangle filter for CheckGamut.

Figura 29 : Filtro triangoli per CheckGamut

CheckGamut include tre componenti specifici dell'operazione di gamut: dati elaborati interni, processore di elementi line e adattatore di output. I dati elaborati interni sono un elenco di elementi riga elaborati da Line Element Processor. In questo caso, Line Element Processor aggiunge semplicemente un elemento linea all'elenco. La struttura di dati interna per i dati elaborati interni può essere un elenco collegato o una matrice che può aumentare di dimensioni.

L'adattatore di output è un modulo che accede all'elenco di elementi di linea, determina se un elemento di linea attraversa il raggio verso l'alto (conteggio 1) o meno (conteggio 0). Sommando tutti questi conteggi si ottiene un conteggio totale. L'adattatore di output restituisce in definitiva una risposta "sì" (in-gamut) o "no" (out-of-gamut), a seconda che il conteggio totale sia dispari o pari. Il passaggio in cui si determina se un elemento linea attraversa il raggio verso l'alto merita un po ' di attenzione perché questo è dove si verifica il problema della degeneracy e anche il problema di over-counting si verifica. Dopo [O'Rourke], affinché un elemento di linea attraversi il raggio, il punto finale destro (il punto finale con cromatica più grande) deve essere strettamente sul lato destro del raggio. Ciò garantisce che, se un punto finale si trova esattamente sul raggio, viene conteggiato solo una volta. La stessa regola risolve anche la situazione degenerata in cui l'elemento linea si trova esattamente sul raggio. Non si incrementa il conteggio per questo elemento di riga.

La figura 30 mostra gli elementi di riga risultanti di un gamut di esempio con il punto di query in varie posizioni.

Diagram that shows the resulting line elements of a sample gamut with the query point in various positions.

Figura 30 : Funzionamento di CheckGamut

Mapping minimo della gamma di differenze di colore

Il mapping minimo della gamma di differenze di colore, MinDEMap, ha una specifica semplice: se un colore è in gamut, non eseguire alcuna operazione. Se un colore è fuori gamma, proiettarlo al punto "più vicino" sul limite di gamut. La parola chiave "più vicina" non è ben definita fino a quando non si specifica l'equazione della differenza di colore da usare. In pratica, per semplificare e velocizzare il calcolo, la distanza euclidea dello spazio di aspetto colore scelto, o una variante di esso, viene usata come metrica della differenza di colore. Il vantaggio della metrica euclidea è che è compatibile con il prodotto punto dello spazio, che consente di usare l'algebra lineare. In dettaglio, se nello spazio è definito un "prodotto punto", è possibile definire una distanza come radice quadrata del prodotto punto del vettore di differenza con se stesso. Un prodotto punto può in genere essere definito da una matrice definita positiva 3x3 A.

u?v = u T Av

dove il lato destro è il solito moltiplicazione della matrice. Se A è la matrice di identità, il prodotto punto standard viene recuperato. In pratica, se Jab è lo spazio dei colori, non si vuole combinare i componenti, quindi è possibile usare una matrice diagonale diversa dalla matrice di identità. Inoltre, è possibile mantenere invariata la scala su e b in modo che la misura della tonalità venga mantenuta. Quindi una variante utile del prodotto euclideo standard è il seguente.

w J (componente J di te)(componente J di v) + (componente di te)(un componente di v) + (componente b di te)(b componente di v)

dove w J è un numero positivo. Un'ulteriore variante consiste nel consentire a w J di variare con il punto di query di input:

w J\ = w J (queryPoint)

Il risultato finale è una misura della distanza asimmetrica rispetto ai due punti e con pesi relativi diversi su leggerezza e cromatica o tonalità, in quanto il punto di query di input varia. Questo è conforme ad alcune osservazioni sulla percezione del colore umano che le differenze di colore non sono ponderate equamente in tutte le dimensioni. Si è scoperto che le persone sono meno sensibili alle differenze di leggerezza rispetto alle differenze di tonalità e cromatica.

La funzione di peso seguente è utile.

w J = k ₁ (C - C mₐₓ ) n

dove k geografico = 1, k ₁ = 0,75/(C mₐₓ ) n, C mₐₓ = 100, n = 2 e C è il più piccolo del punto di query e C mₐₓ.

in modo che un peso di 0,25 viene messo sul termine J quando chroma è zero, e un peso di 1 quando chroma è 100. La tendenza a mettere meno peso su J quando la cromatica è piccola e più peso su J quando la cromatica è grande segue l'utilizzo consigliato per CMC e CIEDE2000.

Graph that shows the weight function on the J component of the metric.

Figura 31 : Funzione di peso nel componente J della metrica

Usare lo spazio Jab per l'esempio seguente. È impegnativo dal punto di calcolo cercare in tutti i triangoli limite per determinare il punto più vicino nella metrica euclidea. Di seguito è riportato un approccio semplice per rendere questo processo il più efficiente possibile, senza introdurre presupposti aggiuntivi che possono accelerare il processo, ma finiscono anche in una risposta approssimativa. In primo luogo, è necessario comprendere la procedura geometrica di proiettare un punto sul triangolo specificato. Qui viene fornita una descrizione.

Viene prima eseguita una proiezione ortogonale sul piano infinito contenente il triangolo. La distanza più breve del punto di query dal piano può essere determinata in due passaggi.

(a) Calcolare il vettore normale unità nel triangolo.

(b) Calcolare il prodotto punto del vettore normale unità e un vettore formato dal punto di query e un punto sul triangolo, ovvero uno dei relativi vertici. Poiché il vettore normale ha una lunghezza unità, il valore assoluto di questo prodotto punto corrisponde alla distanza del punto di query dal piano.

Il punto proiettato potrebbe non essere la risposta, perché potrebbe trovarsi all'esterno del triangolo. Quindi, devi prima eseguire un controllo. Il calcolo equivale a calcolare le coordinate barycentriche del punto proiettato rispetto al triangolo. Se il punto proiettato è determinato a trovarsi all'interno del triangolo, è la risposta. In caso contrario, il punto più vicino viene acquisito su uno dei bordi del triangolo. Eseguire una ricerca su ognuno dei tre bordi. Determinare la proiezione del punto di query su un bordo è un processo simile alla proiezione nel triangolo, ma una dimensione inferiore. Viene innanzitutto calcolata una proiezione ortogonale. Se il punto proiettato si trova sul bordo, è la risposta. In caso contrario, il punto più vicino viene acquisito su uno dei due punti finali. Eseguire una ricerca sui due punti finali; ovvero calcolare la distanza del punto di query da ognuna di esse e confrontare quella più piccola.

Un esame attento rivela che ci sono molte ricerche ripetute quando si passa attraverso tutti i triangoli perché un bordo è sempre condiviso da due triangoli, e un vertice condiviso da almeno tre archi. Inoltre, non sei molto interessato a trovare il punto più vicino a un particolare triangolo; invece si è interessati a trovare il punto più vicino all'intero limite di gamut. Tuttavia, un particolare triangolo sarebbe quello in cui si ottiene questo. Esistono due strategie che è possibile usare per velocizzare la ricerca.

Strategia I. Ogni vertice verrà elaborato al massimo una volta. Ogni arco verrà elaborato al massimo una volta.

Strategia II. In qualsiasi momento della ricerca, si ha un candidato migliore con la distanza migliore corrispondente. Se è possibile determinare, con un rapido controllo, che un triangolo non è in grado di dare una distanza migliore, non è necessario continuare ulteriormente il calcolo. Non è necessario il punto e la distanza più vicini per questo triangolo.

Diagram that shows the flow of the Minimum DE Mapping.

Figura 32 : Schemi di mapping DE minimo

La figura 32 mostra il flusso generale della logica per la mappa di gamut MinDEMap. Per un punto di query, la funzione CheckGamut viene prima richiamata. Se il punto è in-gamut, la mappa è no-op. Se il punto è fuori gamma, chiamare ProjectPointToBoundary. Passare ora alla figura 33. A questo punto, si presuppone che siano stati calcolati i valori seguenti.

(a) Unità di vettore normale per ogni triangolo limite gamut rispetto al prodotto punto standard.

(b) Elenco vertici ed elenco di bordi, oltre all'elenco di triangoli.

Diagram that shows the 'ProjectPointToBoundary' routine.

Figura 33 : Routine ProjectPointToBoundary

Tutti questi sono un sovraccarico costante e avrebbero ridotto i costi se vengono effettuate query sufficienti per questo limite di gamut. In genere, questo è il caso in cui si crea una trasformazione LUT da un dispositivo a un altro, in cui sono presenti solo due gamut fissi e la trasformazione LUT viene eseguita attraverso punti nella griglia campionata uniformemente. È possibile pre-calcolare i vettori normali rispetto al prodotto punto standard, anche se la nozione di perpendicularità sarà basata sul prodotto punto ponderato, che dipende dal punto di query come illustrato in precedenza. Il motivo è che un vettore normale rispetto al prodotto punto ponderato può essere ottenuto facilmente dal vettore normale rispetto al prodotto punto standard. Se n ₀ è un vettore normale rispetto al prodotto punto standard, allora

n = (J-component di n ₀ /w J, a-component di n ₀, b-component di n ₀ )

è normale per il triangolo rispetto al prodotto punto ponderato. A causa di questa relazione, è comunque utile pre-calcolare n ₀ anche se deve essere regolato in base al punto di query.

La routine ProjectPointToBoundary inizia reimpostando la "cronologia elaborata" dei vertici e degli archi. Si tratta di tabelle di flag BOOLEAN che rilevano se un vertice o un bordo è stato visitato in precedenza. Reimposta inoltre la variabile ShortestDistance su "INFINITY", ovvero il valore massimo codificato nel sistema numerico a virgola mobile usato. Viene quindi eseguito attraverso un ciclo, cercando il punto più vicino da ogni triangolo usando la chiamata ProcessTriangle. ProcessTriangle è la routine per aggiornare la variabile ShortestDistance ed è chiaramente nel ciclo critico. Un'ottimizzazione consiste nell'arrestarsi quando il risultato è sufficiente. Dopo ogni chiamata a ProcessTriangle, viene esaminata la variabile ShortestDistance. Se soddisfa una soglia predefinita, è possibile arrestarsi. La soglia predefinita dipende dallo spazio dei colori usato e dall'accuratezza richiesta del sistema di imaging dei colori. Per un'applicazione tipica, non si vuole eseguire operazioni inutili se la differenza di colore è minore di quella che può essere rilevata dalla visione umana. Per CIECAM02, questa differenza di colore è 1. Usare un valore soglia pari a 0,005 nell'implementazione, tuttavia, per mantenere la precisione dei calcoli, perché questo potrebbe essere solo un passaggio intermedio in una catena di trasformazioni.

ProcessTriangle implementa la strategia II precedente. Ottenere un vettore normale dal vettore normale dell'unità pre-calcolata al triangolo rispetto al prodotto punto standard, calcola la distanza del punto di query al piano infinito contenente il triangolo formando il prodotto punto del vettore normale unità e queryVector, il vettore da uno dei vertici del triangolo, vertex1, al punto di query, queryPoint.

queryVector = queryPoint - vertex1

distance = | normalVector * queryVector |/||normalVector||

Si tratta di un calcolo relativamente economico e la distanza è necessaria per eseguire ulteriori calcoli. Se questa distanza non è inferiore alla distanza migliore corrente, ShortestDistance, questo triangolo non produrrà una distanza migliore, perché non darà una distanza migliore rispetto al piano che lo contiene. In questo caso, si torna al ciclo del triangolo. Se la distanza è inferiore a ShortestDistance, potenzialmente si ha un punto più vicino, se questo punto si trova all'interno del triangolo. Per determinare questo, è necessario eseguire alcuni calcoli "difficili" (anche se nulla oltre l'algebra lineare). Se gli altri due vertici del triangolo sono vertex2 e vertex3, formare i vettori di base firstBasisVector e secondBasisVector.

firstBasisVector = vertex2 - vertex1

secondBasisVector = vertex3 - vertex1

Usare il seguente sistema lineare di equazioni per risolvere i dati sconosciuti e v.

firstBasisVector * queryVector = (firstBasisVector * firstBasisVector)u + (firstBasisVector * secondBasisVector)v

secondBasisVector * queryVector = (secondBasisVector * firstBasisVector)u + (secondBasisVector * secondBasisVector)v

e le condizioni per il punto proiettato che si trovano all'interno del triangolo sono:

0 ≤ u ≤ 1, 0 ≤ v ≤ 1 e si + v ≤ 1

Dopo questo calcolo, se viene determinato che il punto proiettato si trova all'interno del triangolo, si è trovato un nuovo punto più vicino; la distanza calcolata all'inizio è la nuova distanza più breve. In questo caso, aggiornare le variabili ShortestDistance e ClosestPoint. Se il punto proiettato si trova all'esterno del triangolo, si potrebbe trovare un punto più vicino su uno dei suoi bordi. È quindi possibile chiamare la routine ProcessEdge su ognuno dei tre bordi.

Diagram that shows the flow of the ProcessEdge and ProcessVertex routines.

Figura 34 : Routine ProcessEdge e ProcessVertex

La routine ProcessEdge implementa la strategia I, illustrata nella figura 34. ProcessEdge inizia controllando se il bordo è stato elaborato prima. In tal caso, non viene eseguita alcuna ulteriore azione. In caso contrario, procede per calcolare la proiezione ortogonale del punto di query sulla linea infinita contenente il bordo. L'algebra lineare coinvolta nel calcolo è simile alle equazioni di triangolo precedenti. Tuttavia, il calcolo è più semplice, non è descritto qui. Se il punto proiettato si trova all'interno del bordo, si trova la distanza del punto proiettato dal punto di query. Se questa distanza è inferiore a ShortestDistance, è stato trovato un nuovo punto più vicino. Aggiornare sia ShortestDistance che ClosestPoint. Se il punto proiettato si trova all'esterno del bordo, chiamare ProcessVertex sui due punti finali. Prima di restituire il controllo, aggiornare la cronologia dei bordi in modo che questo bordo sia contrassegnato come "PROCES edizione Standard D".

Infine, si assegna una descrizione di ProcessVertex. La routine ProjectVertex implementa anche Strategy I e gestisce una tabella della cronologia dei vertici. Come illustrato nella figura 34, verifica innanzitutto se il vertice è stato elaborato in precedenza. In tal caso, non viene eseguita alcuna ulteriore azione. In caso contrario, procede per calcolare la distanza del vertice dal punto di query. Se la distanza è inferiore a ShortestDistance, aggiornare sia ShortestDistance che ClosestPoint. Alla fine aggiorna la cronologia dei vertici in modo che questo vertice sia contrassegnato come "PROCES edizione Standard D".

Quando il ciclo di controllo esterno ha esaurito tutti i triangoli o è stato chiuso prima che sia stata raggiunta la soglia della differenza di colore, si accede alla variabile ClosestPoint. Questo è il risultato di MinDEMap. Il chiamante può anche recuperare ShortestDistance se si è interessati alla distanza del colore mappato dal colore della query.

Sfumatura smussante

Diagram that shows two top views of hue smoothing, the original on top and the hue smoothed on the bottom.

Figura 35 : Smussamento tonalità

Si verifica un problema con le operazioni vincolate dalle tonalità; ovvero, l'operazione considera solo le variabili all'interno di un piano hue. La figura 35 mostra un esempio di una gamma che mostra sezioni di tonalità "discontinue" nelle tonalità blu. All'interno di questo intervallo di tonalità, per alcuni angoli di tonalità, il limite della gamma è tangente al piano di tonalità. In effetti, ciò provoca una modifica nella struttura topologica delle sezioni di tonalità. Nell'esempio illustrato, man mano che il piano di tonalità si estende su questa gamma di tonalità, emerge e sommerse un "isola". Questa modifica nella topologia causerà la discontinuità di operazioni specifiche di tonalità. Ad esempio, il cuspide a tonalità fissa cambierà bruscamente man mano che l'angolo di tonalità cambia in questo intervallo.

C'è un motivo di scienza dei colori perché è consigliabile preservare la tonalità in determinate operazioni. Per risolvere il problema precedente, i triangoli di contorno gamut originali devono essere "smussati". In generale, una sfumatura di un set di triangoli limite gamut è un set di triangoli in modo che (a) formi il limite di un nuovo "gamut", che potrebbe non corrispondere alla gamma effettiva del dispositivo, e che contiene la gamma definita dal set originale di triangoli; e (b) i triangoli nel nuovo set sono delimitati dall'essere paralleli ai piani di tonalità.

Un modo pratico per ottenere un set di triangoli smussato di tonalità consiste nell'assumere lo scafo convesso dei vertici originali. Come illustrato nella figura 35, le sezioni di tonalità dello scafo convesso variano uniformemente nell'intervallo di tonalità problematico senza un improvviso cambiamento nella topologia.

Impostazione di primarie e repliche secondarie nella descrizione del limite gamut

Alcuni metodi di mapping di gamut, ad esempio HueMap, dipendono dalla posizione delle primarie e dei database secondari del dispositivo. Per i dispositivi additivi, le primarie sono rosse, verdi e blu (R, G e B); e i secondari sono ciano, magenta e giallo (C, M e Y). Per i dispositivi sottrazione, i primari sono C, M e Y; e i database secondari sono R, G e B. Il GBD tiene traccia di tutti e sei i valori, più bianco e nero (W e K), in una matrice di valori di colore Jab. Questi valori vengono impostati nella descrizione del limite di gamut al momento della creazione. Per i dispositivi di output, le primarie possono essere determinate eseguendo combinazioni di valori di controllo del dispositivo tramite il modello di dispositivo. Per i dispositivi di acquisizione, questo approccio non è adatto per la creazione del GBD di riferimento, perché è quasi impossibile acquisire un'immagine che restituisce un valore di dispositivo puro completamente saturo, ad esempio (0,0, 0,0, 1,0). I profili di dispositivo WCS contengono gli indici delle primarie nella destinazione di acquisizione. Poiché questi valori non sono contenuti in un profilo ICC, usare i valori misurati da una destinazione scanner tipica dopo la conversione a Jab, rispetto alle condizioni di visualizzazione ICC.

Impostazione dell'asse neutro nella descrizione del limite gamut

I metodi di mapping della gamma HueMap e Relativi MinCD usano l'asse neutro del dispositivo per l'raddrizzamento. Per i dispositivi di output di base, l'asse neutro può essere determinato eseguendo valori neutrali del dispositivo (R=G=B o C=M=Y) tramite il metodo DeviceToColorimetric e quindi tramite il metodo ColorimetricToAppearance dell'oggetto CIECAM02. Tuttavia, i dispositivi di acquisizione non restituiscono sempre un valore neutro del dispositivo quando viene visualizzato un campione neutro. Questo è particolarmente vero quando l'illuminazione ambientale non è perfettamente neutra. I profili di dispositivo WCS contengono gli indici dei campioni neutri nella destinazione. Usare questi esempi per impostare l'asse neutro. Poiché queste informazioni non sono disponibili per i profili ICC, è necessario usare lo stesso metodo usato per i dispositivi di output; eseguire campioni neutrali del dispositivo tramite il metodo DeviceToColorimetric e quindi accoppiare i valori di input e i risultati colorimetrici.

Concetti di base sulla gestione dei colori

Schemi e algoritmi di Sistema colori Windows