Freigeben über


WCS-Transformationserstellungsalgorithmen

Erstellen von Transformationen

 

Sequenzielle Transformationsausführung

 

Erstellen optimierter Transformationen

 

ICCProfileFromWCSProfile

 

Black Preservation und Black Generation

 

Überprüfen des Gamuts

Erstellen von Transformationen

Um die Funktionsweise von Farbtransformationen richtig zu erklären, ist es hilfreich, den vollständigen Verarbeitungspfad sowohl durch ICM 2.0 als auch über die Internen CTE zu erläutern. Die ICM 2.0 CreateColorTransformW-Funktion erstellt eine Farbtransformation, die Anwendungen zum Durchführen der Farbverwaltung verwenden können. Diese Funktion erstellt einen Farbkontext aus den LOGCOLORSPACE - und Absichtseingaben. Die Absichten werden den Baseline-ICC-Gamutzuordnungsalgorithmus korreliert. Die Funktion ruft dann die ICM 2.0-Funktion CreateMultiProfileTransform für eine konsistente Farbverarbeitung auf. Die CreateColorTransform-Funktion kopiert Daten im Allgemeinen in die interne optimierte Transformationsstruktur.

Die ICM 2.0 CreateMultiProfileTransform-Funktion akzeptiert ein Array von Profilen und ein Array von Absichten oder ein einzelnes Geräteverknüpfungsprofil und erstellt eine Farbtransformation, die Anwendungen zum Durchführen der Farbzuordnung verwenden können. Diese Eingabeprofile und Absichten werden verarbeitet, um Gerätemodelle, Farbdarstellungsmodelle, Beschreibungen der Gamutgrenzen und Gamut-Zuordnungsmodelle zu erstellen. Gehen Sie wie folgt vor:

  • Gerätemodelle werden direkt aus DM-Profilen initialisiert. Für jedes Profil im Aufruf von CreateMultiProfileTransform wird ein Gerätemodell erstellt.
  • Farbdarstellungsmodelle werden direkt aus CAM-Profilen initialisiert. Es gibt ein CAM-Profil für jedes Profil im Aufruf von CreateMultiProfileTransform. Dasselbe CAM-Profil kann jedoch für mehrere Profile angegeben werden.
  • Gamut-Begrenzungsbeschreibungen werden aus einem Gerätemodellobjekt und einem CAM-Objekt initialisiert. Es gibt eine Gamut-Begrenzungsbeschreibung für jedes Profil im Aufruf von CreateMultiProfileTransform.
  • Gamut-Zuordnungsmodelle werden aus zwei Gamutgrenzen und einer Absicht initialisiert. Sie müssen ein Gamutzuordnungsmodell zwischen jedem Paar von Gerätemodellen erstellen, das aus dem Aufruf von CreateMultiProfileTransform erstellt wurde. Beachten Sie, dass Dies bedeutet, dass Sie ein Modell mit weniger Gamutmap als das Gerätemodell verwenden. Da die Anzahl der Absichten mit der Anzahl der Gerätemodelle übereinstimmt, gibt es auch eine Absicht mehr als erforderlich. Die erste Absicht in der Liste wird übersprungen. Sie durchlaufen die Liste der Gerätemodelle und -absichten und erstellen Gamut-Zuordnungsmodelle. Wählen Sie das erste und zweite Gerätemodell und die zweite Absicht aus, und initialisieren Sie dann das erste Gamut-Zuordnungsmodell. Wählen Sie das zweite und dritte Gerätemodell und die dritte Absicht aus, und initialisieren Sie dann das zweite Gamut-Zuordnungsmodell. Fahren Sie auf diese Weise fort, bis Sie alle Gamutzuordnungsmodelle erstellt haben.

Wenn die Profile ordnungsgemäß verarbeitet und alle Zwischenobjekte erstellt und initialisiert wurden, können Sie die CITE-Transformation mit dem folgenden Aufruf erstellen. pDestCAM und pDestDM sind dem letzten Profil im Aufruf von CreateMultiProfileTransform zugeordnet.

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

Unterstützung für Plug-Ins

Ein Problem beim Einrichten der Transformationsliste besteht darin, zu überprüfen, ob ein erforderliches Plug-In verfügbar ist. Der folgende Modellswitch stellt diese Richtlinie bereit, um dieses Verhalten zu steuern. Die Verwaltung dieser Transformationsliste ist eine Methode in der internen optimierten Transformationsstruktur, aber jede Modellmethode stellt den Zeiger auf sich selbst und einen eigenen Satz von Parameterwerten bereit.

Der Modus muss einer der folgenden Sein:

  • TfmRobust: Wenn ein Messprofil ein bevorzugtes Plug-In angibt und das Plug-In nicht verfügbar ist, verwendet das neue CTE-System das Baseline-Plug-In. Wenn kein Plug-In verfügbar ist, meldet die Transformation einen Fehler.
  • TfmStrict: Wenn ColorContext ein bevorzugtes Plug-In angibt, muss das Plug-In verfügbar sein. Wenn kein bevorzugtes Plug-In gefunden wird, wird das Baseline-Plug-In verwendet. Wenn kein Plug-In verfügbar ist, meldet die Transformation einen Fehler.
  • TfmBaseline: In AddMeasurementStep können nur Baseline-Plug-Ins verwendet werden. Wenn ColorContext ein bevorzugtes Plug-In angibt, wird das Plug-In ignoriert. Wenn das Baseline-Plug-In nicht verfügbar ist, meldet die Transformation einen Fehler.

Transformieren der Ausführung

Die ICM 2.0-API TranslateColors-Funktion übersetzt ein Array von Farben aus dem Quellfarbraum in den Zielfarbraum, wie durch eine Farbtransformation definiert. Diese Funktion überprüft intern ein Array von zwischengespeicherten Farben, um einen sofortigen Abgleich häufig transformierter Farben zu ermöglichen. Diese Transformation unterstützt 8-Bit-Bytearrays pro Kanal und Floatarrays mit 32 Bit pro Kanal. Alle anderen Formate werden vor der Übergabe an den neuen CTE konvertiert.

Die ICM 2.0-API-Funktion TranslateBitmapBits übersetzt die Farben einer Bitmap mit einem definierten Format, um eine weitere Bitmap in einem angeforderten Format zu erzeugen. Diese Funktion überprüft intern ein Array von zwischengespeicherten Farben, um einen sofortigen Abgleich häufig transformierter Farben zu ermöglichen. Um zu viele Codepfade, Unterstützung und Testkomplexität zu vermeiden, wird in der Transformations- und Interpolations-Engine nur eine begrenzte Anzahl von Bitmapformaten unterstützt. Diese Funktion muss die nicht nativen Formate für eingehende und ausgehende Bitmaps zur Verarbeitung in nativ unterstützte Formate übersetzen. Diese Transformation unterstützt nur 8-Bit-Bytebitbits pro Kanal und 32-Bit-Float-Bitmaps pro Kanal. Alle anderen Formate werden vor der Übergabe an den neuen CTE konvertiert.

 

Sequenzielle Transformationsausführung

Wenn für den dwFlags-Parameter das SEQUENTIAL_TRANSFORM Bit festgelegt ist, wenn die ICM-Funktionen CreateColorTransformW oder CreateMultiProfileTransform aufgerufen werden, werden die Transformationsschritte sequenziell ausgeführt. Dies bedeutet, dass der Code jedes Gerätemodell, Farbdarstellungsmodell und Gamutzuordnungsmodell separat durchläuft, wie durch den Aufruf CreateColorTransform oder CreateMultiProfileTransform angegeben. Dies kann beim Debuggen von Plug-In-Modulen hilfreich sein, ist aber viel langsamer als die Ausführung durch eine optimierte Transformation. Die Ausführung im sequenziellen Modus wird daher für Produktionssoftware nicht empfohlen. Außerdem kann es geringfügige Unterschiede bei den Ergebnissen geben, die im sequenziellen Modus und im optimierten Modus erhalten werden. Dies ist auf Variationen zurückzuführen, die eingeführt werden, wenn die Funktionen miteinander verkettet werden.

Erstellen optimierter Transformationen

Eine optimierte Transformation ist eine mehrdimensionale Nachschlagetabelle. Die Tabelle kann von einer mehrdimensionalen Interpolations-Engine wie der tetraedralen Interpolation verarbeitet werden, die die Eingabefarben auf die Transformation anwendet. Im folgenden Abschnitt wird beschrieben, wie die optimierten Nachschlagetabellen erstellt werden. Im abschnitt danach wird beschrieben, wie sie innerhalb der optimierten Nachschlagetabellen interpoliert werden.

