Schema och algoritmer för WCS-gamutkartad modellprofil

Överblick

Det här schemat används för att ange innehållet i en gmmp (gamut map model profile). De associerade baslinjealgoritmerna beskrivs i följande avsnitt.

Det grundläggande GMMP-schemat består av gemensam rubrikinformation, en valfri referens till ett föredraget plugin-program för Gamut Map Model och tilläggstaggar.

Dessutom tillhandahåller GMMP explicit information om den målinriktade gamut-kartmodellen och tillhandahåller en princip för baslinjeåterställningsmodellen för gamutkarta som ska användas om målmodellen inte är tillgänglig. Schemat kan innehålla information om privata tillägg, men innehåller ingen annan överflödig information.

Arkitektur för gamut-kartmodellprofil

diagram som visar profilen för gamutkartad modell.

Samplingen av utdataenhetens färgämnen görs genom att iterera genom färgämnena från 0,0 till 1,0 med ett bråksteg, ackumulera alla kombinationer av varje färgämnen i varje steg och sedan konvertera dem från enhetens färgutrymme till färgutseendeutrymme med hjälp av metoden DM::D eviceToColorimetricColors följt av metoden CAM::ColorimetricToAppearanceColors. Följande är ett exempel på hur detta görs för 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);

          }

     }

}

Generering av gamut-gränsen

Det finns tre komponenter till omfångsgränsen: primärvalen, neutrala exempel och skalen. Primärvalen genereras genom att enhetens primärinställningar används och deviceToColorimetric/ColorimetricToAppearance-omvandlingen tillämpas. De neutrala exemplen genereras genom sampling av enhetens färgämnen i det neutrala området och samma transformering tillämpas. För tre färgenheter (RGB eller CMY) definieras de neutrala exemplen som att alla färgämnen är lika med, till exempel R == G == B. För CMYK definieras de neutrala exemplen som C == M == Y == 0.

De faktorer som påverkar de data som används för att skapa omfångsgränsen är dataexemplen (endast baslinjeenheter) och visningsvillkoren. Den stegstorlek som används för att utföra den fullständiga samplingen av färgrymden (för övervakare och för rimligt gränssnitt) är en intern konstant och är inte tillgänglig för extern manipulering. Om du ändrar visningsvillkoren ändras beteendet för modellen för färgutseende (CAM) och formen på omfångsgränsen ändras, så du måste generera en omfångsgräns som är kopplad till profilen för visningsvillkor. Om exempeldata används, som när det gäller baslinjeskrivare och avbildningsenheter, har exemplen stor inverkan på referensomfångets form och påverkar själva modellens beteende.

För indataenheter, till exempel kameror och skannrar, används olika samplingar för att generera referensgränssnittet och det rimliga gränssnittet. Referensgränssnittet genereras från de mått som används för att initiera enhetsmodellen. Det rimliga gränssnittet genereras ungefär som föregående bild för utdataenheter. Skillnaden är att när du anger ett typiskt mål får du inte helt mättade värden (där R, G eller B = 255). Du måste extrapolera med enhetsmodellen för att uppskatta dessa värden.

GMMP-schemat

<?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>

GMMP-schemaelementen

GamutMapModel

Det här elementet är en sekvens med följande underelement:

  1. ProfileName-sträng,
  2. DefaultBaselineGamutMapModel,
  3. Valfri beskrivningssträng,
  4. Valfri redigeringssträng,
  5. Valfri PlugInGamutMap och
  6. Valfri ExtensionType.

verifieringsvillkor : Varje underelement verifieras av sin egen typ.

Namespace

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

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

Utgåva

Version "1.0" med den första versionen av Windows Vista.

verifieringsvillkor : 1.0 i Windows Vista. Versioner <2.0 är också giltiga för att stödja icke-icke-icke-bakåtkompatibla ändringar i formatet.

Dokumentation

Schema för gamut-kartmodellprofil.

Copyright (C) Microsoft. Alla rättigheter reserverade.

verifieringsvillkor : Varje underelement verifieras av sin egen typ.

DefaultBaselineGamutMapModel-typ

UINT-typ

Uppräkningsvärden:

"MinCD\_Absolute" "MinCD\_Relative" "SIG\_KNEE" "HueMap"

verifieringsvillkor : Värdena måste matcha en av uppräkningarna ovan.

PlugInGamutMapType

Det här elementet är en sekvens av en GUID GUIDType och eventuella underelement.

verifieringsvillkor: GUID används för att matcha GMM PlugIn DLL GUID. Det finns högst 100 000 anpassade underelement.

ExtensionType (Tilläggstyp)

Det här elementet är en valfri sekvens av alla underelement.

verifieringsvillkor: Det kan finnas högst 100 000 underelement.

GMMP-baslinjealgoritmerna

Justera de neutrala axlarna

De flesta algoritmer för omfångsmappning har som mål att mappa källenhetens neutrala axel till målenhetens neutrala axel: det vill sa att vitt blir vitt, svart till svart och grått till grått. Detta åtgärdas delvis genom att skala ljusheten i källfärger för att matcha målenhetens ljushetsintervall. Men det löser inte problemet helt.

Det är en fysisk egenskap hos de flesta avbildningsenheter att enhetens vita kromaticity inte exakt matchar enhetens kromaticity för enheten svart. Övervakning av vitt beror till exempel på summan av kromaticiteterna och den relativa luminansen för de tre primärvalen, medan skärmsvart beror på visningsytans återgivning. Skrivarens vita färg beror på papperets kromaticity, medan svart skrivare är beroende av pennanteckningen eller tonern som används. En utseendemodell som mappar enheten vit exakt till den neutrala axeln i utseendeutrymmet (chroma exakt lika med noll) mappar inte enheten svart till den neutrala axeln. Eftersom ögat är mer känsligt för kroma skillnader som ljushet ökar, kommer mitten grå representeras som ännu mer kromatisk än enheten svart. (Bild 1 illustrerar krökningen av de neutrala axlarna i två dimensioner. Faktum är att de neutrala axlarna bildar en mer komplex kurva i tre dimensioner.)

Medan CAM förutsäger att dessa enhetsneutrala färger kommer att verka kromatiska, verkar faktiska observatörer kompensera för detta. De flesta anser inte att dessa enhetsneutrala värden är kromatiska. För de flesta modeller för omfångsmappning bör du därför fortsätta mappa källneutrala till enhetsneutrala.

Om du vill mappa källneutrala till enhetsneutrala justerar du gränserna för käll- och målomfång och varje bildpunkt när du använder algoritmen för omfångsmappning. Justera först varje värde i källfärgen så att källenhetens neutrala axel vid källfärgens ljushet hamnar direkt på den neutrala axeln i utseendeutrymmet. (Se vänster sida av bild 1.) Justera sedan målenhetens beskrivning av omfångsgräns så att varje färg på målenhetens neutrala axel vid målenhetens omfångsgränsfärgs ljushet hamnar direkt på den neutrala axeln i utseendeutrymmet. (Se höger sida av bild 1.)

diagram som visar diagrammet Källomfångsgräns till vänster och målomfångsgränsen till höger.

bild 1 : Justering av de neutrala axlarna som illustreras. Vänster: Justera källpunkter i förhållande till källenhetens neutrala axel. Höger: Justera beskrivningen av målomfångsgräns i förhållande till målområdets gränsbeskrivning.

Observera att du justerar varje källpixelvärde i förhållande till den neutrala axeln vid det ljushetsvärdet. Detta säkerställer att källenhetsneutrala kommer att falla på den neutrala axeln i utseendemodellen. Du kan också flytta alla andra färger vid samma ljushet med samma mängd, så att det inte finns några avbrott i representationen av källomfånget. Du måste skifta med olika mängder på olika ljushetsnivåer, eftersom källenhetsneutrala inte representeras som lika kromatiska på olika ljushetsnivåer. Det är uppenbart att detta inte är en trivial omvandling.

Det är lite svårare att hantera målenhetsvärdena. Inledningsvis justerar du hela målomfångsgränsen på ett liknande sätt, men i förhållande till målenhetens neutrala axel. Detta illustreras i bild 1 på höger sida. Den justeringen säkerställer att källgrå värden mappas till målgrå värden. Det här är det utrymme där algoritmerna för omfångsmappning fungerar.

Det här utrymmet beskriver dock inte målenhetens verkliga beteende korrekt. Du måste invertera mappningen innan omfångsmappade färger överlämnas till utseendemodellen och målenhetsmodellen. Du förskjuter alla mappade värden med motsatsen till den förskjutning som tillämpades tidigare på målenhetens neutrala axel. Detta mappar målneutralaxeln tillbaka till det värde som ursprungligen representeras av CAM. Den gör samma sak för omfångsgränsen och alla mellanliggande värden.

diagram som visar ett diagram för att ångra justeringen av målenhetens neutrala axel.

bild 2: Ångra justeringen av målenhetens neutrala axel

Minsta färgskillnad (MinCD)

Minsta färgskillnad (MinCD) relativa och absoluta versioner – motsvarande avsikten ICC colorimetric.

Not

MinCD GMM är lämplig för att mappa grafik och linjekonst som innehåller "logotyp" färger (dekorfärger), logotyp färg toningar med några out-of-gamut färger, och för den sista fasen av proofing transformeringar. MinCD GMM kan användas för fotografiska bilder som ligger helt inom målomfånget, men det rekommenderas inte för allmän återgivning av fotografiska bilder. Mappningen av out-of-gamut färger till färger på målomfångsytan kan resultera i oönskade artefakter, till exempel ton- eller kroma-oegentligheter i släta toningar som korsar omfångsgränsen. BasicPhoto rekommenderas för fotografiska bilder. Om en fotografisk eller contone-bild kräver en annan omfångsmappning än BasicPhoto bör alternativet vara att skapa ett plugin-program som implementerar mappningen i stället för att använda MinCD.

 

In-gamut färger lämnas oförändrade. För out-of-gamut färger justeras ljushet och krom genom att hitta punkten i målomfånget som har det minsta färgavståndet från out-of-gamut indatapunkter. Färgavståndet beräknas i JCh-blanksteg. Men du viktar avståndet i lätthet (J) och avståndet i krom (C) eller nyans (h) på olika sätt. En kromberoende viktfunktion används för avståndet i ljushet så att vikten är mindre för liten kroma och större för stor kroma tills en tröskelkroma nås, varefter vikten ligger kvar på 1, det vill sa samma vikt som avståndet i kroma eller nyans. Detta följer rekommenderad användning för CMC och CIEDE2000. Det finns två varianter: Relativ colorimetric och absolut colorimetric.

Relativ färgmått: Först justerar du käll- och målneutrala axlar enligt beskrivningen ovan. Klipp sedan den justerade källfärgen till den justerade målomfångsgränsen. (Se bild 4. Chroma-mappning längs konstant lätthet.) Justera målenhetsvärdena enligt beskrivningen tidigare. När det gäller en monokrom målomfångsgräns innebär kromurklippet att kromavärdet (C) är inställt på noll (0,0).

Absolut färgmått: Detta liknar relativ colorimetric, men utan justering av käll- och målneutralaxeln. Källvärdet klipps direkt till målneutralaxeln. Observera att om både käll- och målomfångsgränserna är monokroma är beteendet identiskt med den relativa colorimetric-varianten. den neutrala axelns justering utförs, och sedan klipps kroman till noll. Detta säkerställer att en rimlig utdata uppnås även om media och färgämnen skiljer sig avsevärt.

diagram som visar ett diagram för MinCD-urklipp till det justerade omfånget.

bild 3: MinCD-urklipp till det justerade omfånget

BasicPhoto

Överblick

BasicPhoto – motsvarande den önskade ICC-avsikten, bildobjektet eller den perceptuella avsikten.

Den här algoritmen är en variant av den kromaberoende sigmoidal ljushetsmappningen och cusp knäskalning (SGCK) som beskrivs av CIE TC8-03 i CIE156:2004. Den här variantalgoritmen stöder gamut-gränsbeskrivningar (GBD) med dubbla skal med omfång. det vill: GBD:er med ett referensgränssnitt och ett troligt gränssnitt. SGCK-algoritmen, som ursprungligen endast förutsätter ett gamut shell i GBD, baseras på den SIG_KNEE algoritmen (Braun 1999), som innehåller den sigmoidala ljushetsmappning och knäfunktionsskalning som föreslagits av Braun och Fairchild (1999), kombinerat med kromberoendet från GCUSP (Morovic, 1998). Den håller upplevd nyans konstant, till exempel nyansvinkel i hue-korrigerad Jab, och använder en generisk (bildoberoende) sigmoidal ljushetsskalning som tillämpas på ett kromberoende sätt och en 90 procent knäfunktionskrom. Varianten skalar längs linjer med konstant lätthet.