Sparse-Nachschlagetabellen

Herkömmliche Drucker verfügen über CMYK-Tinten. Um den Gamut zu erweitern, besteht ein Ansatz darin, dem System neue Tinten hinzuzufügen. Bei den in der Regel hinzugefügten Farben handelt es sich um Farben, bei denen CMYK-Tinten Schwierigkeiten beim Reproduzieren haben. Häufig werden orange, grün, rot, blau usw. ausgewählt. Um die "scheinbare Auflösung" zu erhöhen, können Farben mit unterschiedlichen Farbtons verwendet werden, z. B. Helles Zyan, helles Magenta usw. Tatsächlich verfügt das Druckergerät über mehr als vier Kanäle.

Obwohl Drucker Ausgabegeräte sind, führen sie auch die Farbkonvertierung aus dem Gerätebereich in einen anderen Farbraum durch. Im Fall eines CMYK-Druckers wäre dies eine Transformation von CMYK zu XYZ oder das "Vorwärtsmodell" des Druckers. Durch Die Kombination des Vorwärtsmodells mit anderen Transformationen ist es möglich, einen CMYK-Druck auf einem anderen Gerät zu emulieren. Beispielsweise würde ein Drucker CMYK zu einem Monitor RGB einen Korrekturhilfemechanismus ermöglichen, der einen Druck dieses CMYK-Druckers auf einem Monitor emuliert. Gleiches gilt auch für HiFi-Drucker. Eine CMYKOG-zu-RGB-Konvertierung ermöglicht die Korrektur des CMYKOG-Druckers auf einem Monitor.

Der herkömmliche Ansatz für die Implementierung einer solchen Farbkonvertierung ist die Verwendung einer einheitlichen LUT. Beispielsweise schreibt die ICC-Spezifikation in einem ICC-Profil für einen CMYKOG-Drucker ein A2B1-Tag vor, das eine einheitliche LUT speichert, die eine einheitliche Stichprobe im CMYKOG-Gerätebereich des Vorwärtsmodells darstellt, das von CMYKOG zum ICC-Profilverbindungsbereich (entweder CIELAB oder CIEXYZ) geht. Das ICC-Geräteverknüpfungsprofil ermöglicht eine direkte Transformation vom CMYKOG-Gerätebereich in einen beliebigen Farbraum einschließlich eines Gerätebereichs, auch in Form einer LUT, die einheitlich im CMYKOG-Raum erfasst wird. Das Sampling erfolgt nie mit 256 Ebenen (Bittiefe 8) aufgrund der riesigen LUT, außer bei monochromen Geräten (1 Kanal). Stattdessen wird das Sampling mit geringerer Bittiefe verwendet. Einige typische Optionen sind 9 (Bittiefe 3), 17 (Bittiefe 4), 33 (Bittiefe 5). Da die Anzahl der Ebenen in jedem Kanal kleiner als 256 ist, wird die LUT in Verbindung mit einem Interpolationsalgorithmus verwendet, um das Ergebnis zu erzeugen, wenn eine Ebene zwischen zwei stichprobenierten Ebenen liegt.

Während eine einheitliche LUT konzeptionell einfach zu implementieren ist und die Interpolation für eine einheitliche LUT im Allgemeinen effizient ist, erhöht sich die LUT-Größe exponentiell mit der Eingabedimension. Wenn d die Anzahl der Schritte in der einheitlichen LUT und n die Anzahl der Kanäle im Quellfarbraum ist, ist die Anzahl der Knoten in der LUT die Variable für die Anzahl der Knoten in einer LUT. Offensichtlich erfordert die Anzahl der Knoten schnell so viel Speicher im Arbeitsspeicher, dass selbst Top-of-the-Line-Computing-Systeme Schwierigkeiten haben, den Bedarf zu bewältigen. Für Geräte mit sechs oder acht Kanälen erfordert eine ICC-Implementierung des Geräteprofils einige Schritte in der LUT, manchmal sogar bis zu fünf Schritte in der A2B1-Tabelle, um das Profil innerhalb von Megabytes anstelle von Gigabyte zu halten. Die Verwendung einer kleineren Anzahl von Schritten erhöht eindeutig den Interpolationsfehler, da jetzt weniger Stichproben vorhanden sind. Da die LUT einheitlich sein muss, wird die Genauigkeit über den gesamten Farbraum sogar in den Bereichen des Raums beeinträchtigt, in denen ein erheblicher Farbunterschied durch eine geringe Änderung des Gerätewerts verursacht werden kann.

Bei Geräten mit mehr als vier Farbmitteln sind bestimmte Unterbereiche des gesamten Gerätebereichs wichtiger als andere. Im CMYKOG-Raum werden z. B. cyan und grüne Tinten selten zusammen verwendet, da sich ihre Farben weitgehend überlappen. Ebenso überlappen sich gelbe und orangefarbene Tinten weitgehend. Eine gleichmäßige Verringerung der Anzahl der Schritte kann als eine allgemeine Qualitätsminderung im gesamten Farbraum angesehen werden, was sie sich für die unwahrscheinlichen Freihandkombinationen leisten können, aber nicht für die wahrscheinlichen oder wichtigen Kombinationen.

Eine einheitliche Stichproben-LUT ist zwar einfach und effizient für die Interpolation, stellt aber mit zunehmender Dimension enorme Speicheranforderungen. In Der Realität kann ein Gerät zwar über sechs oder acht Kanäle verfügen, werden aber selten gleichzeitig verwendet. In den meisten Fällen weist die Transformation für Die Eingabefarbe in Farbe nur wenige "aktive" Farbstoffe auf und befindet sich daher in einem niedriger dimensionierten Farbraum. Dies bedeutet auch, dass die Interpolation in diesem niedrigeren Dimensionsraum effizienter durchgeführt werden kann, da die Interpolation schneller ist, wenn die Dimension niedriger ist.

Daher besteht der Ansatz darin, den gesamten Geräteraum in Unterräume verschiedener Dimensionen zu stratifizieren. Und da niedrigere Dimensionen (diejenigen, die drei oder vier Farbstoffe kombinieren) wichtiger sind, können Sie durch Stratifizierung des Raums auch unterschiedliche Samplingraten anwenden. das heißt, eine andere Anzahl von Schritten, zu den Stücken; Erhöhen der Stichprobenraten für niedrigere Dimensionen und Verringern der Stichprobenrate für höhere Dimensionen.

Um Notationen zu beheben, ist n die Anzahl der Kanäle im Quellfarbraum der Farbtransformation, die Sie abtasten möchten. Sie können auch auf n als Eingabedimension verweisen, und zeigt n größer als oder gleich 5 an. , sofern nicht anders angegeben.

Die grundlegenden Bausteine sind LUTs mit verschiedenen Eingabedimensionen und -größen anstelle einer einheitlichen LUT mit Eingabedimension n. Genauer gesagt ist eineLUT ein rechteckiges Gitter, das auf einen Einheitswürfel aufgesetzt wird; Das heißt, alle Gerätekoordinaten werden auf den Bereich [0, 1]) normalisiert. , wenn die Eingabedimension der Lut ist (beachten Sie, dass nicht gleich n sein muss, obwohl V kleiner oder gleich n ist), besteht sie aus eindimensionalen Stichprobenrastern:

Samp i: Zeigt ein eindimensionales Samplingraster an.

Wobei alle xjs im Bereich [0, 1] liegen müssen, zeigt einen hochgestellten d(i). ist die Anzahl der Schritte für die i.th-Kanalsampling, die mindestens 1 sein muss, und zeigt ein Spuperscript von X (tiefgestellt) d(i). muss 1 sein. Auf der anderen Seite zeigt ein hochgestelltes X (tiefgestellt 1). muss nicht 0 sein.

Es werden nur die folgenden beiden Sonderfälle von LUT definiert.

Geschlossene LUT: Dies ist eine LUT mit der zusätzlichen Anforderung, dass für jeden Samp*i* ein hochgestelltes X (tiefgestellt 1) gleich 0 ist. und zeigt einen hochgestellten d(i) größer als oder gleich 2 an. Eine einheitliche geschlossene LUT ist eine geschlossene LUT mit demselben Hochgestellten d(i). für jeden Kanal, und die Knoten sind einheitlich zwischen 0 und 1 angeordnet.

Offene LUT: Dies ist eine LUT mit der zusätzlichen Anforderung, dass für jeden Samp i ein hochgestelltes X (tiefgestellt 1) größer als 0 ist. Es ist IN ORDNUNG, wenn ein hochgestelltes d(i) gleich 1 angezeigt wird.

Das Ziel besteht darin, den Einheitenwürfel [0, 1] n in eine Sammlung geschlossener LUTs und geöffneter LUTs zu stratifizieren, sodass die gesamte Sammlung den Einheitencube abdeckt. Es ist konzeptionell einfacher, diese "LUT-Schichten" nach ihren Dimensionen zu organisieren, so dass auf der obersten Ebene:

Zeigt die oberste Ebene für die Organisation von L U T-Schichten nach ihren Dimensionen an.

Dabei zeigt sigma subscript k. ist die "k -dimensional strata collection". Beachten Sie, dass die Strata-Dimension bei 3 statt bei 0 beginnt. das heißt Punkte, da die Interpolation von Dreifarbstoffkombinationen ohne zu viel Arbeitsspeicherbedarf verarbeitet werden kann.

Beschreibung der LUT-Schicht

In dieser Implementierung:

  1. Zeigt sigma subscript 3 an. besteht aus geschlossenen LUTs mit drei Eingaben, eine aus jeder möglichen Kombination von drei Farbmitteln, die aus den n Farbmitteln ausgewählt wurden.

  2. Zeigt sigma subscript 4 an. besteht aus einer geschlossenen LUT für die Kombination CMYK (oder die ersten vier Farbstoffe), zusammen mit Shows (n über 4) minus 1. geöffneten LUTs für alle anderen vierfarbigen Kombinationen. Indem Sie die CMYK-Kombination heraussingen, erkennen Sie an, dass es sich um eine wichtige Kombination handelt.

  3. Für Shows k equal to 5, ..., n. , Shows sigma subscript k. besteht aus Shows (n über k). open LUTs, eine für jede mögliche Kombination von k-Farbmitteln aus der Summe der n Farbmittel.

Es bleibt, die Größen der LUTs anzugeben. Der Hauptunterschied zwischen offenen und geschlossenen LUTs besteht darin, dass sich offene LUTs nicht überlappen und geschlossene LUTs sich möglicherweise an den Begrenzungsflächen überlappen. Die Tatsache, dass die eindimensionale Stichprobenentnahme in einer offenen LUT nicht 0 enthält, bedeutet im Wesentlichen, dass einer offenen LUT die Hälfte der Begrenzungsflächen fehlt, daher der Name "open". Wenn sich zwei LUTs nicht überlappen, können Sie in jedem Kanal eine unterschiedliche Anzahl von Schritten oder Knotenspeicherorten verwenden. Dasselbe gilt nicht, wenn sich zwei LUTs überlappen. Wenn in diesem Fall die Anzahl der Schritte oder die Knotenpositionen unterschiedlich sind, erhält ein Punkt, der in der Schnittmenge der beiden LUTs liegt, einen anderen Interpolationswert, je nachdem, welcher LUT in der Interpolation verwendet wird. Eine einfache Lösung für dieses Problem besteht darin, einheitliche Stichprobenentnahmen mit der gleichen Anzahl von Schritten zu verwenden, wenn sich zwei LUTs überlappen. Anders gesagt:

Alle geschlossenen LUTs (alle dreifarbigen LUTs und die CMYK-LUT in dieser Implementierung) müssen einheitlich sein und dieselbe Anzahl von Schritten aufweisen, die als d bezeichnet werden.

Die folgenden beiden Algorithmen können verwendet werden, um die Anzahl der Schritte d für geschlossene LUTs und die Anzahl der Schritte für offene LUTs zu bestimmen.

Algorithmus #1

Für diesen Algorithmus ist keine externe Eingabe erforderlich.

Alle geschlossenen LUTs sind mit d Anzahl von Schritten einheitlich.

Alle offenen LUTs der Dimension k weisen die gleiche Anzahl von Schritten auf. Zeigt d(k). in jedem Eingabekanal, und die Knoten sind gleich angeordnet; das heißt, für jedes Shows i gleich 1, 2, ..., k. .

Samp i: Zeigt den Samp i-Algorithmus an.

Geben Sie schließlich d und d (k ) in der folgenden Tabelle 1 an. Die drei Modi "Proof", "normal" und "best" sind die ICM 2.0-Qualitätseinstellungen. In dieser Implementierung weist der Proofmodus den kleinsten Speicherbedarf auf, und der beste Modus hat den größten Speicherbedarf.

Um diesen Algorithmus zu implementieren, müssen Sie den folgenden Algorithmus #2 aufrufen. Benutzer können ihre eigenen Stichprobenspeicherorte angeben, indem sie die Tabellen als Leitfaden verwenden.

Algorithmus Nr. 2

Dieser Algorithmus erfordert externe Eingaben in Form einer Liste mit "wichtigen" Stichprobenspeicherorten, ist aber anpassungsfähiger und kann möglicherweise Speicherplatz sparen.

Die erforderliche Eingabe ist ein Array von Gerätewerten, die vom Benutzer bereitgestellt werden. Diese Gerätewerte geben an, welcher Bereich des Gerätefarbraums wichtig ist; Das heißt, welche Region mehr stichprobeniert werden sollte.

Alle geschlossenen LUTs sind mit d Anzahl von Schritten einheitlich, wie unter Algorithmus #1 beschrieben. Werte für d werden in Tabelle 1 angegeben.

a) Einheitliche geschlossene LUT

Proof-Modus Normaler Modus Bester Modus
D 9 17 33

 

b) Open LUT

Eingabedimension Proof-Modus Normaler Modus Bester Modus
4 5 7 9
5 2 3 3
6 2 3 3
7 2 2 2
8 oder mehr 2 2 2

 

Tabelle 1: Im Algorithmus verwendete LUT-Größen

Jede geöffnete LUT kann in jedem Eingabekanal über eine unterschiedliche Anzahl von Schritten verfügen, und die Stichprobenspeicherorte müssen nicht den gleichen Abstand aufweisen. Für eine angegebene offene LUT-Schicht gibt es eine zugeordnete Farbstoffkombination, z. B . Zeigt C-Tiefgestellt 1, ..., C subscript k. , wobei die Subscript-i. s zeigt C subscript i. s sind unterschiedliche ganze Zahlen zwischen 1 und n. Sie sind die Kanalindizes, die den "aktiven" Farbstoffen in dieser Schicht entsprechen.

SCHRITT 1: Filtern Sie das eingegebene Array von Gerätewerten heraus, die nicht in dieser Schicht enthalten sind. Ein Gerätewert Zeigt X tiefgestellt 1, X tiefgestellt 2, ..., X tiefgestellt n. ist in den Schichten enthalten, wenn und nur, wenn eine Gruppe von Werten für einen Kanal angezeigt wird, und alle anderen Kanäle 0 sind. Wenn der gefilterte Satz N Einträge enthält, lassen Sie

Zeigt eine Formel an, die verwendet werden soll, wenn der gefilterte Satz N Einträge enthält.

Für jedes Shows i gleich 1, 2, ..., k. durchlaufen Sie die folgenden Schritte 2-5:

SCHRITT 2: Wenn d subscript tentative (k) gleich 1 zeigt, hat Samp i nur 1 Punkt, der 1,0 sein muss. Fahren Sie mit dem nächsten i fort. Fahren Sie andernfalls mit SCHRITT 3 fort.

SCHRITT 3: Sortieren Sie die gefilterten Beispiele in aufsteigender Reihenfolge im Kanal Tiefgestellt c anzeigen i.

SCHRITT 4: Definieren des Rasters "vorläufiges" Sampling mithilfe der Knoten

Zeigt die Knoten an, die zum Definieren des Rasters

Dabei zeigt j gleich 1, 2, ..., d mit Vorbehalt (k) an.

SCHRITT 5: Regularisieren Des vorläufigen Rasters, um sicherzustellen, dass es der strikten Monotonität entspricht und dass es mit 1,0 endet. Da das Array bereits sortiert ist, sind die Knoten im vorläufigen Raster bereits monoton und nicht absteigend. Benachbarte Knoten können jedoch identisch sein. Sie können dies beheben, indem Sie bei Bedarf identische Knoten entfernen. Wenn der Endpunkt nach diesem Verfahren kleiner als 1,0 ist, ersetzen Sie ihn durch 1.0.

Beachten Sie, dass SCHRITT 5 der Grund dafür ist, dass die LUT-Schicht in jedem Kanal eine unterschiedliche Anzahl von Schritten aufweisen kann. Nach der Regularisierung kann die Anzahl der Schritte in einem Kanal kleiner sein als Zeigt d tiefgestellt (k).

Interpolation