Fallet med ett skal med enkelt omfång

Det är bra att granska algoritmen i det fall där både käll- och mål-GBD:er bara har ett gamut-gränssnitt. I det här fallet består algoritmen av följande beräkningar.

Börja med att utföra inledande ljushetsmappning med hjälp av följande formel:

Visar formeln för inledande ljushetsmappning. (1)

där Jₒ är den ursprungliga lättheten och JR är reproduktionsljuset.

Visar den andra formeln för ljushetsmappning. (2)

När källomfångsgränsen är monokrom blir kromvärdet noll för den monokroma gränsen på grund av neutral axeljustering. Detta resulterar i det degenererade fallet där C är lika med noll. I det här fallet är pC inställt på 1.

pC är en chroma-beroende viktningsfaktor (Morovic, 1998) som beror på krom av den ursprungliga färgen, C och JS är resultatet av den ursprungliga lättheten som mappas med hjälp av en sigmoidal funktion.

 

För att beräkna JS (Braun och Fairchild, 1999) konfigureras först en endimensionell uppslagstabell (LUT) mellan original- och reproduktionsljushetsvärdena på grundval av en diskret kumulativ normal funktion (S).

Visar en formel för att beräkna J s. (3)

där x ₀ och S är medelvärdet och standardavvikelsen för den normala fördelningen respektive i = 0,1,2... märm antalet punkter som används i LUT. Si är värdet för den kumulativa normalfunktionen för i /m procent. Parametrarna beror på ljusheten hos den svarta punkten i reproduktionsskalan och kan interpoleras från tabell 1. Mer information om hur du beräknar dessa parametrar finns i Braun och Fairchild (1999, s. 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

Tabell 1 : Beräkning av parametern BasicPhoto-ljushetskomprimering

Om du vill använda S som en ljushetsmappning av LUT (S LUT ) måste den först normaliseras till ljushetsintervallet [0 100]. Normaliserade data skalas sedan in i målenhetens dynamiska omfång, enligt ekvation 4, där Jmin\ Out och Jmax\ Out är värdena för ljushet i den svarta punkten och den vita punkten i reproduktionsmediet. respektive.

Visar formeln för S som en ljushetsmappning av LUT. (4)

I det här läget kan J S- värden hämtas från S LUT- genom att interpolera mellan de m punkter för motsvarande J O' och J S- värden som den innehåller och använda följande ekvation som indata.

Visar formeln för att hämta J S-värdena. (5)

J minIn är ljushetsvärdet för den svarta punkten i det ursprungliga mediet, J maxIn är ljushetsvärdet för den vita punkten i det ursprungliga mediet och J O är den ursprungliga lättheten. För senare referens kan du ange genom att S sigmoidalfunktionen som definierats på det sätt som just beskrivits, enligt följande bild 4.

diagram som visar grafen för krommappning längs konstant ljushet.

bild 4: Chroma-mappning längs konstant lätthet

För det andra, om målomfångsgränsen är kromatisk, komprimerar du krom längs linjer med konstant ljushet (l) och utför komprimering enligt följande.

Visar formeln för att utföra kromkomprimering. (6)

där d representerar avståndet från El;g representerar medelomfångsgränsen. r representerar reproduktionen. och o den ursprungliga bild 5.

diagram som visar grafen för komprimering av krom och ljushet i BasicPhoto.

bild 5: Chroma och ljushetskomprimering i BasicPhoto

Om målomfångsgränsen är monokrom klipps kromvärdet till noll.

För det tredje använder du ett MinCD-klipp (beskrivs tidigare) för att eliminera eventuella kvarvarande fel.

Svart förbättring

Föregående algoritm kan ändras för att förbättra det svarta när målet är en skrivarenhet. Problemet har att göra med valet av JminOut, vilket vanligtvis inte motsvarar den mörkaste färg som en skrivare kan producera.

Mer specifikt är färgen med högsta densitet, som erhålls genom att sätta 100 procent bläck (eller maximal möjlig täckning, om GCR/ bläckbegränsning är i kraft), vanligtvis inte "neutral" i färgutseendeutrymmet. Se bild 6. Med andra ord, om neutral minsta ljushet används för målenheten, mappas ljushetsskalaren till en minsta ljushet som inte är den högsta densiteten som kan uppnås av skrivaren. Överväg det ytterligare användningsfallet för bildskärm till skrivare. Skärmen svart, R=G=B=0, skrivs sedan ut som inte den högsta densiteten. Effekten på bildkvaliteten är att det saknas djup och kontrast.

diagram som visar hur enhetens svarta punkt kan vara mörkare än den neutrala minsta ljusheten.

bild 6: Enhetens svarta punkt kan vara mörkare än den neutrala minsta ljusheten.

Anta att målet "enhetens svarta punkt" är Jkakbk/JkCkh k. Om C k inte är noll är enhetens svarta punkt inte neutral i förhållande till CAM02. Om du använder J k för målet "neutral minsta ljushet" i konstruktionen av lightness scaler; det vill: ställa in

JminOut = Jk

och tillämpa den på källomfångsgränssnittet hämtar du konfigurationen som visas i bild 7. I bilden motsvarar nyansplanet h k.

diagram som visar den ändrade ljushetsskalaren med målenhetens svarta punkt.

bild 7 : Geometri med den modifierade ljushetsskalaren med målenhetens svarta punkt

Om du vill tillåta att den efterföljande algoritmen för kromkomprimering fortsätter vill du justera maximal och minsta ljushet på käll- och målgränssnitten. Detta kan uppnås genom att justera målgränssnittet mellan J neutralMin och J k genom att flytta punkter till vänster. Dessutom måste denna omvandling tillämpas på hela Jab-utrymmet, inte bara det nyansplan som motsvarar h k.

Omvandlingen är

Visar formeln för omvandlingen.

Bild 8 visar effekten av omvandlingen.

diagram som visar effekten av den ändrade ljushetsskalningen med målenhetens svarta punkt.

bild 8 : Geometri med den modifierade ljushetsskalaren med målenhetens svarta punkt

När du har tillämpat den vanliga algoritmen för chroma-komprimering måste punkten sedan "skiftas tillbaka", dvs. den inverterade omvandlingen måste tillämpas för att få den slutliga mappade färgen.

Visar formeln för inverterad transformering för att hämta den slutliga mappade färgen.

Fallet med dubbla skal med omfång

Målet är att generalisera SIG_KNEE för ett skal med en skala till det fall där antingen källenhetens GBD eller målenhetens GBD har en struktur med två gränssnitt. Det inre gränssnittet kallas referensgränssnittet, medan det yttre gränssnittet kommer att kallas För troligt gränssnitt. Du vill överväga följande fall.

(a) Både käll-GBD och mål-GBD har en tvågränssnittsstruktur.

b) Käll-GBD:n har en tvåskalsstruktur. mål-GBD:en har bara ett gränssnitt.

(c) Käll-GBD:t har bara ett gränssnitt. mål-GBD:en har en tvågränssnittsstruktur.

(d) Både käll-GBD och mål-GBD har bara ett gränssnitt.

Fall (d) är fallet med ett skal med ett enda omfång som diskuterades tidigare. För fall (a), (b) och (c) kan du generalisera omskalningen av ljushet så att den extra informationen från strukturen med dubbla gränssnitt används. I fall (b) och (c) där antingen källan eller målet bara har ett gränssnitt introducerar du ett "inducerat referensgränssnitt" som kommer att diskuteras i ett senare avsnitt, "Induced Reference Shell". Den allmänna algoritmen för två gränssnitt beskrivs för fall (a). När induced Reference Shell-konstruktionen har förklarats kan algoritmen även tillämpas på skiftläge (b) och (c). När det gäller kromkomprimering bestäms komprimeringsförhållandet av de största tillgängliga skalen. Med andra ord, om både Det rimliga gränssnittet och referensgränssnittet är tillgängliga, kommer Det rimliga gränssnittet att användas. annars används referensgränssnittet.

Generaliserad ljushetsomskalning

Förekomsten av två gränssnitt för både käll- och mål-GBD innebär att du måste mappa en uppsättning med fyra punkter från käll-GBD till en motsvarande uppsättning i målets GBD.

Visar hur du mappar en uppsättning med fyra punkter till en motsvarande uppsättning.

De nedsänkta har följande betydelser.

o eller r: "original" (källa) eller "reproduktion" (mål)

min eller max: minsta neutrala ljushet eller maximal neutral ljushet

pla eller ref: Troligt gränssnitt eller referensgränssnitt

Ordningen i varje fyrdubbel är också den förväntade relativa omfattningen av dessa punkter.

Ljushetsomskalningskartan använder samma två första ekvationer som det enskilda gränssnittet, men J S- definieras på ett bitvis sätt enligt följande.

Visar formeln för J S på ett bitvis sätt. (7)

Med andra ord är det sigmoidal i referensgränssnittet och linjärt utanför. Se bild 9.

diagram som visar ett diagram för funktionen Ljushetsomskalning för GBD med två gränssnitt.

bild 9: Funktionen Ljushetsomskalning för GBD med två gränssnitt

INDUCED REFERENCE SHELL

Om en GBD har ett gränssnitt och den andra GBD:en har två gränssnitt måste du skapa ett "Referensgränssnitt" för GBD med endast ett gränssnitt. Det befintliga gränssnittet, som skulle kallas referensgränssnittet, ändras till "Plausible Shell". Faktum är att du inte behöver skapa ett gränssnitt i hela Jab-utrymmet. Eftersom ljushetsomskalningen endast använder J max och J minbehöver du bara kompensera dessa värden för det inducerade referensgränssnittet. Det finns två fall, beroende på vilken GBD som har två gränssnitt.

Fall 1: Käll-GBD har två gränssnitt; mål-GBD har ett gränssnitt.

Fastställ målinducerat referensgränssnitt på den neutrala axeln; D.v.s. J r,\ min,\ ref och J r,\ max,\ ref för gränssnittet. Detta görs med hjälp av följande algoritm.

Visar algoritmen för att fastställa målinducerat referensgränssnitt.

Faktorerna? låg och ? hög kontrollera separationen mellan Det rimliga gränssnittet och referensgränssnittet. Värdet 1 innebär att J-min värden eller J mₐₓ värden sammanfaller. Deras värden "induceras" från källreferensgränssnittet och källan Plausible Shell.

Visar formeln för värdena för källreferensgränssnittet och källan Plausible Shell.

De "fudge faktorer" F låg och F hög är tunable parametrar som måste ligga mellan 0 och 1. Om värdet är 0 induceras J-min eller J mₐₓ direkt från källgränssnitten. I det här fallet väljer du F låg = 0,95 och F hög = 0,1.

Fall 2: Käll-GBD har ett gränssnitt; mål-GBD har två gränssnitt.

Fastställ källinducerat referensgränssnitt på den neutrala axeln; det vill: J o,\ min,\ ref och J o,\ max,\ ref för gränssnittet. Detta görs med hjälp av följande algoritm.

Visar algoritmen för att fastställa målinducerat referensgränssnitt på den neutrala axeln.

Återigen, faktorerna? låg och ? hög kontrollera separationen mellan Det rimliga gränssnittet och referensgränssnittet. Värdet 1 innebär att J-min värden eller J mₐₓ värden sammanfaller. Deras värden "induceras" från källreferensgränssnittet och källan Plausible Shell:

Visar algoritmen för att styra separationen mellan referensgränssnittet och källans Rimliga gränssnitt.

Orsaker till ändringar från CIE TC8-03-rekommendationerna

BasicPhoto skiljer sig från CIE TC8-03-rekommendationerna på följande sätt.

  1. Chroma komprimeras inte mot cusp utan längs linjer av konstant lätthet.
  2. Ljushetsintervallet använder ljusheten i den mörkaste färgen i omfånget snarare än den punkt där omfångsgränsen korsar den neutrala axeln.
  3. BasicPhoto stöder både ett referensomfångsgränssnitt och ett rimligt skal för omfångsskalan i transformeringen har två gränssnitt.
  4. BasicPhoto använder CIECAM02; i stället för att använda CIECAM97s för att konvertera till D65 vid 400 cd/m2 och sedan använda RIT IPT-färgutrymme.

Den första ändringen gjordes för att förhindra problem med tonens inversion som kan uppstå när komprimering används mot en cusp. Som visas i bild 10 kan cusp-komprimering orsaka toninversioner. Detta kan inträffa när färger med hög kroma är ljusare än färger med lägre kroma. Eftersom SGCK komprimerar varje pixel oberoende av varandra i både ljushet och krom, är det inte garanterat att bevara ljushetsrelationen mellan pixelvärdena efter komprimering. Den välkända nackdelen med detta beslut att komprimera på linjer med konstant lätthet är att du kan drabbas av förluster av krom, särskilt i områden där målomfångsgränsen är mycket platt, vilket händer med ljusgula.

diagram som visar tonens inversion som orsakas av SGCK.

bild 10 : Tonens inversion orsakad av SGCK

Visar en originalbild av en tekanna. Visar SGCK-resultatet av tekannans bild. Visar BasicPhoto-resultatet av tekannans bild.

bild 11: Originalbild, SGCK-resultat och BasicPhoto-resultat

Bild 11 illustrerar den här tonens inversion. Till vänster finns en originalbild som tagits av en digitalkamera. i mitten, bilden som återges av SGCK; och till höger bilden som återges av BasicPhoto. Bilden till vänster finns i digitalkamerans färgrymd, mitten och högerbilderna är i färgrymden på en LCD-videovisning. I den ursprungliga bilden är den övre delen av tekannan mörkare än botten, eftersom botten återspeglar duken som den sitter på. I SGCK-bilden är den övre delen faktiskt ljusare än botten, på grund av tonens inversion. Dessutom är det svårt att se de objekt som återspeglas i den nedre delen av tekannan. Till höger har BasicPhoto korrigerat tonens inversion och de reflekterade artiklarna är tydligare urskiljbara.

Den andra ändringen gjordes för att förbättra reproduktionen av nästan svarta färger på skrivare där den svartaste svarta inte faller direkt på CIECAM02 neutral axel. Följande bild 12 visar en bild som konverterats till sRGB. återges för en RGB-bläckstråleskrivare med SGCK; och återges för samma skrivare med Hjälp av BasicPhoto. Bilden i mitten använder inte den fullständiga enheten svart, och därför saknar den kontrast som visas i originalet. Kontrasten återställs med BasicPhoto.

Visar den ursprungliga bilden av en speluppsättning. Visar bilden av speluppsättningen som återges för en R G B-bläckstråleskrivare med hjälp av SGCK. Visar bilden av speluppsättningen som återges för en R G B-bläckstråleskrivare med hjälp av BasicPhoto.

bild 12: Utökad svart

Den tredje ändringen gjordes för att förbättra färgreproduktion för digitalkameror. Särskilt i fall där digitalkameran har profilerats med hjälp av ett referensmål kanske en beskrivning av omfångsgränser som skapats av uppmätta färger inte innehåller alla färger som kan fångas i en verklig scen. I stället för att klippa ut alla färger till omfånget för det uppmätta färgmålet tillåter du extrapolering för att skapa en rimlig omfångsgräns. BasicPhoto-algoritmen är utformad för att stödja en sådan extrapolerad omfångsgräns.

Den fjärde ändringen gjordes eftersom CIECAM02 fungerar bra för omfångsmappning. Den process som rekommenderas av TC8-03 för att konvertera enhetsfärger till D65 vid 400 cd/m2 och sedan använda RIT IPT-färgutrymmet är både beräkningsintensiv och tidskrävande.

Hue-mappning

HueMap motsvarar avsikten ICC-mättnad.

Om antingen källomfångsgränsen eller målomfångsgränsen inte innehåller primärvärden återgår den här modellen till modellen MinCD (relativ) som beskrivs i ett föregående avsnitt. Till exempel enheter för vilka primärvalen inte kan fastställas (ICC-profiler med fler än fyra kanaler) eller monokroma ICC-profiler.

Den här algoritmen justerar först nyansen för indatafärgvärdet. Sedan justeras ljusheten och krom samtidigt med hjälp av en klippningsmappning. Slutligen klipper den färgvärdet för att se till att det är inom omfånget.

Det första steget är att fastställa "Hue Wheels". Leta upp JCh-värdena för primära och sekundära färger för både käll- och målenheten. Du överväger bara hue-komponenterna. Detta resulterar i ett primärt eller sekundärt nyanshjul med sex färgpunkter för varje enhet. (Se bild 13.)

diagram som visar nyanshjulen med sex färgpunkter.

bild 13: Hue-hjul

Bättre resultat kan erhållas om den blå källnyckeln inte roteras till målblå primär. I stället används den källblå primära nyansvinkeln som målblå primär nyansvinkel.

Utför sedan nyansrotationerna för varje indatafärg från källbilden,

a)Med hjälp av nyansvinkeln för indatafärgen bestämmer du platsen för färgen på källnyanshjulet i förhållande till de två intilliggande primära eller sekundära färgen. Platsen kan ses som en procentandel av avståndet mellan primärvalen. Till exempel är indatafärgens nyans 40 procent av vägen från hue-värdet för Magenta till nyansvärdet röd.

b)På målfärgshjulet hittar du den associerade nyansvinkeln, till exempel 40 procent från Magenta till Röd. Det här värdet blir målnyansvinkeln.

I allmänhet kommer käll-primärvärdena och sekundärfilerna inte att ha samma nyansvinklar som målets primärvärden och sekundärfiler. Det innebär att målnyansvinkeln vanligtvis skiljer sig från källnyansvinkeln.

Anta till exempel att hue-hjulen producerar följande värden:

Källa M = 295 grader, Källa R = 355 grader.

Mål M = 290 grader, Mål R = 346 grader.

Om nyansvinkeln för indatafärgen är 319 grader är den 40 procent av vinkeln (24 grader) från källa M till källa R. Vinkeln från M till R är 60 grader och vinkeln från M till indataton är 24 grader. Beräkna vinkeln på målet som är 40 procent från mål M till mål R (22 grader), så målfärgens nyansvinkel är 312 grader.

Beräkna sedan hue-referenspunkterna för källnyansen och måltonen. Om du vill beräkna hue-referenspunkten för ett visst h-värde (nyans) vill du hitta värdet J (ljushet) och C (chroma).

  • Hitta J-värdet för hue-referenspunkten genom att interpolera mellan J-värdena för de intilliggande primära eller sekundära punkterna med hjälp av nyansens relativa position. till exempel 40 procent i det här exemplet.
  • Leta reda på det maximala C-värdet vid det här J-värdet och h-värdet. Nu har du JCh för hue-referenspunkten för den nyansen.

diagram som visar ett nyansblad.

bild 14: Ett nyansblad (visualisering av en sektor med omfångsgräns i en viss nyans)

Nästa steg är att beräkna klippmappningen för varje pixel. Visualisera först ett nyansblad från källomfånget för källfärgens nyansvinkel och ett nyansblad från målomfånget för målnyansvinkeln som beräknas under nyansrotationen. Nyansbladen skapas genom att ta en "sektor" från JCh-skalans gränsyta i en specifik nyansvinkel (se bild 14).

Obs! Av prestandaoptimeringsskäl skapas inte nyansblad. de beskrivs och visas här endast i visualiseringssyfte. Åtgärderna utförs direkt på omfångsgränsytan vid den angivna nyansen. Sedan beräknar du hue-referenspunkterna för att fastställa shearmappningen.

  • Utför en ljushetsomskalning för att mappa källbladets svartvita punkter till målbladet (se bild 15). De svartvita punkterna i källnyansbladet mappas linjärt till de svartvita punkterna i målfärgsbladet genom att skala alla J-koordinaterna för källgränsen. Det nyansmappade indatafärgvärdet skalas på samma sätt.

diagram som visar ljushetsmappningen.

bild 15 : Ljushetsmappning

  • Fastställa nyansreferenspunkterna för varje nyansblad. Använd en klippmappning på källbladet så att käll- och målreferenspunkterna sammanfaller (se bild 16). Referenspunkten för ett omfång vid en specifik nyans är referenspunkten för interpolerad nyans mellan de intilliggande primärvalen. Referenspunkten för källnyansbladet mappas linjärt till referenspunkten för målfärgsbladet med hjälp av en "sk shear"-åtgärd som låser J-axeln och håller de svarta punkterna och de vita punkterna stillastående. De svarta punkterna, de vita punkterna och referenspunkterna för käll- och målfärgsbladen bör sammanfalla.
  • Använd shearmappningen på det ljushetsjusterade indatafärgvärdet. J- och C-koordinaterna för källfärgvärdet skalas proportionellt i förhållande till dess avstånd från J-axeln.
  • Därefter utförs en subtil chroma-beroende ljushetskomprimering mot J-värdet för nyansreferenspunkten på den sk shear-mappade färgpunkten. Komprimering mot hue-referensen J görs på ett gammaliknande sätt, där vit, svart, grå och punkter på nyansreferensen J inte påverkas. Alla andra punkter tenderar mot nyansreferensen J på ett smidigt sätt, något hopar sig nära nyansreferensen J, med krom återstående konstant. Kromberoendet säkerställer att neutrala färger inte påverkas och att effekten ökar på färger med högre kroma.

Följande är en matematisk beskrivning av ljushetskomprimering mot nyansreferensen J, eller justering av J-värdet för målpunkten. Den kallas för målpunkten eftersom den har mappats till målomfånget.

Först beräknar du "factorC" (beroendefaktor för kroma) för målpunkten, vilket avgör hur stor effekt ljushetskomprimering kommer att ha. Punkter nära eller på J-axeln har liten eller ingen komprimering; punkter längre bort från J-axeln (högkrom) kommer att ha mer komprimering tillämpas. Multiplicera med 0,5 för att säkerställa att factorC är mindre än 1, eftersom det är möjligt att sourceC kan vara något större än referenceC, men inte dubbelt så stor.

factorC = (destinationC/referenceC) ? 0,5

var:

destinationC är målpunktens C-värde.

referenceC är C-värdet för Hue-referenspunkten.

Bestäm sedan om målpunkten J är ovanför eller under hue-referensen J. Om det är ovan gör du följande:

  1. Beräkna "factorJ" för målpunkten i förhållande till referensJ. Det här factorJ-värdet är mellan 0 och 1 (0 om det finns på referensJ; 1 vid maxJ).

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

    var:

    destinationJ är J-värdet för målpunkten.

    referenceJ är J-värdet för hue-referenspunkten.

    maxJ är det maximala J-värdet för omfånget.

  3. Använd en gammaliknande effektfunktion på factorJ, vilket minskar factorJ med en viss mängd. I det här exemplet används kraften i 2 (kvadraten). Subtrahera den reducerade faktornJ från den ursprungliga faktornJ och multiplicera resultatet med det totala J-intervallet ovanför den primära referensenJ för att hitta "deltaJ", som representerar ändringen i J efter ljushetskomprimering, men inte inklusive kromaberoendet.

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

  5. Tillämpa factorC på deltaJ (ju högre krom, desto större effekt) och beräkna det nya J-värdet för målpunkten.

  6. destinationJ = destinationJ – (deltaJ ? factorC)

Om J-värdet för målpunkten är under referenceJ utförs en liknande beräkning som föregående steg A-C, med minJ i stället för maxJ för att hitta intervallet i J för att beräkna faktorJ och med hänsyn till polariteten för åtgärderna "under" referensJ.

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

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

destinationJ = destinationJ + (deltaJ ? factorC)

var:

minJ är det minsta J-värdet för omfånget.

Krom för indatafärgpunkter expanderas linjärt (om möjligt) längs konstant ljushet som är proportionell mot det maximala kromavärdet för käll- och målomfånget vid den nyansen och ljusheten. Kombinerat med den föregående kromaberoende ljushetskomprimering hjälper detta till att bevara mättnad eftersom sk shearmappning med hjälp av referenspunkterna ibland gör att källpunkten överkomprimeras i krom (se bild 16).