Sie können die Schichtung des Einheitenwürfels durch offene LUT-Schichten und geschlossene LUT-Schichten erstellen. Führen Sie die folgenden Schritte aus, um eine Interpolation mit dieser "Sparse-LUT-Struktur" durchzuführen. Angenommen, ein angegebener Eingabegerätwert zeigt (X tiefgestellt 1, X tiefgestellt 2, ..., X tiefgestellt n).

SCHRITT 1: Ermitteln der Anzahl der "aktiven" Kanäle. Dies ist die Anzahl von Kanälen ungleich null. Dadurch wird die Strata-Dimension k bestimmt, um nach der enthaltenden Schicht zu suchen. Genauer gesagt ist die Strata-Dimension 3, wenn die Anzahl der aktiven Kanäle kleiner als oder gleich 3 ist. Andernfalls entspricht die Strata-Dimension der Anzahl der aktiven Kanäle.

SCHRITT 2: Suchen Sie unter Zeigt sigma subscript k. nach der enthaltenden Stratum. Ein Gerätewert ist in einer offenen Stratum enthalten, wenn alle Kanäle, die der Stratum entsprechen, einen Wert ungleich 0 (null) haben und alle anderen Kanäle null sind. Ein Gerätewert ist in einer geschlossenen Schicht enthalten, wenn jeder Kanal, der nicht durch die Stratum dargestellt wird, null ist. Wenn keine enthaltende Stratum gefunden wird, gibt es eine Fehlerbedingung. Abbrechen und Melden eines Fehlers. Wenn eine enthaltende Stratum gefunden wird, fahren Sie mit dem nächsten Schritt fort.

SCHRITT 3: Wenn die enthaltende Schicht geschlossen ist, kann die Interpolation innerhalb der Schicht durch einen beliebigen bekannten Interpolationsalgorithmus durchgeführt werden. In dieser Implementierung ist die Tetraedrale Interpolation die Wahl des Algorithmus. Wenn die enthaltende Stratum offen ist und der Gerätewert streng innerhalb der Stratum liegt, d.

Zeigt X tiefgestellt i größer als oder gleich... Erster Knoten im Kanal

Wenn i ein Kanalindex für die Schicht ist, funktioniert der Standardinterpolationsalgorithmus, z. B. die tetraedrale Interpolation.

Wenn X subscript i less than... erster Knoten in i th Channel für einige i zeigt, fällt der Gerätewert in die "Lücke" zwischen der Stratum und den unterdimensionalen Unterräume. Dieser MOI ist nicht mit einem Interpolationsalgorithmus per se befasst, sodass jeder Interpolationsalgorithmus verwendet werden kann, um innerhalb dieser "Lücke" zu interpolieren, obwohl der bevorzugte Algorithmus die folgende transfinite Interpolation ist.

Die Architektur des Interpolationsmoduls ist in den beiden Teilen von Abbildung 1 dargestellt.

Diagramm, das Teil 1 der Architektur des Interpolationsmoduls zeigt.

Diagramm, das den zweiten Teil der Architektur des Interpolationsmoduls zeigt.

Abbildung 1: Architektur des Intepolationsmoduls

Wie bereits erwähnt, ist dieser Algorithmus in der Lage, relativ dichte Stichproben in Regionen des Geräteraums zu erreichen, die eine wichtige Kombination von Farbstoffen enthalten, während die Gesamtgröße der benötigten LUTs minimiert wird. Die folgende Tabelle zeigt einen Vergleich der Anzahl der Knoten, die für die Implementierung von LUT mit geringer Dichte (mit Algorithmus #1 und dem normalen Modus) und der entsprechenden einheitlichen LUT-Implementierung erforderlich sind.

Anzahl der Eingabekanäle Sparse LUT Uniform LUT
5 142498 1419857
6 217582 24137567
7 347444 410338673
8 559618 6975757441

 

Interpolation innerhalb eines Einheitencubes

Ein grundlegender Schritt im Fall eines rechteckigen Rasters ist die Interpolation innerhalb einer umschließenden Zelle. Für einen Eingabepunkt können Sie die umschließende Zelle einfach bestimmen. In einem rechteckigen Raster wird der Ausgabewert an jedem der Scheitelpunkte (Eckpunkte) der einschließenden Zelle angegeben. Sie sind auch die einzigen Begrenzungsbedingungen (BCs), die ein Interpolant erfüllen muss: Der Interpolant muss alle diese Punkte durchlaufen. Beachten Sie, dass sich diese Begrenzungsbedingungen auf "diskreten" Punkten befinden, in diesem Fall den 2n Eckpunkten der Zelle, wobei n die Dimension des Farbraums ist.

Es ist hilfreich, das Konzept der Begrenzungsbedingungen zu formalisieren, bevor Sie weitergehen. Für jede Teilmenge S der Grenze der umgebenden Zelle (der Einheitenwürfel in n Dimensionen) ist eine Begrenzungsbedingung für S eine Spezifikation einer Funktion BC: S → Rm, wobei m die Ausgabedimension ist. Mit anderen Worten, ein Interpolant, der als Interp bezeichnet werden kann: [0,1]n→ Rm, ist erforderlich, um Folgendes zu erfüllen: Interp(x) = BC(x) für alle x in S.

Im Standardszenario der Interpolation auf dem Einheitswürfel ist S der Satz von diskreten Punkten, die die 2n Scheitelpunkte des Cubes sind.

Sie können jetzt die Begrenzungsbedingungen generalisieren, um die zuvor beschriebenen Probleme zu beheben und einen neuen Interpolationsalgorithmus innerhalb des Einheitencubes bereitzustellen. Anstatt nur diskrete Begrenzungspunkte zuzulassen, können Begrenzungsbedingungen für eine gesamte Begrenzungsseite des Cubes festgelegt werden. Die genauen Annahmen sind wie folgt:

(a) Der Punkt vn =(1,1,...,1) ist speziell, und nur eine diskrete Begrenzungsbedingung ist zulässig. Anders ausgedrückt: Es können keine kontinuierlichen Begrenzungsbedingungen für die n Begrenzungsflächen xi=1 (i=1,...,n) festgelegt werden.

(b) Für jede der verbleibenden n Begrenzungsflächen xi=0 (i=1,...,n) kann eine Begrenzungsbedingung für das gesamte Gesicht festgelegt werden, wobei die Kompatibilitätsbedingung gilt, dass, wenn sich zwei Gesichter überschneiden, die Begrenzungsbedingungen auf den Flächen über die Schnittmenge einigen sollten.

(c) Alle Scheitelpunkte, die nicht in den Flächen mit Begrenzungsbedingung enthalten sind, weisen eine individuelle (diskrete) Begrenzungsbedingung auf.

Sie können eine diskrete Begrenzungsbedingung als endliche Daten und eine kontinuierliche Begrenzungsbedingung als transfinite Daten bezeichnen, wenn Sie die Interpolation für endliche und transfinite Daten diskutieren.

Überprüfen Sie zunächst die tetraedrale Standardinterpolation (wie sie im Sakamoto-Patent verwendet wird), die dabei hilft, die Notationen für diese spezielle Formulierung des Problems festzulegen. Es ist bekannt, dass der Einheitenwürfel [0,1]n in n! unterteilt werden kann. Tetraeder, parametrisiert durch den Satz von Permutationen auf n Symbolen. Genauer gesagt, jeder dieser Tetraeder wird durch Ungleichheiten definiert.

Zeigt die Formel für die Ungleichheiten der Tetraeder an.

dabei ist σ:{1,2,..,n}→{1,2,...,n} eine Permutation von "Symbolen" 1, 2, ..., n, d. h. es handelt sich um eine bijektive Zuordnung des Satzes von n Symbolen. Wenn beispielsweise n = 3 und σ = (3, 2, 1), was σ(1)=3, σ(2)=2, σ(3)=1 bedeutet, wird der entsprechende Tetraeder durch z≥y≥x definiert, wobei die allgemeine Notation x, y, z für x1, x2, x3 verwendet wird. Beachten Sie, dass diese Tetraeder nicht voneinander getrennt sind. Zum Zwecke der Interpolation haben Punkte, die auf einer gemeinsamen Seite zweier unterschiedlicher Tetraeder liegen, den gleichen Interpolationswert, unabhängig davon, welches Tetraeder in der Interpolation verwendet wird. Im Standardszenario der Interpolation auf endlichen Punkten bestimmen Sie für einen bestimmten Eingabepunkt (x1, ..., xn) zunächst, in welchem Tetraeder es liegt, oder äquivalent die entsprechende Permutation σ, dann wird der tetraedrale Interpolant als definiert.

Zeigt die Gleichung an, die den tetraedralen Interpolanten definiert.

Dabei zeigt die Formel für die Standardbasisvektoren. für i=1, ..., n und e1, ..., ..., en sind die Standardbasisvektoren. Bevor Sie mit der Generalisierung fortgehen, beachten Sie, dass v0, v1, ..., vn die Scheitelpunkte des Tetraeders sind und die baryzentrischen Koordinaten zeigt. sind die "baryzentrischen Koordinaten".

Für den allgemeinen Fall von BCs auf Begrenzungsflächen können Sie das Konzept der baryzentrischen Projektion verwenden. Bestimmen Sie wie zuvor für einen bestimmten Eingabepunkt (x1, ..., xn) zunächst, in welchem Tetraeder er liegt, oder gleichwertig die entsprechende Permutation σ. Führen Sie dann wie folgt eine Reihe von baryzentrischen Projektionen durch. Die erste Projektion Zeigt BProj Subscript 1 (x). sendet den Punkt an die Ebene Zeigt X subscript delta (1) gleich 0. Es sei denn , Zeigt X gleich V subscript n. in diesem Fall wird es nicht geändert. Die genaue Definition des Karten-BProj wird wie folgt definiert:

Zeigt die Formel für die genaue Definition des Karten-BProj an.

mit Zeigt die Gleichung für P subscript k. und k = 1, 2, ..., n.

Im Fall von Shows X ist gleich V subscript n. , können Sie beenden, da BC bei vn durch Annahme (a) definiert wird. Im Fall von Shows X ist nicht gleich V subscript n. , ist es klar, dass BProj subscript 1 (X) zeigt , dass die σ(1)th-Komponente zerstört ist. Mit anderen Worten, es befindet sich auf einer der Begrenzungsflächen. Entweder befindet sie sich auf einem Gesicht, auf dem BC definiert ist, in diesem Fall können Sie anhalten, oder Sie führen eine weitere baryzentrische Projektion Zeigt BProj subscript 2 (X').Dabei zeigt X' gleich BProj Subscript 1 (X). . Und wenn X''= Bproj subscript 1 (X') angezeigt wird, auf einem Gesicht befindet, für das BC definiert ist, können Sie anhalten; führen Sie andernfalls eine weitere Projektion zeigt BProj subscript 3 (X''). Da jede Projektion eine Komponente zerstört, nimmt die effektive Dimension ab, sodass Sie wissen, dass der Prozess schließlich beendet werden muss. Im schlimmsten Fall führen Sie n Projektionen bis zur Dimension 0 durch, d. h. Scheitelpunkte auf dem Würfel, von denen Sie gemäß Annahme (c) wissen, dass BC definiert wird.

Unter der Annahme, dass K-Projektionen ausgeführt wurden, mit

Zeigt eine Formel an, die davon ausgegangen wird, dass eine K-Projektion ausgeführt wurde.

x(0)= x, der Eingabepunkt und BC sind bei x(k) definiert. Entspannen Sie dann die Projektionen, indem Sie eine Reihe von Ausgabevektoren definieren:

Zeigt Formeln für eine Reihe von Ausgabevektoren an.

Zeigt die Formel für Y hochgestellt (K) an, und Sie erhalten schließlich die Antwort.

Zeigt Interp(x) gleich y hochgestellt (0) an.

Arbeitsbeispiel

Diagramm, das ein beispiel für die Interpolation mit einem Einheitswürfel zeigt.

Abbildung 2: Beispiel für "Funktioniert"

Betrachten Sie die in Abbildung 2 dargestellte Situation, wobei n = 3, m = 1 und die folgenden BCs vorhanden sind:

a) Vier separate BCs auf den Scheitelpunkten

(0, 0, 1): β001

(0, 1, 1): β011

(1, 0, 1): β101

(1, 1, 1): β111

(b) Eine kontinuierliche BC auf dem Gesicht x3=0: F(x1, x2)

Berechnung Nr. 1: Eingabepunkt x = (0.8, 0.5, 0.2). Das einschließende Tetraeder ist der Permutation <1, 2, 3> zugeordnet.

1. Projektion: Zeigt die Gleichung für die erste Projektion.

Dies ist bereits auf dem Gesicht x3=0, sodass Sie anhalten können. Rückwärtsersetzung gibt dann

Zeigt die Antwort für die erste Projektion an. das ist die Antwort.

Berechnung #2 : Eingabepunkt x = (0.2, 0.5, 0.8). Der einschließende Tetraeder ist der Permutation <3, 2, 1> zugeordnet.

1. Projektion: Zeigt die Gleichung für die erste Projektion der Berechnung 2.

2. Projektion: Zeigt die Gleichung für die zweite Projektion der Berechnung 2.

3. Projektion: Zeigt die Gleichung für die dritte Projektion der Berechnung 2. , die sich auf der Seite x3=0 befindet. Rückwärtsersetzung gibt dann

Zeigt die ersten beiden Formeln für die Rückwärtsersetzung an.

Zeigt die dritte Gleichung für die Rückwärtsersetzung an. Dies ist die endgültige Antwort.

Anwendungen

a) Sequenzielle tetraedrale Interpolation

Diagramm, das die sequenzielle tetraedrale Interpolation zeigt.

Abbildung 3: Sequenzielle tetraedrale Interpolation

Siehe Abbildung 3. Um zwischen zwei Ebenen zu interpolieren, auf denen inkompatible Raster angeordnet wurden, sollten Sie eine Zelle in Betracht ziehen, die einen bestimmten Punkt P umschließt, der in der Abbildung dargestellt ist. Die "oberen" Scheitelpunkte der Zelle stammen direkt aus dem Raster in der obersten Ebene. Die Scheitelpunkte in der unteren Fläche sind nicht mit dem Raster in der unteren Ebene kompatibel, sodass das gesamte Gesicht als bc mit Werten behandelt wird, die durch Interpolation im Raster auf der unteren Ebene abgerufen werden. Es ist dann klar, dass diese Einrichtung die oben genannten Annahmen (a), (b) und (c) erfüllt, und Sie können den Interpolationsalgorithmus anwenden.

Es ist auch klar, dass der Algorithmus die Dimension des Interpolationsproblems um 1 reduziert hat, da das Ergebnis eine lineare Kombination von Werten an den Scheitelpunkten im oberen Raster und Interpolation in der unteren Ebene ist, die Dimension kleiner 1 hat. Wenn auf der unteren Ebene eine ähnliche Sandwichebenenkonfiguration vorhanden ist, können Sie das Verfahren auf dieser Ebene anwenden und die Dimension um 1 weiter reduzieren. Dieses Verfahren kann fortgesetzt werden, bis Sie Dimension 0 erreichen. Diese Kaskade von Projektionen und Interpolationen kann als "Sequenzielle tetraedrale Interpolation" bezeichnet werden.

b) Gap Interpolation

Diagramm, das die Lückeninterpolation zeigt.

Abbildung 4: Gap-Interpolation

Dies ist ein Raster, das auf einen Würfel angewendet wird, der sich streng innerhalb des positiven Quadranten befindet. Der Cube selbst verfügt über ein Raster, und jede Koordinatenebene verfügt über Raster, die nicht unbedingt kompatibel sind. Die "Lücke" zwischen dem Würfel und den Koordinatenebenen hat einen Querschnitt, der "L-förmig" ist und nicht für Standardtechniken verfügbar ist. Mit der hier vorgestellten Technik können Sie jedoch problemlos Zellen einführen, die diese Lücke schließen. Abbildung 4 zeigt eine dieser Optionen. Die Raster auf den Koordinatenebenen unterstützen die Interpolation, die die erforderlichen BCs für alle unteren Flächen der Zelle bereitstellt, wobei ein verbleibender Scheitelpunkt, dessen BC von der unteren Ecke des Würfels bereitgestellt wird.

Abschließender Hinweis zur Implementierung

In der tatsächlichen Anwendung wird der "Unit Cube", der die Grundeinstellung des Algorithmus ist, aus größeren Gittern extrahiert, und die Werte an den Scheitelpunkten erfordern möglicherweise eine aufwendige Berechnung. Andererseits ist es auch klar, dass die tetraedrale Interpolation nur die Werte an den Scheitelpunkten des Tetraeder benötigt, was eine Teilmenge aller Scheitelpunkte des Einheitswürfels ist. Daher ist es effizienter, das zu implementieren, was als "verzögerte Auswertung" bezeichnet werden kann. In einer Softwareimplementierung des vorherigen Algorithmus ist es typisch, dass eine Unterroutine verwendet wird, die den Einheitencube und die Werte an seinen Scheitelpunkten als Eingabe akzeptiert. Verzögerte Auswertung bedeutet, dass anstelle der Übergabe der Werte an den Scheitelpunkten die erforderlichen Informationen zum Auswerten der Werte der Scheitelpunkte übergeben werden, ohne die Auswertung tatsächlich durchzuführen. Innerhalb der Unterroutine wird die tatsächliche Auswertung dieser Werte nur für die Scheitelpunkte durchgeführt, die zum einschließenden Tetraeder gehören, nachdem das einschließende Tetraeder bestimmt wurde.