diagram som visar klippmappning för att matcha hue-referenspunkter, före klippningen till vänster, efter klippning till höger.

bild 16: Klippmappning, ljushetskomprimering mot hue-referens J och kromexpansion

Följande är en matematisk beskrivning av chroma-expansionsprocessen eller justering av målpunktens C-värde. Den kallas för målpunkten eftersom den har mappats och ljusheten komprimerats till målomfånget.

  1. Innan shearmappningen fastställer du sourceExtentC (kroma-omfattningen vid källpunktens lätthet och nyans).

  2. Efter den klippmappning och lätthetskomprimering som omvandlar källpunkten till målpunkten bestämmer du destExtentC (kroma-omfattningen vid målpunktens ljushet och nyans).

  3. Om sourceExtentC är större än destExtentC krävs ingen chroma-justering till målpunkten, och du kan hoppa över nästa steg.

  4. Justera destinationC (målpunktens kroma) så att den passar i målkromatiteten i den här ljusheten och nyansen.

  5. destinationC = destinationC? (destExtentC/sourceExtentC)

    var:

    destinationC är målpunktens C-värde.

    sourceExtentC är det maximala C-värdet för källomfånget vid källpunktens ljushet och nyans.

    destExtentC är det maximala C-värdet för målomfånget vid målpunktens ljushet och nyans.

Utför slutligen mimimumavståndsurklippet. Om den nyansroterade, ljushetsjusterade och sk shear-mappade indatafärgen fortfarande ligger något utanför målomfånget klipper du den (flyttar den) till närmaste punkt på målomfångsgränsen (se bild 17).

diagram som visar minsta avståndsurklipp.

bild 17: Minsta avstånd urklipp

Beskrivning av omfångsgräns och Gamut Shell-algoritmer

Gränsfunktionen för enhetsomfång använder enhetens modellmotor och analysparametrar för att härleda en färgenhetsomfångsgräns, som beskrivs som en indexerad brytpunktslista över skrovet på enhetens omfång. Skrovet beräknas på olika sätt beroende på om du arbetar med additiva enheter, till exempel bildskärmar och projektorer eller subtraktiva enheter. Den indexerade hörnlistan lagras i CIEJab. Strukturen i listan över indexerade hörn är optimerad för maskinvaruacceleration av DirectX.

Den här metoden har många välkända lösningar. Om du söker efter "convex hull DirectX" på webben får du mer än 100 träffar. Det finns till exempel en referens från 1983 om det här specifika ämnet (Computer Graphics Theory and Application, "Shiphulls, b-spline surfaces, and cadcam", pp. 34-49) med referenser från 1970 till 1982 om ämnet.

Insamlingen av punkter kan fastställas utifrån externt tillgänglig information enligt följande:

  • Punkter för referensgränssnittet för övervakare genereras med hjälp av en sampling av färgkuben i enhetens färgområde.
  • Punkter för referensgränssnittet för skrivare och avbildningsenheter hämtas från exempeldata som används för att initiera modellen.
  • Punkter för referensgränssnittet för scRGB och sRGB genereras med hjälp av en sampling av färgkuben för sRGB.
  • Punkter för det rimliga gränssnittet för avbildningsenheter genereras med hjälp av en sampling av färgkuben i enhetens färgområde.
  • Punkter för referensgränssnittet för projektorer genereras med hjälp av en sampling av en polyhedron i färgkuben i enhetens färgområde.
  • Punkter för det möjliga gränssnittet för brett dynamiskt omfångsfärgutrymmen genereras med hjälp av en sampling av färgkuben i själva utrymmet.

Du kan skapa en brytpunktslista som effektivt beskriver färgenhetsomfånget, givet en enhetsprofil och systemsupporttjänster.

För utdataenheter beskriver omfångsgränsen det intervall med färger som kan visas av enheten. En omfångsgräns genereras från samma data som används för att modellera enhetens beteende. Konceptuellt matar du ut ett urval av de färger som enheten kan producera, mäter färgerna, konverterar måtten till utseendeutrymme och använder sedan resultaten för att skapa omfångsgränsen.

Indataenheter är svårare. Varje bildpunkt i en indatabild måste ha ett visst värde. Varje pixel måste kunna representera alla färger som finns i den verkliga världen på något sätt. I den meningen är inga färger "out of gamut" för en indataenhet, eftersom de alltid kan representeras.

Alla digitala bildformat har ett fast dynamiskt omfång. På grund av den här begränsningen finns det alltid vissa distinkta stimuli som mappas till samma digitala värde. Därför kan du inte upprätta en en-till-en-mappning mellan verkliga färger och digitalkameravärden. I stället bildas omfångsgränsen genom att uppskatta en rad verkliga färger som kan producera kamerans digitala svar. Du använder det uppskattade intervallet som omfång för indataenheten.

Primärt ingår för att tillhandahålla affärsgrafik av typen intent-type gamut mapping.

I ett verkligt objektorienterat format abstraherar du den underliggande representationen av omfångsgränsen. På så sätt kan du ändra representationen i framtiden. För att förstå gamut-gränsbeskrivningen (GBD) som används i den nya CTE:n måste du först förstå hur algoritmer för gamutmappning (GMA) fungerar. Traditionellt har GMO utformats för att uppfylla behoven hos den grafiska konstgemenskapen; för att återskapa bilder som redan har renderats korrekt för enheten där indatabilden skapades. Målet med grafisk konst GMA är att göra bästa möjliga reproduktion av indatabilden på utdataenheten. Den nya CTE GBD är utformad för att lösa fyra viktiga problem.

Eftersom indatabilden återges för indataenheten passar alla färger inom intervallet mellan mediets vita punkt och svarta punkt. Anta att bilden är ett fotografi av en scen där det finns ett diffust vitt, till exempel en person i en vit t-shirt, och en spektulär markering, till exempel ljus som reflekterar från ett fönster eller krom bumper. Scenen återges till indatamediet så att den spektulära markören mappas till mediets vita punkt, och det diffusa vita mappas till en neutral färg som är mörkare än mediets vita punkt. Valet att mappa färger från scenen till indatamediet är både ett scenberoende beslut och ett estetiskt beslut. Om den spektulära markbilden saknades från den ursprungliga scenen skulle det diffusa vita förmodligen mappas till mediets vita punkt. I en scen med mycket markeringsdetaljer skulle mer intervall lämnas mellan det spektulära vita och det diffusa vita. I en scen där höjdpunkten inte är betydande kan mycket lite intervall lämnas.

För förre renderade bilder är gamut-mappning relativt enkelt. I grund och botten mappas det ursprungliga mediets vita punkt till reproduktionsmediets vita punkt, den svarta källpunkten mappas till målets svarta punkt och merparten av mappningen är klar. De olika GMA:er som finns ger variationer för att mappa andra punkter på källmediets tonskala och olika sätt att hantera kromavärden som inte är gamut. Men mappningen av vitt till vitt och svart till svart är konsekvent i dessa varianter. Den här implementeringen kräver att vit är ovanför ett J* på 50 och svart under ett J* på 50.

Inte alla färgkodningar begränsar färgintervall för indatabilder. IEC-standardfärgkodningen scRGB (IEC 61966-2-2) ger 16 bitar för var och en av de tre färgkanalerna röd, grön och blå (RGB). I den kodningen kodas inte referenssvart som RGB-trippel (0, 0, 0), utan som (4096, 4096, 4096). Referensvit kodas som (12288, 12288, 12288). ScRGB-kodningen kan användas för att representera spektulära markeringar och skuggdetaljer. Den innehåller RGB-tripplar som inte är fysiskt möjliga eftersom de kräver negativa mängder ljus och kodningar som ligger utanför CIE-spektralloben. Det är uppenbart att ingen enhet kan producera alla färger i scRGB-omfånget. Faktum är att ingen enhet kan producera alla färger som en människa kan se. Enheterna kan därför inte fylla scRGB-omfånget, och det skulle vara användbart att kunna representera den del av omfånget som de fyller. Varje enhet har ett intervall med värden i scRGB-utrymme som den kan producera. Det här är de "förväntade" färgerna för enheten. det skulle vara överraskande för enheten att producera färger utanför det här omfånget. Det finns en definierad omvandling från scRGB-utrymme till utseendeutrymme, så varje enhet har också ett intervall med utseendevärden som förväntas återskapas.

I både scRGB och indata från avbildningsenheter som kännetecknas av ett fast mål är det möjligt att få ett värde utanför intervallet med förväntade värden. Om någon kalibrerar en kamera till ett testmål; och sedan fångar en scen med spektulära markeringar kan det finnas pixlar som är ljusare än målets vita punkt. Samma sak kan hända om en naturligt förekommande röd är mer kromatisk än målröd. Om någon tar en scRGB-bild från en enhet och sedan redigerar färgerna i bilden manuellt, är det möjligt att skapa pixlar som ligger utanför det förväntade intervallet för enhetens omfång, även om de ligger inom hela scRGB-skalan.

Ett andra problem kanske först inte verkar vara relaterat till detta. Det uppstår när du använder ett färgmål för att karakterisera en indataenhet, till exempel en kamera eller skanner. Reflekterande mål produceras vanligtvis på papper och innehåller ett antal färgade fläckar. Manufaturers tillhandahåller datafiler med färgmätningar som gjorts under ett fast visningsvillkor för varje färgkorrigering. Verktyg för färgprofilering skapar en mappning mellan dessa uppmätta värden och de värden som returneras av färgsensorerna på enheterna. Problemet är att dessa färgmål ofta inte täcker alla enhetsvärden. Skannern eller kameran kan till exempel returnera värdet (253, 253, 253) för referens vit punkt och en referensröd korrigering kan ha ett RGB-värde på (254, 12, 4). Dessa representerar intervallet med förväntade värden för indataenheten baserat på målvärdena. Om du karakteriserar indataenheten baserat på svaren till målet förväntar du dig bara färger inom det här smala intervallet. Det här intervallet är inte bara mindre än det intervall av färger som människor kan se, det är mindre än det färgintervall som enheten kan producera.

I båda fallen är det svårt att uppskatta indataenhetens eller bildens omfång, trots att det finns ett referensomfång eller mätningar. I det första problemet är det troliga omfånget för indataenheten mindre än hela skalan av scRGB. I det andra problemet är referensomfånget för målet mindre än det fullständiga möjliga omfånget för indataenheten.

Det tredje problemet gäller tonmappning. Många modeller av omfångsgränser som på ett tillfredsställande sätt kan representera förlagrade bilder som används i grafikkonsten har föreslagits, till exempel Braun och Fairchild Mountain Range GBD (Braun[97]) och Morovics Segment Maxima-gränsbeskrivning (Morovic[98]). Men dessa modeller ger bara information om extremiteterna i enhetens omfång; de saknar information om andra punkter i tonmappningen. Utan sådan information kan GMA:er bara göra grova uppskattningar av optimal tonmappning. Värre är att dessa modeller inte ger någon hjälp för det utökade dynamiska intervallet i scRGB och i digitala kamerabilder.

Hur löses det här problemet inom den fotografiska och videografiska industrin? Kameran tar en bild. Experter kan diskutera hur mycket återgivning som sker i insamlingsenheten. men de håller med om att det inte är något betydande belopp. Båda teknikerna mappar inte ett diffust vitt i en fångad scen till mediets vita punkt. På samma sätt mappar de inte den svarta punkten från scenen till mediets svarta punkt. Beteendet för fotografisk film beskrivs i densitetsutrymmet med hjälp av en karakteristisk kurva, ofta kallad Hurter och Driffield, eller H&D-kurva. Kurvan visar densiteten för den ursprungliga scenen och den resulterande densiteten på filmen. Bild 18 visar en typisk H-&D-kurva. X-axeln representerar ökad loggexponering. Y-axeln representerar densiteten på bilden. Fem referenspunkter är markerade på kurvan: svart utan detaljer, vilket representerar den minsta densiteten för det negativa; svart med detaljer; referens mittgrå kort; vit med detaljer; vit utan detaljer. Observera att det finns utrymme mellan svart utan detaljer (som representerar enhetens svarta) och svart med detaljer (skuggsvart). På samma sätt finns det utrymme mellan vitt med detaljer (diffust vitt) och vitt utan detaljer (som representerar enhetens vita).

diagram som visar H- och D-kurvan för bildfilm.

bild 18: H&D-kurva för bildfilm