Nachschlagetabelle für die Verwendung mit virtuellen RGB-Quellgeräten mit hohem Dynamischen Bereich

Wenn eine Transformation mit einem Quellgerät erstellt wird, das als virtuelles RGB-Gerät modelliert wird, ist es möglich, dass die Quellfarbstoffwerte negativ oder größer als Unity (1,0) sind. In diesem Fall wird das Quellgerät als high dynamic range (HDR) bezeichnet. In diesem Fall wird besonders berücksichtigt.

Bei HDR-Transformationen können die minimalen und maximalen Werte für jeden Farbkanal aus der Gamutgrenze des Geräts bestimmt werden. Bei Verwendung dieser Werte wird eine einfache Skalierung für jeden Farbmittelkanal angewendet, sodass Farbmittelwerte, die dem Minimalfarbstoff entsprechen, in 0,0 und Farbmittelwerte, die dem maximalen Farbmittel entsprechen, in 1,0 konvertiert werden, wobei eine lineare Skalierung der Werte zwischen 0,0 und 1,0 linear zugeordnet wird.

ICCProfileFromWCSProfile

Da der Standard Zweck dieses Features darin besteht, Vor-Vista-Versionen von Windows zu unterstützen, müssen Sie ICC-Profile der Version 2.2 generieren, wie in ICC-Spezifikation ICC.1:1998-09 definiert. In bestimmten Fällen (siehe die folgende Tabelle "Baseline Device To ICC Profile Class Mapping") können Sie ein Matrix- oder TRC-basiertes ICC-Profil aus einem WCS-Profil erstellen. In anderen Fällen besteht das ICC-Profil aus LUTs. Im folgenden Prozess wird beschrieben, wie Die AToB- und BToA-LUTs erstellt werden. Natürlich haben ICC-Profile auch andere Felder. Einige der Daten können aus dem WCS-Profil abgeleitet werden. Für andere Daten müssen Sie intelligente Standardwerte entwickeln. Das Urheberrecht wird Microsoft zugewiesen; da es sich um die Microsoft-Technologie handelt, die zum Erstellen der LUTs verwendet wird.

Dieser Entwurf sollte für alle Arten von Gerätemodellen, einschließlich Plug-Ins, funktionieren. Solange dem Plug-In ein Basisgerätemodell zugeordnet ist, kann der zugrunde liegende Gerätetyp bestimmt werden.

Der schwierige Teil des Erstellens eines ICC-Profils besteht darin, die AToB- und BToA-Nachschlagetabellen zu erstellen. Diese Tabellen sind zwischen dem Gerätebereich, z. B. RGB oder CMYK, und dem Profilverbindungsraum (Profile Connection Space, PCS) zugeordnet, bei dem es sich um eine Variante von CIELAB handelt. Dies entspricht im Wesentlichen dem Farbverwaltungsprozess, der in der CITE-Transformation verwendet wird, um den Geräteraum zum Gerätebereich zuzuordnen. Sie benötigen jedoch die folgenden Informationen, um die Transformation vornehmen zu können.

  1. Referenz für Anzeigebedingungen für die PCS.

  2. Referenz:PCS-Gamut.

  3. Gerätemodell, das zwischen PCS-Werten und Colorimetrie konvertiert.

Das WCS-Profil und das zugehörige CAM werden als Parameter bereitgestellt. Es gibt zwei Basisgerätemodelle, die zwischen Colorimetrie und PCS-Codierung konvertieren. Der Grund, warum Sie zwei benötigen, wird unten erläutert.

  1. Sie können die Referenzanzeigebedingungen für die PCS aus der ICC-Profilformatspezifikation abrufen. Die in der SPEZIFIKATION des ICC-Profilformats bereitgestellten Informationen reichen aus, um alle Daten zu berechnen, die zum Initialisieren der vom CMS verwendeten CAM erforderlich sind. Aus Gründen der Konsistenz und Flexibilität werden diese Informationen in einem WCS-Farbprofil gespeichert.

  2. Sie können auch ein WCS-Profil verwenden, um Beispiele zu speichern, die den Referenzumfang der PCS definieren. Das CITE-Farbverwaltungssystem (COLOR Management System, CMS) verfügt über zwei Möglichkeiten zum Erstellen von Gamutgrenzen. Eine besteht darin, den gesamten Gerätebereich zu testen und das Gerätemodell zum Erstellen von Messwerten zu verwenden. Die zweite Methode besteht darin, gemessene Stichproben aus dem Profil zu verwenden, um eine Referenz gamut-Grenze zu erstellen. Da die Bandbreite der ICC PCS zu groß ist, um eine nützliche Referenzskala zu erstellen, ist die erste Methode ungeeignet. Die zweite Methode ist jedoch ein flexibler, profilbasierter Ansatz. Um den Referenz-PCS-Gamut neu zu definieren, können Sie die Messdaten im PCS-Geräteprofil ändern.

  3. Der ICC PCS ist eine Modellierung eines idealen Geräts. Indem Sie ein Modell der PCS als echtes Gerät erstellen, können Sie den Farbverwaltungsprozess nutzen, der im Smart CMM verwendet wird. Das Erstellen eines Gerätemodells von der Farbmetrik zur PCS-Codierung ist einfach. Sie ordnen einfach zwischen den tatsächlichen farbmetrischen Werten und den PCS-codierten Werten zu. Da die CMS-Schnittstelle für Gerätemodelle nur XYZ-Werte unterstützt, müssen Sie möglicherweise auch XYZ und LAB zuordnen. Dies ist eine bekannte Transformation. Dieses Modell wird im Dokument 2.2.02 "Baseline Device Models" in den Abschnitten 7.9 und 7.10 beschrieben.

Möglicherweise müssen Sie eine Gamutzuordnung durchführen, wenn der Gamut des Geräts größer als der Gamut der PCS ist. Die basiswerten GMMs können zu diesem Zweck verwendet werden. Beachten Sie, dass ein ordnungsgemäß erstelltes ICC-Profil Über Suchtabellen für die Absichten Relative Colorimetric, Perceptual und Saturation verfügt, obwohl diese intern auf dieselbe LUT verweisen können.

Diagramm, das die Erstellung eines A T o B L U T zeigt.

Abbildung 5: Erstellen einer AToB-LUT

Dieser Vorgang wird in Abbildung 5 veranschaulicht. Zunächst wird das Gerätemodell aus den Daten im DM-Profil initialisiert. Erstellen Sie dann wie folgt eine Geräte gamut-Grenze. Eine Stichprobenentnahme von Daten aus dem Gerätemodell wird über das Gerätemodell ausgeführt, um farbmetrische Daten zu erhalten. Die farbmetrischen Daten werden über die CAM ausgeführt, um Darstellungsdaten zu erstellen. Die Darstellungsdaten werden verwendet, um die Geräteskalagrenze zu erstellen.

Verwenden Sie als Nächstes Daten aus dem REFERENZ-PCS-Messprofil, um eine Gamutgrenze für die PCS zu erstellen.

Verwenden Sie die beiden soeben erstellten Gamut-Grenzen, um ein GMM zu initialisieren. Verwenden Sie dann das Gerätemodell, das GMM und das PCS-Gerätemodell, um eine Transformation zu erstellen. Führen Sie eine Stichprobe des Gerätebereichs durch die Transformation aus, um eine AToB-LUT zu erstellen.

Diagramm, das die Erstellung eines A T o B L U T unter Verwendung einer Stichprobenentnahme des P C S-Raums zeigt.

Abbildung 6: Erstellung einer BToA-LUT

Abbildung 6 veranschaulicht die Erstellung der BToA-LUT. Dies ist fast identisch mit der Erstellung einer AToB-LUT, bei der die Rollen von Quelle und Ziel ausgetauscht werden. Außerdem müssen Sie den gesamten PCS-Gamut abtasten, um die LUT zu erstellen.

Beachten Sie, dass, da die CAM (CIECAM02 in WCS) am Prozess beteiligt ist, die chromatische Anpassung zwischen dem Medienweißpunkt und dem PCS-Weißpunkt (von ICC vorgeschrieben, D50) transparent durch die CAM erfolgt.

VIRTUELLE HDR-RGB-Geräte