Videoindustrin tillhandahåller "utrymme" och "fotrum" i bilder. I ITU 709-specifikationen kodas luminans (kallas Y) i 8 bitar, med ett intervall på 0 till 255. Referenssvart kodas dock vid 15 och referensvit kodas som 235. Detta lämnar kodningsintervallet mellan 236 och 255 för att representera spektulära markeringar.

Videoindustrin presenterar ett i huvudsak slutet loopsystem. Det finns många olika utrustningsleverantörer, men videosystem baseras på referensenheter. Det finns en standardkodning för videobilder. Det finns inget behov av att kommunicera en omfångsgräns med videobilder, eftersom alla bilder är kodade för reproduktion på samma referensenhet. Film är också sluten loop eftersom det inte finns något behov av att förmedla mellanliggande data mellan olika komponenter. Du vill att en lösning som gör det möjligt att återskapa bilder från enheter med varierande omfång och som representerar både föråtergivna och ej återgivna scener i utdata med varierande omfång.

Ett fjärde problem som den nya CTE:n måste lösa är att de visuellt grå färgerna som skapas av en enhet, till exempel när röd=grön=blå på en bildskärm, ofta inte faller på den neutrala axeln i CAM (när kroma = 0,0). Detta orsakar stora svårigheter för genetiskt modifierade organismer. För att GMO ska fungera bra måste du justera beskrivningen av enhetens omfång och indatapunkter så att enhetens neutrala axel hamnar på utseendeutrymmets neutrala axel. Du måste justera punkter från den neutrala axeln med en liknande mängd. Annars kan du inte göra jämna grader genom bilden. På vägen ut ur GMA ångrar du den här mappningen i förhållande till utdataenhetens neutrala axel. Detta kallas för en "kiropraktisk" uträtning av axeln. Som en kiropraktor räta du inte bara ut skelettet (neutral axel), men du justerar resten av kroppen för att röra dig tillsammans med skelettet. Som en kiropraktor justerar du inte skelettet med samma mängd genom hela utrymmet. I stället justerar du olika avsnitt på olika sätt.

diagram som visar kurvan för enhetens neutrala axel i förhållande till den neutrala CIECAM-axeln.

bild 19: kurva för enhetens neutrala axel i förhållande till den neutrala CIECAM-axeln

Vad den nya CTE kräver är en modell av en omfångsgräns som kan användas för att representera både renderade och icke-återgivna källbilder, ge information om utseendet på enhetsneutrala och tillhandahålla information för tonmappningsbilder med ett brett luminansintervall.

diagram som visar de tre skalen med omfång.

bild 20: Tre skal

Omfångsgränsen består av tre gränssnitt som definierar tre regioner.

I den nya CTE bildas det yttre skalet i omfånget med ett konvext skrov tillverkat av provpunkter i enhetens omfång. Ett skrov bildas genom att ta en uppsättning provpunkter och omge dem med en yta. Ett konvext skrov har den extra egenskapen att vara konvex överallt. Därför är detta inte det minsta möjliga skrovet som kan passa data. Men experimentering har visat att anpassning av exempelpunkterna för hårt orsakar oattraktiva artefakter i bilder, till exempel brist på jämn skuggning. Det konvexa skrovet verkar lösa dessa problem.

I algoritmen hämtas färgutseendevärden för en uppsättning punkter som samplas från enheten. För bildskärmar och skrivare erhålls färgutseendevärdena genom att exempel matas ut och sedan mätas. Du kan också skapa en enhetsmodell och sedan köra syntetiska data via enhetsmodellen för att förutsäga uppmätta värden. De uppmätta värdena konverteras sedan från colorimetric space (XYZ) till utseendeutrymme (Jab), och skrovet omsluts runt punkterna.

Den viktigaste punkten i den här algoritmen är att den antagna vita punkten som används i konverteringen från colorimetric till utseendeutrymme inte behöver vara mediets vita punkt. I stället kan du välja en punkt längre in i omfånget och på (eller nära) den neutrala axeln. Den punkten har sedan ett J-värde på 100. Exempel med ett uppmätt Y-värde som är högre än den antagna vita punkten får ett J-värde större än 100.

Om du placerar scenens diffusa vita punkt som den antagna vita punkten för färgrymdskonverteringen, identifieras spektulära markeringar i scenen enkelt med ett J-värde som är större än 100.

Eftersom den CIECAM02 färgmodellen baseras på det mänskliga visuella systemet, bestäms luminansnivån för den svarta punkten (J = 0) automatiskt av modellen efter att en antagen vit färg har valts. Om indatabilden har ett brett dynamiskt intervall är det möjligt att det kan finnas värden som mappas till J-värden som är mindre än noll.

Följande bild 21 visar de enhetsneutrala som körs genom mitten av de rimliga och referensomfången.

diagram som visar den enhetsneutrala axeln som lagts till i omfångsgränsen.

bild 21: Enhetens neutrala axel har lagts till i omfångsgränsen

Alla omfångsmappningar innebär antingen att urklippa ett indataintervall till ett utdataomfång eller komprimera indataomfånget så att det passar in i utdataomfånget. Mer komplexa algoritmer skapas genom att komprimera och urklipp i olika riktningar, eller genom att dela upp omfånget i olika regioner och sedan utföra urklipp eller komprimering i de olika regionerna.

Den nya CTE utökar det här konceptet för att stödja regioner med ett möjligt omfång, ett rimligt omfång och ett referensomfång, och gör det möjligt för GMA:er att mappa dem på olika sätt. Dessutom har GMA:erna information om enhetens neutrala axel. Följande diskussion beskriver hur man hanterar situationer där de rimliga omfången och referensomfången har kollapsat på varandra.

diagram som visar G M A med två icke-komprimerade gamut-beskrivningar.

bild 22: GMA med två icke-komprimerade gamut-beskrivningar

Du kan se det här exemplet om du mappar från en indataenhet, till exempel en kamera eller skanner som kännetecknas av ett reflekterande mål, till scRGB-utrymme. Här är de troliga färgerna som är ljusare än referensvita spekulativa markeringar. I praktiken kanske det inte genererar alla möjliga värden i kameran om du karakteriserar en kamera med ett mål. Men spektulära höjdpunkter och mycket kromatiska färger som finns i naturen skulle. (Transmissiva mål har vanligtvis en korrigering som är den minsta möjliga densiteten på mediet. Med ett sådant mål skulle spekulativa markeringar ligga inom målets intervall.) Referensen svart för ett reflekterande mål skulle vara början på den svarta skuggregionen. Det vill sägs att det sannolikt finns färger i skuggorna som är mörkare än det svarta på målet. Om bilden innehåller mycket intressant innehåll i den regionen kan det vara värt att bevara den tonvariationen.

diagram som visar G M A med ett komprimerat målomfång.

bild 23: GMA med komprimerat målomfång

Bild 23 visar en möjlig algoritm för omfångsmappning när målomfånget endast ger intervallet från enheten vit till svart, och det inte finns några möjliga färger utanför det här området. Detta kommer sannolikt att inträffa för typiska utdataenheter, till exempel skrivare. De möjliga färgerna mappas till målomfångets kant. Men den saknar en tonkurva för utdataenheten. GMA måste välja någon neutral punkt med lägre luminans som ska användas som mappningsmål för referensvitt. En sofistikerad algoritm kan göra detta genom att histogramma ljusheterna i källbilden och se hur många som faller i intervallet för förväntat men lättare än referensvitt. Ju fler ljuspunkter, desto mer utrymme krävs i målenheten mellan de mappade punkterna för de spektulära markeringar och referensvitt. En enklare algoritm kan välja ett godtyckligt avstånd nedåt i ljushetsskalan från enhetens vita, till exempel 5 procent. En liknande metod gäller för mappning av maximalt svart och skuggsvart.

När du har genererat måltonkurvan kan du mappa i en metod som liknar den som användes i föregående bild 23. Alla punkter i måltonkurvan hamnar inom enhetens omfång och alla punkter i mappningen måste ligga inom enhetens omfång.

Om du ändrar vänster- och högerfigurer och pilarnas riktningar i bild 23 kan du beskriva fallet där källbilden bara har ett referensomfång och de tre utdataenheterna inte har komprimerats till varandra. Ett exempel på detta kan vara mappning från en övervakare till scRGB. Återigen måste GMA syntetisera kontrollpunkterna för de fem punkterna i tonkurvan för källbilden. Vissa mappningar kan placera alla punkter i tonkurvan i scRGB-enhetens omfång, medan andra mappningar kan använda mer av scRGB-omfånget genom att mappa diffust vitt till referensvitt och tillåta att spektulärt vitt mappas till ett ljusare värde.

Slutligen har du fallet där båda enheterna bara har referensomfånget, vilket är hur de flesta algoritmer för gamutmappning fungerar. Så du kan lösa detta genom att bara återgå till aktuella algoritmer. Om du har ett rimligt sätt att fastställa de fem referenspunkterna för käll- och målenheterna kan du också ordna med att mappa referenspunkterna.

Enhetsomfång innehåller mer än de fem referenspunkterna på den neutrala axeln. Dessa representerar bara gränserna mellan potentiella regioner i bilden. Mellan var och en av referenspunkterna kan du använda någon av de befintliga metoderna för omfångsmappning. Så du kan klippa ut intervallet med oväntade färger och komprimera alla färger mellan det förväntade vita och svarta, eller så kan du klippa alla färger utanför referensområdet och komprimera inom det intervallet. Det finns många möjligheter som kan genomföras i olika genetiskt modifierade organismer. Dessutom kan GMA:erna komprimera och klippa ut på olika sätt. Alla dessa kombinationer omfattas av denna uppfinning.

Hittills i den här diskussionen har omfånget behandlats som om det bara var en funktion av den enhet där bilden skapades, hämtades eller visades. Det finns dock ingen anledning till varför alla bilder för en enhet måste ha samma omfång. GMA:erna är beroende av data i GBD. Om beskrivningen ändras mellan bilder finns det inget sätt för GMA:erna att veta. I synnerhet om bilder inte har några spekulativa markeringar presterar GMA bättre om gamut-beskrivningen inte visar att det finns färger som är ljusare än diffusa vita.

I den nya CTE-arkitekturen är det möjligt att använda mer än en GMA. Att använda flera GMA:er är i sig odefinierat. Om en avbildningsenhet till exempel associerar en GMA med dess "utseende och känsla" tenderar den att göra det med ett målomfång. Detsamma gäller för utdataenheter och "målinriktade" källomfång. SRGB-speluten är en vanlig underförstådd gamut. Därför rekommenderar vi starkt att du använder en enda GMA, om förutsägbarhet är en prioritet. Ett enda GMA-arbetsflöde bör vara standard för alla arbetsflöden, särskilt för konsument- och prosumerarbetsflöden. Omfångsmappning för önskad reproduktion bör göras en gång, men det finns instanser där flera mappningsprocesser ingår. För språkkontroll gör du först en föredragen mappning till omfånget för den slutliga målenheten och sedan en colorimetric-återgivning till språkenhetens omfång. För det andra används vissa typer av mappning för att ändra bildens egenskaper, men ingår inte för att mappa till ett enhetsomfång, till exempel justering av tonkurvan eller kromaticity. Om flera GMA:er används tar transformeringsgränssnittet en matris med bundna omfångskartor, dvs. gamut-kartor som har initierats med ett par beskrivningar av omfångsgränser. När det finns mer än en gamut-karta måste indataomfångsgränsen för en efterföljande gamut-karta vara densamma som utdataomfångsgränsen för dess föregångare.

Gränsfunktionen för enhetsomfång tar enhetens modellmotor och analysparametrar och härleder en färgenhetsomfångsgräns som beskrivs som en ordnad brytpunktslista över enhetens konvexa skrov. Den ordnade hörnlistan lagras i CIEJab. Strukturen i listan över ordnade hörn är optimerad för maskinvaruacceleration av DirectX. Den här metoden har många välkända lösningar (sök efter "convex hull DirectX" på webben och du får över 100 träffar). Det finns också en referens från 1983 om detta ämne (Computer Graphics Theory and Application, "Shiphulls, b-spline surfaces and cadcam" pp. 34-49), med referenser från 1970 till 1982 om ämnet.

Två olika tekniker kan användas för att beräkna trianglar i gamut-gränssnittet. För andra enheter än additiva RGB-enheter beräknar du ett konvext skrov. Du kan överväga att undersöka stöd för icke-konvext skrov för andra enheter om du har direkt åtkomst till sådana enheter för att verifiera algoritmernas robusthet, prestanda och återgivning. Det här är en välkänd process som inte kräver ytterligare beskrivning. Tekniken som används för additiva RGB-enheter beskrivs på följande sätt.

Olika GBD:er har fördelar och nackdelar. Den konvexa skrovrepresentationen garanterar fina geometriska egenskaper, till exempel konvexa nyansskivor som ger en unik skärningspunkt med en stråle som kommer från en punkt på den neutrala axeln. Nackdelen med konvex skrov representation är också konvexitet. Det är känt att många enheter, särskilt visa enheter, har gamuts som är långt ifrån konvex. Om det faktiska omfånget avviker avsevärt från det konvexa antagandet skulle den konvexa skrovrepresentationen vara felaktig, möjligen i den utsträckning som den inte representerar verkligheten.

När du har antagit en GBD som ger en någorlunda korrekt representation av det faktiska omfånget uppstår andra problem, vissa på grund av själva begreppet hue-sektor. Det finns minst två patologiska situationer. I följande bild 24 ger ett CRT-omfång upphov till nyanssegment med "öar". I bild 25 ger ett skrivaromfång upphov till en nyansskiva där en del av den neutrala axeln saknas. De patologiska nyanssegmenten orsakas inte av särskilt patologiska omfångsgränser i dessa fall. De orsakas av själva begreppet hue slice, eftersom (a) det tas längs konstant nyans, och (b) det tar bara hälften av planet som motsvarar nyansvinkeln.

diagram som visar en övre vy och sidovy över

bild 24: En typisk CRT-bildskärm har ett omfång som visar märkligt "inving in" i de blå nyanserna. Om hue-sektorer tas inom detta nyansintervall kan isolerade öar visas i nyanssegmenten.

Diagram över ett omfång med en

bild 25: En skrivare kan ha ett omfång som har "gap" i sin neutrala axel. När en nyanssektor tas (som bara är hälften av planet) finns det en "buckla" på den del av gränsen som är den neutrala axeln. Det kan vara svårt att lösa algoritmiskt.

För att lösa dessa patologier föreslås ett nytt ramverk som överger begreppet hue-sektor som används som startpunkt. I stället använder ramverket uppsättningen med "gränslinjeelement" eller linjer som ligger på omfångsgränsen. De ger inte nödvändigtvis en sammanhängande geometrisk visualisering som hue-sektorer, men de stöder alla vanliga gamut-åtgärder. Förutom att lösa de problem som nämnts tidigare tyder detta tillvägagångssätt också på att byggandet av hue-sektorer, även när det är möjligt, är beräkningsmässigt slösaktigt.

Triangulering av gamutgränsen

Startpunkten är en GBD som består av en triangulering av omfångsgränsen. Kända metoder för att konstruera GBD ger vanligtvis den trianguleringen. För konkretitet beskrivs en metod för att konstruera GBD för additiva enheter dess enhetsutrymme här. Dessa enheter omfattar övervakare (både CRT-baserade och LCD-baserade) och projektorer. Kubens enkla geometri gör att du kan introducera ett vanligt gitter på kuben. Kubens gränsytor kan trianguleras på ett antal sätt, till exempel den som visas i bild 26. Arkitekturen tillhandahåller antingen en enhetsmodell för enheten så att färgmåttvärden för gitterpunkterna kan hämtas algoritmiskt, eller så har mätningar gjorts direkt för dessa punkter. Arkitekturen ger också CIECAM02, så att du kan anta att startdata redan har mappats till CIECAM02 Jab-utrymme. Sedan har varje gitterpunkt på RGB-kubens gränsytor en motsvarande punkt i Jab-utrymmet. Anslutningarna av punkter som utgör uppsättningen trianglar i RGB-utrymme inducerar också en uppsättning trianglar i Jab-utrymmet. Denna uppsättning trianglar utgör en rimlig triangulering av omfångsgränsen om (a) gitter på RGB-kuben är tillräckligt bra, och (b) omvandlingen från enhetsutrymme till det enhetliga färgutrymmet är topologiskt väluppfostrad; Det innebär att den mappar gränsen till gränsen, och den vrider inte omfånget ut och in så att inre punkter blir gränspunkter.

diagram som visar en enkel metod för att triangluera omfångsgränsen för en enhet med R G B som enhetsutrymme.

bild 26: En enkel metod för att triangulera omfångsgränsen för en enhet med RGB som enhetsutrymme

Gränslinjeelement

Centralt för detta ramverk är begreppet gränslinjeelement. en uppsättning linjesegment som (a) ligger på omfångsgränsen och (b) ligger på ett plan. I det här fallet är planet ett hue-plan. Varje linjesegment är resultatet av att korsa planet med en triangel med omfångsgräns. Även om många forskare har använt konstruktionen av att korsa ett plan med gränstrianglar, analyserar de vanligtvis relationen mellan dessa linjesegment och försöker konstruera ett sammanhängande geometriskt objekt ur linjesegmenten. Olika algoritmer har utformats för att följa dessa linjesegment en efter en tills en hel nyanssektor erhålls, och många försök har gjorts för att påskynda sökningsprocessen.

Den här metoden är annorlunda. Du korsar planet med trianglarna för att hämta linjesegmenten. Du kan sedan betrakta dessa linjesegment som grundläggande konceptuella objekt. Det är nödvändigt att analysera relationen mellan linjesegmenten. du behöver inte veta hur de är sammankopplade med varandra. Denna synvinkel löser problemet med hue slice med öar. De kända metoder som försöker konstruera hue-sektorn förutsätter att om man börjar med ett linjesegment och följer det till nästa linjesegment och så vidare. Det leder så småningom tillbaka till startpunkten, då en hel nyanssektor skulle konstrueras. Tyvärr skulle detta tillvägagångssätt missa ön (och i det värsta scenariot, kontinenten). Genom att inte insistera på att få en sammanhängande geometrisk bild; det vill: hue slice, du kan hantera ön problemet enkelt. En annan viktig skillnad i den här metoden är att för att påskynda byggandet av linjesegment använder den ett "triangelfilter". Triangelfiltret kastar ut vissa trianglar som definitivt inte kommer att producera linjesegment som skulle vara användbara i den aktuella omfångsåtgärden. Eftersom det är dyrt att korsa en triangel med planet, förbättrar detta hastigheten. En bieffekt är att du inte kan konstruera hue-sektorn eftersom vissa linjesegment skulle saknas på grund av triangelfiltreringen.

Gamut-åtgärd: CheckGamut

I följande exempel förklaras hur ramverket fungerar och hur CheckGamut utförs, det vill säga hur du kontrollerar om en färg är in-gamut.

Det allmänna ramverket illustreras i följande bild 27. Det finns olika komponenter. Komponenterna som är märkta i kursiv stil är komponenter som kan vara olika i implementeringen beroende på omfångsåtgärden i fråga. De andra komponenterna är invarianta för alla omfångsåtgärder. Till att börja med är Input en uppsättning färgattribut. När det gäller CheckGamut är det frågefärgen. I bild 27 och följande diskussion antas det att nyansvinkeln antingen är bland indatafärgattributen eller kan hämtas från dem. Detta är helt klart fallet om indata är hela färgpunkten, antingen i Jab eller JCh, från vilken du sedan kan beräkna nyansvinkeln. Observera att nyansvinkeln bara behövs eftersom hue-plan används. Beroende på omfångsåtgärden i fråga är det inte nödvändigt att använda hue-planet. När du till exempel skapar den rutinmässiga CheckGamut kanske du vill använda plan med konstant J. Detta är en generalitet som inte kommer att användas eller diskuteras ytterligare. men det kan vara bra att komma ihåg den här flexibiliteten i metoden för att stödja andra omfångsåtgärder när hue-planet kanske inte är det bästa valet.

diagram som visar flödet för att stödja omfångsåtgärder.

bild 27: Ramverket för att stödja gamut-åtgärder

Nyansvinkeln, som hämtas direkt från indata eller beräknas från indata, används för att initiera nyansplanet märkt Full Hue Plane i bilden. "Full" betonas eftersom detta är hela planet, inte bara halvplanet som innehåller nyansen. Det fullständiga planet innehåller både indatatonvinkeln och vinkeln 180 grader mittemot den. Huvudfunktionerna i hue-planet är funktionen Intersect, som förklaras i följande underavsnitt, Full Hue Plane: Intersect. Anta att GBD redan har konstruerats och att uppsättningen Gamut Boundary Triangles är tillgänglig. Korsa trianglarna som har överlevt triangelfilter med hue-planet med Intersect. Komponenten Triangelfilter är märkt i kursiv stil, vilket innebär att komponenten varierar i implementeringen för olika omfångsåtgärder. Triangelfilter för CheckGamut förklaras i avsnittet Gamut Operation: CheckGamut (fortsättning). Resultatet av att korsa en triangel med hue-planet är antingen tomt eller ett gränslinjeelement, det vill s. v.s. ett par distinkta punkter. Om resultatet inte är tomt skickas det till Line Element Processor , som återigen gör olika saker beroende på omfångsåtgärden. Line Element Processor uppdaterar den interna datastrukturen interna bearbetade data , vars innehåll eller layout också beror på omfångsåtgärden. I allmänhet innehåller interna bearbetade data "svaret" på problemet, som uppdateras kontinuerligt med varje nytt gränslinjeelement som hittas. När alla gränslinjeelement har bearbetats har svaret hittats. Det återstår att komma åt den via Utdataadapter. Eftersom interna bearbetade data är omfångsspecifika är utdataadapter också gamut åtgärdsspecifik.

Full Hue Plane: Intersect

Funktionen Intersect beräknar skärningspunkten mellan nyansplanet och en triangel. Så enkelt som det låter är den här funktionen viktig av två skäl.

Först kan genomskärning av varje kant av triangeln med planet ge tre skärningspunkter, en geometriskt omöjlig situation. Anledningen till att detta kan inträffa i beräkningen är att när beräkningar görs i flyttal, till exempel IEEE-format, finns det osäkerheter eller "numeriskt brus" i varje steg som påverkar slutsatsen om en kant korsar planet. När planet korsar kanterna i en nära miss-situation är skärningspunkterna nära varandra och fastställandet av om en skärningspunkt ligger inom kanten är slumpmässig. Även om bruset i punkternas numeriska värden är litet, är den kvalitativa slutsatsen att det finns fler än två skärningspunkter geometriskt omöjlig och svår att hantera korrekt i algoritmen.

För det andra finns den här funktionen i den kritiska loopen för varje kant i varje filtrerad triangel, så det är viktigt att du optimerar dess effektivitet så mycket som möjligt.

Utför beräkningarna i heltal för att åtgärda det första problemet Med numeriskt brus. För att åtgärda det andra problemet med att optimera dess effektivitet cachelagrar du det mest använda attributet för varje hörn eller den "punktprodukt" som är associerad med varje hörn. Att överföra till heltal är ett typiskt sätt att garantera geometrisk konsekvens. Den grundläggande tanken är att om du måste kvantifiera, gör det i början. Därefter kan efterföljande beräkningar utföras i heltal, och om heltalen är tillräckligt breda så att det inte finns någon risk för spill kan beräkningarna göras med oändlig precision. Följande kvantiseringsfunktion är användbar för detta ändamål.

ScaleAndTruncate(x) = Heltalsdel av x*10000

Skalningsfaktorn 10000 innebär att flyttalsnumret för indata har fyra decimaler, vilket är tillräckligt exakt för det här programmet. Beroende på intervallet med värden för färgutseendeutrymmet vill du välja en heltalstyp med bitar som är tillräckligt breda för att lagra mellanliggande beräkningar. I de flesta färgutseendeutrymmen ligger intervallet för varje koordinat inom intervallet -1 000 till 1 000. Den kvantiserade koordinaten har ett högsta möjliga absolutvärde på 1 000*10 000 = 10 000 000. Som du ser är den mellanliggande kvantiteten en punktprodukt, vilket är en summa av två koordinatprodukter, så den har ett högsta möjliga absolutvärde på 2*(10 000 000) ₂ = 2?10 ₁₄. Antalet bitar som krävs är log ₂ (2?10 ₁₄ ) = 47,51. Ett praktiskt val för heltalstypen är därför 64-bitars heltal.