Bei der Erstellung von Profilen für virtuelle HDR-RGB-Geräte ist besonderes Augenmerk zu berücksichtigen; d. h. Geräte, für die die Farbmittelwerte kleiner als 0,0 oder größer als 1,0 sein können. Bei der Generierung der ATOB LUT wird ein größerer Satz von 1D-Eingabe-LUTs erstellt. Farbmittelwerte werden skaliert und auf den Bereich 0 versetzt. 1 unter Verwendung der minimalen und maximalen Farbmittelwerte im WCS-Profil.

Da der Farbraum für HDR-Geräte wahrscheinlich nicht vollständig aufgefüllt ist, wird auch in der 3D-LUT für das Tag eine besondere Unterstützung bereitgestellt. Um Farben im dünn gefüllten Bereich zu verarbeiten, werden die Farbstoffe neu codiert, sodass eine Extrapolation über 0,0 und 1,0 hinaus erreicht werden kann. Der verwendete Bereich ist -1 . +4.

Aufgrund der für die 3D-LUT angewendeten Neuskalierung wird ein Satz von 1D-Ausgabe-LUTs erstellt, um das Ergebnis wieder dem Bereich 0 zuzuordnen. 1.

Mehr als ein PCS

Das ICC stellte fest, dass ein PCS nicht flexibel genug war, um alle beabsichtigten Verwendungsmöglichkeiten eines CMS zu erfüllen. In Version 4 der Profilspezifikation hat der ICC klargestellt, dass es tatsächlich zwei PCS-Codierungen gibt. Eins wird für die farbmetrischen Absichten verwendet; ein anderer wird für die wahrnehmungsbezogene Absicht verwendet. (Für die Absicht "Sättigung" ist kein PCS angegeben. Der ICC hat diesen Teil mehrdeutig gelassen.) Die farbmetrischen PCS haben eine minimale und maximale Helligkeit angegeben, aber die Chroma- und Farbtonwerte liegen in etwa ± 127. Diese PCS sieht wie ein rechteckiges Prisma aus. Wie bereits erwähnt, ähnelt das perzeptive PCS-Volumen der Farbskala eines Tintenstrahldruckers.

Die beiden ICC-PCS haben auch zwei verschiedene digitale Codierungen. In der wahrnehmungsbasierten PCS stellt ein Wert von 0 (null) eine Leichtigkeit von 0 (null) dar. In der farbmetrischen PCS stellt der Wert 0 (null) die minimale Helligkeit des PCS dar, die größer als 0 (null) ist. Sie können dieses Problem lösen, indem Sie ein anderes Gerätemodell für jede der PCS-Codierungen verwenden.

Gamut-Zuordnung

Um die AToB-LUTs in einem ICC-Profil zu erstellen, ordnen Sie die Geräteskala dem entsprechenden PCS-Bereich zu. Um die BToA-LUTs zu erstellen, ordnen Sie den PCS-Bereich der Geräteskala zu. Die Zuordnung für die AToB-LUTs ähnelt der in einem messbasierten CMS verwendeten. Ordnen Sie für die wahrnehmungsbasierten PCS den plausiblen Gamut des Geräts der perzeptuellen PCS-Gamutgrenze zu, indem Sie entweder Clipping oder Komprimierung für beliebige Farben außerhalb des Gamut-Bereichs verwenden. Für die farbmetrischen Absichten müssen Sie möglicherweise die Helligkeit abschneiden, aber die Chroma- und Farbtonwerte passen alle in den farbmetrischen PCS-Gamut.

Die Zuordnung für die BToA-LUTs ist etwas anders. Die farbmetrischen Absichten sind immer noch einfach; Sie schneiden pcS-Werte einfach in die Geräteskala ab. Der ICC erfordert jedoch, dass alle möglichen PCS-Werte einem Gerätewert zugeordnet werden, nicht nur denen innerhalb der Referenzskala der wahrnehmungsbasierten PCS. Daher müssen Sie sicherstellen, dass die GMMs Quellfarben verarbeiten können, die außerhalb der Referenzskala liegen. Dies kann durch Ausschneiden dieser Farben an die Geräte gamut-Grenze behandelt werden.

Grundlegende Zuordnung von Geräte- zu ICC-Profilklassen

Basisgerätetyp ICC-Profilklasse Anmerkung
RGB-Aufnahmegerät Eingabegerät ("scnr") PCS ist CIELAB. AToB0Tag ist Device to PCS mit relativer farbmetrischer Absicht.
CRT, LCD-Monitor Anzeigegerät ("mntr") PCS ist CIEXYZ. Informationen zur Modellkonvertierung finden Sie im Folgenden.
RGB-Projektor Farbraum ("Spac") PCS ist CIELAB.
RGB- und CMYK-Drucker Ausgabegerät ("prtr") PCS ist CIELAB.
Virtuelles RGB-Gerät (Nicht-HDR-Fall) Anzeigegerät ("mntr") PCS ist CIEXYZ.
Virtuelles RGB-Gerät (HDR-Fall) Farbraum ("Spac") PCS ist CIELAB.

 

Die Konvertierung von Monitorprofilen umfasst keine Erstellung von LUTs, sondern besteht stattdessen aus dem Erstellen einer Matrix oder eines TRC-Modells. Das modell, das in ICC verwendet wird, unterscheidet sich geringfügig von dem, das in der WCS CRT- oder LCD-Modellierung verwendet wird, da der Begriff "Schwarze Korrektur" fehlt. Sie haben folgende Möglichkeiten:

WCS-Modell: Zeigt ein W C S-Modell an.

ICC-Modell: Zeigt ein I C C-Modell an.

Die Konvertierung vom WCS-Modell in das ICC-Modell erfolgt wie folgt.

Definieren sie neue Kurven:

Zeigt eine Matrix zum Definieren neuer Kurven an.

Dies sind keine Tonwiedergabekurven, da sie nicht 1 bis 1 abbilden. Eine Normalisierung wird dies erreichen. Die endgültigen Definitionen des ICC-Modells sind:

Zeigt die endgültigen Definitionen des I C C-Modells an.

Zeigt die endgültige Matrix für das I C C-Modell an.

Für virtuelle Nicht-HDR-RGB-Geräte generieren Sie auch ein ANZEIGE-ICC-Profil für die Raumeffizienz. In diesem Fall kann die Tristimulusmatrix M ICC direkt aus den Primaren des WCS-Profils ohne die obige Modellumwandlung abgerufen werden. Eine letzte, aber wichtig, beachten Sie, dass diese Tristimulusmatrix chrommatisch an D50 angepasst werden muss, um der ICC-Spezifikation des PCS zu entsprechen. Anders ausgedrückt: Die Einträge in jeder Zeile der Matrix, die im ICC-Profil codiert werden soll, müssen sich auf 96,42, 100 und 82,49 summieren. In der aktuellen Implementierung erfolgt die chromatische Anpassung durch CAT02, die auch die in CAM02 verwendete chromatische Anpassungstransformation ist.

Black Preservation und Black Generation

Die Implementierung der Black-Erhaltung ist mit der Generierung des schwarzen Kanals in Geräten verbunden, die einen schwarzen Kanal unterstützen. Um dies zu erreichen, werden Informationen zu jeder Quellfarbe gesammelt, damit Gerätemodelle, die einen schwarzen Kanal unterstützen, bestimmen können, wie der schwarze Kanal am besten für die Ausgabe festgelegt werden kann. Während die Schwarzkonservierung für Farbtransformationen relevant ist, die zwischen einem Schwarzkanalgerät in ein anderes konvertieren, wird die Schwarzgenerierung für alle Transformationen implementiert, die ein Zielgerät mit schwarzem Kanal umfassen.

Schwarze Kanalinformationen werden in einer Datenstruktur namens BlackInformation aufgezeichnet. Die BlackInformation-Struktur enthält einen booleschen Wert, der angibt, ob die Farbe nur schwarze Farbmittel enthält, und einen numerischen Wert, der den Grad der "Schwärzung" angibt, der als Schwarzgewicht bezeichnet wird. Bei Quellgeräten, die einen schwarzen Kanal unterstützen, entspricht die Schwarzgewichtung dem Prozentsatz des schwarzen Farbmittels in der Quellfarbe. Bei Quellgeräten, die keinen schwarzen Kanal enthalten, wird die schwarze Gewichtung mit den anderen Farbmitteln und dem Darstellungswert berechnet. Ein Wert namens "Farbreinheit" wird berechnet, indem die Differenz zwischen dem maximalen Farbmittelwert und dem minimalen Farbmittelwert dividiert durch den maximalen Farbmittelwert verwendet wird. Ein Wert namens "relative Helligkeit" wird berechnet, indem der Unterschied zwischen der Helligkeit der Farbe und der minimalen Helligkeit für das Zielgerät dividiert durch die Differenz zwischen der minimalen und der maximalen Helligkeit für das Zielgerät verwendet wird. Wenn es sich bei dem Quellgerät um ein additives Gerät (Monitor oder Projektor) handelt, wird das Schwarzgewicht als 1,0 abzüglich der Farbreinheit multipliziert mit der relativen Helligkeit bestimmt. Wenn es sich bei dem Quellgerät beispielsweise um einen RGB-Monitor handelt, werden der Maximalwert und der Mindestwert von R, G und B für jede Farbe berechnet, und die Schwarzgewichtung wird durch die Formel bestimmt:

BW = (1,0 – (max(R,G,B) – min(R,G,B)) / max(R, G, B)) * relative Leichtigkeit

Wenn das Quellgerät subtraktive Farbgebung unterstützt, z. B. einen CMY-Drucker, müssen die einzelnen Farbstoffe "ergänzt" (subtrahiert von 1,0) sein, bevor sie in der obigen Formel verwendet werden. Daher gilt für einen CMY-Drucker R = 1,0 – C, G = 1,0 – M und B = 1,0 – Y.

Die schwarzen Informationen für jede Farbe, die von der Farbtransformation verarbeitet wird, werden während des Farbübersetzungsprozesses bestimmt. Die Nur-Schwarz-Informationen werden nur bestimmt, wenn die Schwarzkonservierung angegeben ist. Die Schwarzgewichtung wird immer bestimmt, wenn das Zielgerätemodell einen schwarzen Farbstoff unterstützt. Die schwarzen Informationen werden über die ColorimetricToDeviceColorsWithBlack-Methode , die die resultierende LUT verwendet, an das Zielgerätemodell übergeben.

Beachten Sie, dass der obige Prozess aufgrund der Optimierung der Farbtransformation nur während der Erstellung der optimierten Transformations-LUT und nicht während der Ausführung der TranslateColors-Methode auftritt.

Optimierung für Transformationen mit mehr als drei Quellkanälen

Die Größe der optimierten Transformation wird durch mehrere Faktoren bestimmt: die Anzahl der Farbkanäle im Quellgerät, die Anzahl der Schritte in der Tabelle für jeden Quellfarbkanal und die Anzahl der Farbkanäle im Ausgabegerät. Die Formel zum Bestimmen der Größe der Transformationstabelle lautet:

Größe = Anzahl der Schritte pro Kanalquelle\ Gerät(Anzahl\ von \ Kanälen \ in \ Quelle \ Gerät) x Anzahl der Kanäle im Ausgabegerät

Wie Sie sehen können, wächst die Größe der Tabelle exponentiell abhängig von der Anzahl der Kanäle auf dem Quellgerät. Viele Quellgeräte unterstützen drei Farbkanäle, z. B. Rot, Grün und Blau. Wenn ein Quellgerät jedoch vier Kanäle unterstützt, z. B. CMYK, werden die Größe der Tabelle und die zum Erstellen der Tabelle erforderliche Zeit um einen Faktor der Anzahl der Schritte vergrößert. In einem messbasierten CMS, in dem Transformationen "on the fly" erstellt werden, kann dieses Mal durchaus inakzeptabel sein.

Um den Zeitaufwand für die Erstellung der Farbkonvertierungstabelle zu reduzieren, ist es möglich, zwei Fakten zu nutzen. Erstens kann das Quellgerät mehr als drei Farbkanäle unterstützen, der geräteunabhängige Zwischenfarbraum (CIECAM02 Ja C b C ) verfügt jedoch nur über drei Farbkanäle. Zweitens ist der zeitaufwändigste Teil der Verarbeitung nicht die Gerätemodellierung (Konvertierung von Gerätefarbkoordinaten in Tristimulus-Werte), sondern die Gamutzuordnung. Anhand dieser Fakten können Sie eine vorläufige Farbkonvertierungstabelle erstellen, die Farben im geräteunabhängigen Farbraum über die Gamutzuordnungsschritte und schließlich über das Farbmodell des Ausgabegeräts konvertiert. Die Konstruktion dieser Tabelle ist von Dimension 3. Anschließend erstellen wir die letzte Farbkonvertierungstabelle der Dimension vier, indem wir die Quellfarbkombinationen in einen geräteunabhängigen Zwischenraum konvertieren und dann die Konvertierung in den Farbraum des Ausgabegeräts mithilfe der vorläufigen Farbkonvertierungstabelle abschließen. So reduzieren Sie von der Berechnung (Anzahl der Schritte in der Nachschlagetabelle) die Anzahl\ der Kanäle auf die Anzahl der Schritte in der Zwischentabelle ₃ Gamut-Zuordnungsberechnungen. Obwohl Sie die Anzahl der Schritte in den (Nachschlagetabellen)- Kanalberechnungen der Gerätemodellierung und der dreidimensionalen Tabellensuche ausführen müssen, ist dies immer noch viel schneller als die ursprüngliche Berechnung.

Der vorherige Prozess funktioniert gut, sofern keine Informationen zwischen dem Quellgerätemodell und einer anderen Komponente in der Farbtransformation übergeben werden müssen. Wenn das Ausgabegerät und das Quellgerät jedoch beide einen schwarzen Farbstoff unterstützen und der schwarze Quellfarbstoff zum Bestimmen des schwarzen Ausgabefarbstoffs verwendet wird, kann der Prozess die schwarzen Quellinformationen nicht ordnungsgemäß kommunizieren. Ein alternativer Prozess besteht darin, eine vorläufige Farbkonvertierungstabelle zu erstellen, die Farben im geräteunabhängigen Farbraum nur über die Schritte zur Gamutzuordnung konvertiert. Erstellen Sie dann die letzte Farbkonvertierungstabelle der Dimension vier mit den folgenden Schritten: a) konvertieren Sie die Quellfarbkombinationen in einen geräteunabhängigen Zwischenraum, b) führen Sie die Schritte zur Gamutzuordnung durch Interpolieren in der vorläufigen Farbtabelle aus, anstatt die eigentlichen Gamut-Zuordnungsprozesse anzuwenden, und c) verwenden Sie die resultierenden Werte aus den Gamut-Zuordnungsschritten und allen Quellkanalinformationen, um die Farbstoffe des Ausgabegeräts mithilfe des Ausgabegerätemodells zu berechnen. Dieser Prozess kann auch verwendet werden, wenn Zwischen dem Quell- und Ausgabegerätemodell Informationen übertragen werden, auch wenn kein schwarzer Kanal vorhanden ist. Beispielsweise, wenn die beiden Module mit einer Plug-In-Architektur implementiert sind, die den Datenaustausch zwischen Modulen ermöglicht.

Die beiden vorherigen Prozesse können verwendet werden, um die zeitintensive Erstellung der vierdimensionalen Farbtransformationstabelle effektiv zu verbessern.

CheckGamut

Die ICM-Aufrufe CreateTransform und CreateMultiProfileTransform verwenden ein Wort von Flagwerten, von denen einer ENABLE_GAMUT_CHECKING ist. Wenn dieses Flag festgelegt ist, muss CITE die Transformation anders erstellen. Die anfänglichen Schritte sind identisch: Die Quell- und Ziel-CAMs müssen initialisiert werden, dann müssen die Deskriptoren der Quell- und Zielskala initialisiert werden. Unabhängig von der angegebenen Absicht muss checkGamut GMM verwendet werden. Das CheckGamut-GMM sollte mit den Quell- und Zielgerätemodellen und den Gamut-Begrenzungsdeskriptoren initialisiert werden. Die Transformation sollte dann jedoch eine abgeschnittene Transformation erstellen, die das Quellgerätemodell, die Quell-CAM, alle dazwischen liegenden GMMs und das CheckGamut GMM umfasst. Dadurch wird sichergestellt, dass die vom CheckGamut CMM ausgegebenen Delta-J-, Delta C- und Delta h-Werte die endgültigen resultierenden Werte werden.

Die Bedeutung von CheckGamut ist klar, wenn die Transformation nur zwei Geräteprofile enthält. Wenn mehr als zwei Geräteprofile und mehr als zwei GMMs vorhanden sind, meldet CheckGamut, ob die Farben, die über das erste Gerätemodell und alle mit Ausnahme der letzten GMM transformiert wurden, in den Bereich des Zielgeräts fallen.

Grundlegende Farbverwaltungskonzepte

Windows Color System: Schemas und Algorithmen