För att garantera att intersecting ett plan med en triangel alltid ger antingen tom uppsättning eller en uppsättning av två punkter, måste du överväga triangeln som helhet, inte som enskilda kanter av triangeln separat. För att förstå den geometriska situationen bör du överväga de "signerade avstånden" för hörnen i triangeln från nyansplanet. Beräkna inte dessa signerade avstånd direkt. beräkna i stället punktprodukterna för positionsvektorerna i hörnen med den kvantiserade normala vektorn till planet. Mer specifikt beräknas den kvantiserade normala vektorn enligt följande under initieringen av hue-planet.

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

Observera att den här vektorn är en tvådimensionell vektor. Du kan använda en tvådimensionell vektor eftersom hue-planet är lodrätt, så den tredje komponenten i den normala vektorn är alltid noll. Dessutom initieras en uppslagstabell med punktprodukter för att ha en post för varje hörn från Gamut Boundary Triangles och motsvarande punktprodukt inställd på ett ogiltigt värde.

Under en åtgärd för att korsa nyansplanet med en triangel, letas punktprodukten av varje hörn i triangeln upp. Om värdet i uppslagstabellen är det ogiltiga värdet beräknas punktprodukten med hjälp av följande uttryck.

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

Återigen används aldrig J-komponenten i brytpunkten, eftersom den normala vektorn är vågrät. Den här punktprodukten sparas sedan i uppslagstabellen så att den inte behöver beräknas igen om punktprodukten i brytpunkten efterfrågas senare.

Cachelagring möjliggör en snabb bestämning av om en kant korsar planet, efter att punktprodukterna har tabulerats i uppslagstabellen, som skapas progressivt när hörnen bearbetas.

diagram som visar skärningspunkten mellan nyansplanet och en triangel.

bild 28: Korsa nyansplanet med en triangel

För att triangeln i bild 28 ska korsa nyansplanet i ett icke-degenererat linjesegment måste punktprodukterna i hörnen vara i något av följande mönster när de sorteras i stigande ordning.

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

En slutpunkt i linjesegmentet uppstår när planet korsas av en kant med hörn som har olika tecken i punktprodukten. Om tecknet är noll ligger hörnet precis på planet, och skärningspunkten mellan kanten och planet är själva brytpunkten. Observera också att fallen 0,0,0; -,-,0; 0,+,+ rapporteras inte. Det första fallet (0,0,0) innebär att hela triangeln ligger på planet. Detta rapporteras inte eftersom varje kant av triangeln ska tillhöra en närliggande triangel som inte också ligger helt på planet. Gränsen rapporteras när triangeln beaktas. De andra två fallen (-,-,0 och 0,+,+) motsvarar den geometriska konfiguration som triangeln rör vid planet i ett hörn. Dessa fall rapporteras inte eftersom de inte ger upphov till ett icke-degenererat linjesegment.

Föregående algoritm avgör när en skärningspunkt ska beräknas mellan triangelns kant och nyansplanet. När en kant har fastställts beräknas skärningspunkten med hjälp av parametriska ekvationer. Om en av punktprodukterna är noll är skärningspunkten själva brytpunkten, så ingen beräkning krävs. Förutsatt att båda punktprodukterna i kanthörnarna inte är noll, är hörn1 hörnet med negativ punktprodukt dotProduct1; och hörn2 är hörn med positiv dot produkt dotProduct2. Den här ordningen är viktig för att säkerställa att den beräknade skärningspunkten inte beror på hur hörnens ordning visas i representationen av kanten. Det geometriska begreppet kant är symmetriskt med avseende på dess hörn. Den beräkningsmässiga aspekten av att använda parametriska ekvationer i kanten introducerar asymmetri (val av starthörn), vilket kan ge en något annorlunda skärningspunkt på grund av numeriskt brus och konditionering av de linjära ekvationerna som ska lösas. Med detta sagt, skärningspunkten, skärningspunkten,ges av följande.

t = dotProduct1/(dotProduct1 – dotProduct2)

vägkorsning. J = hörn1. J + t * (hörn2. J - hörn1. J)

intersection.a = vertex1.a + t * (hörn2.a - hörn1.a)

intersection.b = hörn1.b + t * (hörn2.b - hörn1.b)

Gamut Operation: CheckGamut (fortsatt)

Den grundläggande geometriska algoritmen som används för gamutkontroll är att räkna antalet strålkorsningar. För en viss frågepunkt bör du överväga en stråle som börjar med frågepunkten och pekar uppåt (J-riktning). Räkna antalet gånger den här strålen korsar omfångsgränsen. Om det här talet är jämnt är frågepunkten out-of-gamut. Om det här talet är udda är punkten inuti. I princip kan den här algoritmen implementeras i 3D, den plågas vanligtvis av svårigheter som orsakas av degenererade situationer, till exempel strålen som ligger (delvis) på en gränstriangeln eller lägre dimensionell degeneracy, till exempel strålen som ligger (delvis) på en kant av en gränstriangeln. Även i 2D måste du hantera dessa degenererade situationer; men problemet är enklare och har åtgärdats på ett tillfredsställande sätt. Se [O'Rourke].

För en given indatapunkt jab, fastställa dess nyans vinkel h enligt följande.

h = atan(b/a),

Initiera hue-planet och bestäm sedan de gränslinjeelement som motsvarar det här nyansplanet. Eftersom gränslinjeelementen bara är relevanta om de korsar den uppåtgående strålen, konfigurerar du ett triangelfilter för att ta bort trianglar som ger linjeelement som definitivt inte korsar den uppåtgående strålen. I det här fallet bör du överväga triangelns avgränsningsruta. Den uppåtgående strålen kommer inte att korsa triangeln om frågepunkten ligger utanför den "skugga" som gjuts av avgränsningsrutan om en ljuskälla var direkt ovanför. Blås upp detta något med en förutbestämd tolerans för att tillåta numeriskt brus så att du inte oavsiktligt kastar bort trianglar som kan ge användbara linjeelement. Resultatet är den halvfina rektangulära cylindern som visas i bild 29. Att kontrollera om frågepunkten finns i eller utanför den här cylindern kan implementeras effektivt med hjälp av enkla skillnader.

Visar triangelfiltret för CheckGamut.

bild 29: Triangelfilter för CheckGamut

CheckGamut har tre funktionsspecifika komponenter: interna bearbetade data,line elementprocessoroch utdataadapter. Interna bearbetade data är en lista över radelement som har bearbetats av Line Element Processor. I det här fallet lägger line elementprocessorn bara till ett radelement i listan. Den interna datastrukturen för interna bearbetade data kan vara antingen en länkad lista eller en matris som kan växa i storlek.

Utdataadaptern är en modul som kommer åt listan över linjeelement, avgör om ett linjeelement korsar den uppåtgående strålen (antal 1) eller inte (antal 0). Summering av alla dessa antal ger ett totalt antal. -utdataadaptern returnerar slutligen ett svar på "ja" (in-gamut) eller "nej" (out-of-gamut), beroende på om det totala antalet är udda eller till och med. Steget där du avgör om ett linjeelement korsar den uppåtgående strålen förtjänar viss uppmärksamhet eftersom det är här problemet med degeneracy uppstår och även problemet med överräkning uppstår. Efter [O'Rourke] måste den högra slutpunkten (slutpunkten med större krom) vara strikt på höger sida av strålen för att ett linjeelement ska korsa strålen. Detta garanterar att om en slutpunkt någonsin ligger exakt på strålen, räknas den bara en gång. Samma regel löser också den degenererade situationen där linjeelementet ligger exakt på strålen. Du ökar inte antalet för det här radelementet.

Bild 30 visar de resulterande radelementen i ett exempelomfång med frågepunkten i olika positioner.

diagram som visar de resulterande radelementen i ett exempelomfång med frågepunkten i olika positioner.

bild 30: Så här fungerar CheckGamut

Minsta färgskillnadsomfångsmappning

Minsta färgskillnadsomfångsmappning, MinDEMap, har en enkel specifikation: Gör ingenting om en färg är in-gamut. Om en färg är out-of-gamut projicerar du den till "närmaste" punkt på omfångsgränsen. Nyckelordet "närmast" är inte väldefinierat förrän du anger vilken färgskillnadsekvation som ska användas. För att göra beräkningen enklare och snabbare används det euklidiska avståndet för det valda färgutseendet eller en variant av det som färgskillnadsmått. Fördelen med euklidiska mått är att det är kompatibelt med punktprodukten i utrymmet, vilket gör det möjligt att använda linjär algebra. I detalj, om en "punktprodukt" definieras i utrymmet, kan ett avstånd definieras som kvadratroten för punktprodukten av skillnadsvektorn med sig själv. En punktprodukt kan vanligtvis definieras av en positiv bestämd 3x3-matris A.

u?v = u T Av

där höger sida är den vanliga matrisen multiplikation. Om A är identitetsmatrisen återställs standardpunktens produkt. Om Jab i praktiken är färgrymden vill du inte blanda komponenterna, så att en diagonal matris som inte är identitetsmatrisen kan användas. Dessutom kanske du vill behålla skalan på a och b oförändrad så att måttet på nyans bevaras. Så en användbar variant av euklidiska standard dot-produkten är följande.

w J (J-komponent av dig)(J-komponent av v) + (en komponent av dig)(en komponent i v) + (b komponent av dig)(b komponent i v)

där w J är ett positivt tal. En annan variant är att låta J variera med indatafrågepunkten:

w J\ = w J (queryPoint)

Slutresultatet är ett mått på avståndet som är asymmetriskt med avseende på de två punkterna och med olika relativa vikter på ljushet och krom eller nyans när indatafrågepunkten varierar. Detta är i enlighet med vissa observationer om människans färguppfattning att färgskillnader inte viktas lika i alla dimensioner. Det har visat sig att människor är mindre känsliga för skillnader i lätthet än de är för skillnader i nyans och krom.

Följande viktfunktion är användbar.

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

where k ₂ = 1, k ₁ = 0.75/(C mₐₓ ) n, C mₐₓ = 100, n = 2 och C är den mindre av kroma av frågepunkten och C mₐₓ.

så att en vikt på 0,25 sätts på J-termen när krom är noll och en vikt på 1 när krom är 100. Trenden att lägga mindre vikt på J när krom är liten och mer vikt på J när krom är stort följer den rekommenderade användningen för CMC och CIEDE2000.

Graph som visar viktfunktionen på J-komponenten i måttet.

bild 31: Viktfunktionen på J-komponenten i måttet

Använd Jab-utrymme i följande exempel. Det är beräkningsmässigt krävande att söka igenom alla gränstrianglar för att fastställa den närmaste punkten i det euklidiska måttet. Följande är en enkel metod för att göra den här processen så effektiv som möjligt, utan att införa ytterligare antaganden som kan påskynda processen men som också bara får ett ungefärligt svar. För det första är det nödvändigt att förstå det geometriska förfarandet för att projicera en punkt på den givna triangeln. En beskrivning ges här.

En ortogonial projektion på det oändliga planet som innehåller triangeln utförs först. Det kortaste avståndet för frågepunkten från planet kan fastställas i två steg.

(a) Beräkna enhetens normala vektor till triangeln.

(b) Beräkna punktprodukten för enhetens normala vektor och en vektor som bildas från frågepunkten och en punkt på triangeln. det vill: ett av dess hörn. Eftersom den normala vektorn har enhetslängd är det absoluta värdet för den här punktprodukten avståndet för frågepunkten från planet.

Den projicerade punkten kanske inte är svaret eftersom den kan ligga utanför triangeln. Så du måste utföra en kontroll först. Beräkningen motsvarar beräkningen av de barycentriska koordinaterna för den projicerade punkten i förhållande till triangeln. Om den projicerade punkten bestäms vara inuti triangeln är det svaret. Om inte, förvärvas den närmaste punkten på en av triangelns kanter. Utför en sökning på var och en av de tre kanterna. Att bestämma projektionen av frågepunkten på en kant är en process som liknar projektion på triangeln, men en dimension mindre. En ortogonial projektion beräknas först. Om den projicerade punkten ligger på kanten är det svaret. Annars förvärvas den närmaste punkten på en av de två slutpunkterna. Utför en sökning på de två slutpunkterna. Dvs. beräkna avståndet för frågepunkten från var och en och jämför vilken som är mindre.

Noggrann undersökning visar att det finns mycket upprepad sökning när du går igenom alla trianglar eftersom en kant alltid delas av två trianglar och ett hörn som delas av minst tre kanter. Dessutom är du inte mycket intresserad av att hitta den närmaste punkten till en viss triangel; i stället är du intresserad av att hitta den närmaste punkten till hela omfångsgränsen. En viss triangel skulle dock vara den som detta uppnås i. Det finns två strategier som du kan använda för att påskynda sökningen.

strategi jag. Varje hörn bearbetas högst en gång. Varje kant bearbetas högst en gång.

Strategi II. När som helst i sökningen har du en bästa kandidat med motsvarande bästa avstånd. Om du genom en snabb kontroll kan fastställa att en triangel inte kan ge ett bättre avstånd behöver du inte fortsätta beräkningen ytterligare. Du behöver inte den närmaste punkten och avståndet för den här triangeln.

diagram som visar flödet för minsta DE-mappning.

bild 32: Minsta DE-mappningsscheman

Bild 32 visar det allmänna logikflödet för spelomfångskartan MinDEMap. För en frågepunkt anropas funktionen CheckGamut först. Om punkten är in-gamut är kartan en no-op. Om punkten är out-of-gamut anropar du ProjectPointToBoundary. Gå nu vidare till bild 33. I det här läget antas det att följande värden har beräknats.

(a) Enhetens normala vektor till varje Gamut Boundary Triangle med avseende på standardpunktprodukten.

(b) brytpunktslista och kantlista, förutom triangellistan.

diagram som visar rutinen

bild 33: ProjectPointToBoundary-rutinen

Alla dessa är konstanta omkostnader och skulle ha lägre kostnader om tillräckligt många frågor till den här omfångsgränsen görs. Detta är vanligtvis fallet när du skapar en transformerings-LUT från en enhet till en annan, där det bara finns två fasta omfång, och transformerings-LUT körs genom punkter i det enhetligt samplade rutnätet. Du förberäknar de normala vektorerna med avseende på standardpunktprodukten, även om begreppet vinkelräthet baseras på den viktade punktprodukten, som beror på frågepunkten enligt beskrivningen tidigare. Anledningen är att en normal vektor med avseende på den viktade punktprodukten enkelt kan erhållas från den normala vektorn med avseende på standardpunktprodukten. Om n ₀ är en normal vektor med avseende på standardpunktens produkt,

n = (J-komponent i n ₀ /w J, a-component of n ₀, b-component of n ₀ )

är normalt för triangeln med avseende på den viktade punktprodukten. På grund av den här relationen är det fortfarande fördelaktigt att förberäkna n ₀ även om den måste justeras baserat på frågepunkten.

ProjectPointToBoundary-rutinen börjar med att återställa den "bearbetade historiken" för hörnen och kanterna. Det här är tabeller med BOOLEAN-flaggor som spårar om ett hörn eller en kant har besökts tidigare. Den återställer också variabeln ShortestDistance till "INFINITY", vilket är det högsta kodade värdet i det flyttalsnummersystem som används. Sedan körs den genom en loop och söker efter den närmaste punkten från varje triangel med hjälp av ProcessTriangle-anropet. ProcessTriangle är rutinen för att uppdatera variabeln ShortestDistance och är tydligt i den kritiska loopen. En optimering är att stoppa när resultatet är tillräckligt bra. Efter varje anrop till ProcessTriangle undersöks variabeln ShortestDistance. Om det uppfyller ett fördefinierat tröskelvärde kan du sluta. Det fördefinierade tröskelvärdet är beroende av det färgutrymme som används och på den noggrannhet som krävs för färgavbildningssystemet. För ett typiskt program vill du inte göra onödigt arbete om färgskillnaden är mindre än vad som kan urskiljas av mänsklig syn. För CIECAM02 är den här färgskillnaden 1. Använd ett tröskelvärde på 0,005 i implementeringen för att bevara precisionen för beräkningar, eftersom detta kanske bara är ett mellanliggande steg i en kedja av transformeringar.

ProcessTriangle implementerar föregående strategi II. När du hämtar en normal vektor från den förberäknade enhetens normala vektor till triangeln med avseende på standardpunktprodukten beräknar den frågepunktens avstånd till det oändliga planet som innehåller triangeln genom att bilda punktprodukten av enhetens normala vektor och queryVector, vektorn från en av hörnen i triangeln, vertex1, till frågepunkten, queryPoint.

queryVector = queryPoint – hörn1

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

Detta är en relativt billig beräkning, och avståndet krävs för att utföra ytterligare beräkningar. Om detta avstånd inte är mindre än det nuvarande bästa avståndet, ShortestDistance, kommer denna triangel inte att producera ett bättre avstånd, eftersom det inte kommer att ge ett bättre avstånd än planet som innehåller det. I det här fallet returnerar du kontrollen till triangelloopen. Om avståndet är mindre än ShortestDistance har du eventuellt en närmare punkt, om den här punkten ligger inuti triangeln. Du måste utföra vissa "hårda" beräkningar (men inget utöver linjär algebra) för att fastställa detta. Om de andra två hörnen i triangeln är hörn2 och hörn3 bildar du basvektorerna firstBasisVector och secondBasisVector.

firstBasisVector = hörn2 - hörn1

secondBasisVector = hörn3 - hörn1

Använd följande linjära system med ekvationer för att lösa för okända du och v.

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

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

och villkoren för den projicerade punkten att ligga inuti triangeln är:

0 ≤ u ≤ 1, 0 ≤ v ≤ 1 och du + v ≤ 1

Efter den här beräkningen, om det fastställs att den projicerade punkten ligger inom triangeln, har du hittat en ny närmaste punkt. avståndet som du beräknade i början är det nya kortaste avståndet. I det här fallet uppdaterar du variablerna ShortestDistance och ClosestPoint. Om den projicerade punkten ligger utanför triangeln kan du hitta en närmare punkt på en av dess kanter. Därför kan du anropa ProcessEdge-rutinen på var och en av de tre kanterna.

diagram som visar flödet i ProcessEdge- och ProcessVertex-rutinerna.

bild 34 : ProcessEdge- och ProcessVertex-rutiner

ProcessEdge-rutinen implementerar Strategi I, som illustreras i bild 34. ProcessEdge startar genom att kontrollera om gränsen har bearbetats tidigare. I så fall vidtas inga ytterligare åtgärder. Annars fortsätter den att beräkna den ortoggonala projektionen av frågepunkten till den oändliga linje som innehåller kanten. Den linjära algebra som ingår i beräkningen liknar de tidigare triangelekvationerna. Beräkningen är dock enklare, den beskrivs inte här. Om den projicerade punkten ligger inom kanten hittar du avståndet för den projicerade punkten från frågepunkten. Om det här avståndet är mindre än ShortestDistance har du hittat en ny närmaste punkt. Uppdatera både ShortestDistance och ClosestPoint. Om den projicerade punkten ligger utanför kanten anropar du ProcessVertex på de två slutpunkterna. Innan du returnerar kontrollen uppdaterar du kanthistoriken så att den här gränsen markeras som "PROCESSED".

Slutligen ger du en beskrivning av ProcessVertex. ProjectVertex-rutinen implementerar även Strategi I och underhåller en hörnhistoriktabell. Som visas i bild 34 kontrollerar den först om brytpunkten har bearbetats tidigare. I så fall vidtas inga ytterligare åtgärder. Om inte fortsätter det att beräkna avståndet för brytpunkten från frågepunkten. Om avståndet är mindre än ShortestDistance uppdaterar du både ShortestDistance och ClosestPoint. I slutet uppdateras hörnhistoriken så att det här hörnet markeras som "PROCESSED".

När den yttre kontrollloopen antingen har uttömt alla trianglar eller avslutats innan tröskelvärdet för färgskillnad har uppnåtts, används variabeln ClosestPoint. Detta är resultatet av MinDEMap. Anroparen kan också hämta ShortestDistance om den är intresserad av hur långt den mappade färgen kommer från frågefärgen.

Hue Smoothing

diagram som visar två översta vyer av nyansutjämning, originalet ovanpå och nyansen jämnas ut längst ned.

bild 35: Hue Smoothing

Ett problem uppstår med åtgärder som är hue-begränsade. Åtgärden tar alltså bara hänsyn till variabler i ett hue-plan. Bild 35 visar ett exempel på ett omfång som visar "diskontinuerliga" nyanssektorer i de blå nyanserna. Inom detta nyansintervall, för vissa nyansvinklar, är omfångsgränsen tangentiell till nyansplanet. I själva verket orsakar detta en förändring i den topologiska strukturen i nyanssegmenten. I exemplet som visas, när nyansplanet sveper över detta nyansintervall, dyker en "ö" upp och dränks. Den här ändringen i topologin gör att hue-specifika åtgärder blir oavslutade. Till exempel ändras cusp vid fast nyans plötsligt när nyansvinkeln ändras i det här intervallet.

Det finns en färgvetenskapsorsak till varför det är önskvärt att bevara nyans i vissa operationer. För att lösa föregående problem måste de ursprungliga Gamut-gränstrianglarna vara "nyanserade". Generellt sett är en nyansutjämning av en uppsättning Gamut Boundary Trianglar en uppsättning trianglar så att (a) den utgör gränsen för en ny "gamut", som kanske inte motsvarar det faktiska enhetsomfånget, och som innehåller det omfång som definieras av den ursprungliga uppsättningen trianglar; och (b) trianglarna i den nya uppsättningen är avgränsade från att vara parallella med hue-planen.

Ett praktiskt sätt att få en nyans utjämnad uppsättning trianglar är att ta det konvexa skrovet på de ursprungliga hörnen. Som illustreras i bild 35 varierar nyansskivorna i det konvexa skrovet smidigt i det problematiska nyansintervallet utan en plötslig förändring i topologin.

Ange primärvärden och sekundärfiler i beskrivningen av omfångsgräns

Vissa metoder för omfångsmappning, till exempel HueMap, beror på platsen för enhetens primärvärden och sekundärfiler. För additiva enheter är primärvalen röda, gröna och blå (R, G och B); och sekundärerna är cyan, magenta och gul (C, M och Y). För subtraktiva enheter är primärenheterna C, M och Y. och sekundärfilerna är R, G och B. GBD håller reda på alla sex av dessa värden, plus vit och svart (W och K), i en matris med Jab-färgvärden. Dessa värden anges i beskrivningen av omfångsgräns när de skapas. För utdataenheter kan primärvärdena bestämmas genom att köra kombinationer av enhetskontrollvärden via enhetsmodellen. För avbildningsenheter är den här metoden inte lämplig för att skapa referens-GBD eftersom det är nästan omöjligt att avbilda en bild som ger ett helt mättat rent enhetsvärde, till exempel (0,0, 0,0, 1,0). WCS-enhetsprofiler innehåller indexen för primärvalen i insamlingsmålet. Eftersom dessa värden inte finns i en ICC-profil använder du värden som mäts från ett typiskt skannermål efter konvertering till Jab, i förhållande till ICC-visningsvillkoren.

Ange den neutrala axeln i beskrivningen av omfångsgräns

HueMap- och Relativ MinCD-omfångsmappningsmetoder använder enhetens neutrala axel för uträtning. För baslinjeutdataenheterna kan den neutrala axeln bestämmas genom att köra enhetsneutrala värden (R=G=B eller C=M=Y) via metoden DeviceToColorimetric och sedan genom metoden ColorimetricToAppearance för CIECAM02-objektet. Avbildningsenheter returnerar dock inte alltid ett enhetsneutralt värde när de presenteras med ett neutralt exempel. Detta gäller särskilt när den omgivande belysningen inte är helt neutral. WCS-enhetsprofiler innehåller indexen för de neutrala exemplen i målet. Använd dessa exempel för att ange den neutrala axeln. Eftersom den här informationen inte är tillgänglig för ICC-profiler måste du använda samma metod som används för utdataenheter. kör neutrala enhetsexempel via metoden DeviceToColorimetric och koppla sedan indatavärdena och colorimetric-resultaten.

Grundläggande begrepp för färghantering

Scheman och algoritmer för Windows-färgsystem