Partager via


Schéma et algorithmes de profil de modèle de carte GAMUT WCS

Aperçu

Ce schéma est utilisé pour spécifier le contenu d’un profil de modèle de carte gamut (GMMP). Les algorithmes de référence associés sont décrits dans la rubrique suivante.

Le schéma GMMP de base se compose d’informations d’en-tête courantes, d’une référence facultative à un plug-in Gamut Map Model préféré et de balises d’extension.

En outre, le GMMP fournit des informations explicites sur le modèle de carte Gamut ciblé et fournit une stratégie sur le modèle de mappage gamut de référence à utiliser si le modèle ciblé n’est pas disponible. Le schéma peut inclure des informations d’extension privées, mais n’inclut aucune autre information superflue.

Architecture de profil de modèle de carte gamut

Diagramme montrant le profil de modèle de carte Gamut.

L’échantillonnage de l’espace de coloration de l’appareil de sortie est effectué en itérant à travers les colorants de 0,0 à 1,0 avec une étape fractionnaire, en cumulant toutes les combinaisons de chaque colorant à chaque étape, puis en les convertissant de l’espace colorant de l’appareil en espace d’apparence de couleur à l’aide de la méthode DM ::D eviceToColorimetricColors suivie de la méthode CAM ::ColorimetricToAppearanceColors. Voici un exemple de la façon dont cette opération est effectuée pour RVB.

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);

          }

     }

}

Génération de la limite Gamut

Il existe trois composants à la limite de gamut : les primaires, les échantillons neutres et les shells. Les primaires sont générées en prenant les primaires de l’appareil et en appliquant la transformation DeviceToColorimetric/ColorimetricToAppearance. Les échantillons neutres sont générés en échantillonnant l’espace de colorant de l’appareil dans la zone neutre et en appliquant la même transformation. Pour trois dispositifs de colorant (RVB ou CMY), les échantillons neutres sont définis comme ayant tous les colorants égaux, par exemple, R == G == B. Pour CMYK, les échantillons neutres sont définis comme ayant C == M == Y == 0.

Les facteurs qui influencent les données utilisées pour créer la limite de gamut sont les exemples de données (appareils de base uniquement) et les conditions d’affichage. La taille d’étape utilisée pour effectuer l’échantillonnage complet de l’espace de colorant (pour les moniteurs et pour l’interpréteur plausible) est une constante interne et n’est pas disponible pour la manipulation extérieure. La modification des conditions d’affichage modifie le comportement du modèle d’apparence de couleur (CAM) et modifie la forme de la limite de gamut. Vous devez donc générer une limite de gamut liée au profil des conditions d’affichage. Si des exemples de données sont utilisés, comme dans le cas des imprimantes de référence et des périphériques de capture, les échantillons ont un grand impact sur la forme de la gamut de référence et affectent le comportement du modèle lui-même.

Pour les appareils d’entrée, tels que les caméras et les scanneurs, différents échantillonnages sont utilisés pour générer l’interpréteur de commandes de référence et l’interpréteur de commandes plausible. L’interpréteur de commandes de référence est généré à partir des mesures utilisées pour initialiser le modèle d’appareil. L’interpréteur de commandes plausible est généré similaire à l’illustration précédente pour les périphériques de sortie. La différence est que lorsque vous entrez une cible classique, vous n’obtenez pas de valeurs entièrement saturées (où R, G ou B = 255). Vous devez extrapoler à l’aide du modèle d’appareil pour estimer ces valeurs.

Schéma GMMP

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

Éléments de schéma GMMP

GamutMapModel

Cet élément est une séquence des sous-éléments suivants :

  1. Chaîne ProfileName,
  2. DefaultBaselineGamutMapModel,
  3. Chaîne de description facultative,
  4. Chaîne d’auteur facultative,
  5. PlugInGamutMap facultatif et
  6. ExtensionType facultatif.

Conditions de validation : chaque sous-élément est validé par son propre type.

Namespace

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

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

Version

Version « 1.0 » avec la première version de Windows Vista.

Conditions de validation : 1.0 dans Windows Vista. Les versions <2.0 sont également valides pour prendre en charge les modifications non cassants apportées au format.

Documentation

Schéma de profil de modèle de carte gamut.

Copyright (C) Microsoft. Tous droits réservés.

Conditions de validation : chaque sous-élément est validé par son propre type.

Type DefaultBaselineGamutMapModel

Type UINT

Valeurs d’énumération :

« MinCD\_Absolute » « MinCD\_Relative » « SIG\_KNEE » « HueMap »

Conditions de validation : les valeurs doivent correspondre à l’une des énumérations ci-dessus.

PlugInGamutMapType

Cet élément est une séquence d’un GUID GUIDType et de tous les sous-éléments.

Conditions de validation : le GUID est utilisé pour correspondre au GUID de la DLL PlugIn GMM. Il existe un maximum de 100 000 sous-éléments personnalisés.

Type d’extension

Cet élément est une séquence facultative de tous les sous-éléments.

Conditions de validation : il peut y avoir un maximum de 100 000 sous-éléments.

Algorithmes de référence GMMP

Alignement des axes neutres

La plupart des algorithmes de mappage de gamut ont un objectif de mapper l’axe neutre de l’appareil source à l’axe neutre de l’appareil de destination : autrement dit, le blanc passe au blanc, le noir au noir et le gris au gris. Cela est traité en partie en mettant à l’échelle la luminosité des couleurs sources pour correspondre à la plage de luminosité de l’appareil de destination. Mais cela ne répond pas complètement au problème.

Il s’agit d’une propriété physique de la plupart des appareils d’imagerie que la chromatique du blanc de l’appareil ne correspond pas exactement à la chromatique de l’appareil noir. Par exemple, le blanc du moniteur dépend de la somme des chromatiques et des luminosités relatives des trois primaires, tandis que le moniteur noir dépend de la réflectance de la surface d’affichage. L’imprimante blanche dépend de la chromaticité du papier, tandis que l’imprimante noire dépend de l’encre ou du toner utilisé. Un modèle d’apparence qui mappe l’appareil blanc exactement à l’axe neutre de l’espace d’apparence (chroma exactement égal à zéro) ne mappe pas l’appareil noir à l’axe neutre. Étant donné que l’œil est plus sensible aux différences chromatiques à mesure que la légèreté augmente, les gris moyen seront représentés comme étant encore plus chromatique que le noir de l’appareil. (La figure 1 illustre la courbure des axes neutres en deux dimensions. En fait, les axes neutres forment une courbe plus complexe en trois dimensions.)

Alors que la CAM prédit que ces couleurs neutres de l’appareil apparaîtront chromatiques, les observateurs réels semblent compenser cela. La plupart des gens ne considèrent pas ces valeurs neutres d’appareil comme chromatiques. Pour la plupart des modèles de mappage de gamut, vous devez donc continuer à mapper les neutres sources aux neutres de l’appareil.

Pour mapper les neutres sources aux neutres de l’appareil, ajustez les limites de gamut source et de destination et chaque pixel lorsque vous appliquez l’algorithme de mappage de gamut. Tout d’abord, ajustez chaque valeur dans la couleur source afin que l’axe neutre de l’appareil source au niveau de la luminosité de la couleur source tombe directement sur l’axe neutre de l’espace d’apparence. (Voir le côté gauche de la figure 1.) Ensuite, ajustez la description de la limite de gamut de l’appareil de destination afin que chaque couleur sur l’axe neutre de l’appareil de destination au niveau de la couleur de limite de gamut de l’appareil de destination tombe directement sur l’axe neutre de l’espace d’apparence. (Voir le côté droit de la figure 1.)

Diagramme montrant le graphique de limites gamut source à gauche et la limite gamut de destination à droite.

Figure 1 : Alignement des axes neutres illustrés. Gauche : ajustement des points sources par rapport à l’axe neutre de l’appareil source. Droite : ajustement de la description de la limite de gamut de destination par rapport à la description de la limite de la plage de destination.

Notez que vous ajustez chaque valeur de pixel source par rapport à l’axe neutre à cette valeur de légèreté. Cela garantit que les neutres de l’appareil source tombent sur l’axe neutre du modèle d’apparence. Vous déplacez également toutes les autres couleurs à cette légèreté de la même quantité, afin qu’il n’y ait aucune discontinuité dans la représentation de la gamut source. Vous devez passer de différentes quantités à différents niveaux de légèreté, car les neutres de l’appareil source ne sont pas représentés comme aussi chromatiques aux différents niveaux de légèreté. Clairement, ce n’est pas une transformation triviale.

La gestion des valeurs des appareils de destination est un peu plus délicate. Au départ, vous ajustez la limite de gamut de destination entière de la même manière, mais par rapport à l’axe neutre de l’appareil de destination. Ceci est illustré dans la figure 1 sur le côté droit. Cet ajustement garantit que les valeurs grises sources sont mappées aux valeurs grises de destination. Il s’agit de l’espace dans lequel les algorithmes de mappage de gamut fonctionnent.

Toutefois, cet espace ne décrit pas avec précision le comportement réel de l’appareil de destination. Vous devez inverser le mappage avant que les couleurs mappées de gamut soient transmises au modèle d’apparence et au modèle d’appareil de destination. Vous décalerez toutes les valeurs mappées par l’opposé du décalage appliqué précédemment à l’axe neutre de l’appareil de destination. Cela mappe l’axe neutre de destination à la valeur représentée initialement par la CAM. Il fait de même pour la limite de gamut et toutes les valeurs intermédiaires.

Diagramme montrant un graphique permettant d’annuler l’alignement de l’axe neutre de l’appareil de destination.

Figure 2 : Annuler l’alignement de l’axe neutre de l’appareil de destination

Différence de couleur minimale (MinCD)

Différence de couleur minimale (MinCD) Versions relatives et absolues , équivalentes à l’intention colorimétrique ICC.

Remarque

Le GMM MinCD est adapté au mappage des graphiques et de l’art en courbes contenant des couleurs « logo » (couleurs de tache), des dégradés de couleurs de logo avec des couleurs hors gamme et pour la dernière étape des transformations de vérification linguistique. Bien que le GMM minCD puisse être utilisé pour les images photographiques entièrement dans la gamme de destination, il n’est pas recommandé pour le rendu général d’images photographiques. Le mappage des couleurs hors gamme aux couleurs sur la surface de gamut de destination peut entraîner des artefacts indésirables, tels que des irrégularités de ton ou de chroma dans des dégradés lisses qui traversent la limite de gamut. BasicPhoto est recommandé pour les images photographiques. Si une image photographique ou contone nécessite un mappage gamut autre que BasicPhoto, l’alternative doit être de créer un GMM de plug-in implémentant ce mappage, au lieu d’utiliser MinCD.

 

Les couleurs in-gamut restent inchangées. Pour les couleurs hors gamme, la légèreté et la couleur sont ajustées en recherchant le point dans la plage de destination qui a la distance de couleur minimale des points d’entrée hors gamut. La distance de couleur est calculée dans l’espace JCh. Toutefois, vous poidsez la distance en légèreté (J) et la distance en chroma (C) ou teinte (h) différemment. Une fonction de poids dépendant de la couleur est utilisée pour la distance dans la légèreté afin que le poids soit plus petit pour la petite couleur et plus grand pour la grande chromaie jusqu’à ce qu’une couleur seuil soit atteinte, après quoi le poids reste à 1, c’est-à-dire le même poids que la distance en chroma ou teinte. Cela suit l’utilisation recommandée pour CMC et CIEDE2000. Il existe deux variantes : colorimétrique relative et colorimétrique absolue.

Colorimetric relatif : Tout d’abord, alignez les axes neutres source et de destination comme décrit précédemment. Ensuite, attachez la couleur source ajustée à la limite de gamut de destination ajustée. (Voir la figure 4. Mappage chromatique le long de la légèreté constante.) Réajustez les valeurs de l’appareil de destination comme décrit précédemment. Dans le cas d’une limite de gamut de destination monochrome, le découpage chromatique signifie que la valeur chromatique (C) est définie sur zéro (0,0).

Colorimétrique absolue : Ceci est similaire à la colorimétrique relative, mais sans l’alignement de l’axe source et neutre de destination. La valeur source est clippée directement vers l’axe neutre de destination. Notez que si les limites de la gamme source et de destination sont monochromes, le comportement est identique à la variante colorimétrique relative ; autrement dit, l’alignement des axes neutres est effectué, puis la chroma est rogné à zéro. Cela garantit qu’une sortie raisonnable est atteinte même si les supports et les colorants sont considérablement différents.

Diagramme montrant un graphique pour le découpage MinCD sur la gamme ajustée.

Figure 3 : Découpage minCD vers la gamut ajustée

BasicPhoto

Aperçu

BasicPhoto - équivalent à l’intention préférée, pictorial ou perceptive de la CPI.

Cet algorithme est une variante du mappage de la légèreté sigmoidale dépendante de la chromatique et de la mise à l’échelle des genoux cusp (SGCK) décrite par CIE TC8-03 dans CIE156:2004. Cet algorithme de variante prend en charge les descripteurs de limites de gamut (GBD) avec des interpréteurs de commandes à double gamut ; c’est-à-dire des GBD avec un interpréteur de commandes de référence et un interpréteur de commandes plausible. L’algorithme SGCK, qui suppose initialement qu’une seule coquille gamut dans le GBD, est basé sur l’algorithme SIG_KNEE (Braun 1999), qui incorpore le mappage de la légèreté sigmoidale et la mise à l’échelle de la fonction de genou proposée par Braun et Fairchild (1999), combinée à la dépendance chroma de GCUSP (Morovic, 1998). Il conserve une constante de teinte perçue, par exemple, l’angle de teinte dans jab corrigé par teinte, et utilise une mise à l’échelle générique (indépendante de l’image) sigmoidale qui est appliquée d’une manière dépendante de la couleur et d’une fonction de genou de 90 pour cent. La variante s’adapte le long des lignes de légèreté constante.

Le cas d’un interpréteur de commandes gamut unique

Il est utile de passer en revue l’algorithme dans le cas où les GOD source et de destination n’ont qu’un seul interpréteur de commandes gamut. Dans ce cas, l’algorithme se compose des calculs suivants.

Tout d’abord, effectuez un mappage de légèreté initiale à l’aide de la formule suivante :

Affiche la formule pour le mappage de légèreté initiale. (1)

Jₒ est la légèreté originale et JR est la légèreté de reproduction.

Affiche la deuxième formule de mappage de légèreté. (2)

Lorsque la limite de gamut source est monochrome, la valeur chromatique est égale à zéro pour la limite monochrome en raison de l’alignement de l’axe neutre. Cela entraînera le cas dégénéré où C est égal à zéro. Dans ce cas, pC est défini sur 1.

pC est un facteur de pondération dépendant de la chromatique (Morovic, 1998) qui dépend de la chroma de la couleur d’origine, C et J S sont le résultat de la légèreté d’origine mappée à l’aide d’une fonction sigmoidale.

 

Pour calculer JS (Braun et Fairchild, 1999), une table de recherche unidimensionnelle (LUT) entre les valeurs de légèreté d’origine et de reproduction est d’abord configurée sur la base d’une fonction normale cumulative discrète (S).

Affiche une formule pour calculer J s. (3)

où x ₀ et S sont respectivement la moyenne et l’écart type de la distribution normale et i = 0,1,2... m,m correspond au nombre de points utilisés dans le LUT. Si est la valeur de la fonction normale cumulative pour i /m percent. Les paramètres dépendent de la légèreté du point noir de la gamme de reproduction et peuvent être interpolés à partir du tableau 1. Pour plus d’informations sur le calcul de ces paramètres, consultez Braun et Fairchild (1999, p. 391).

J minOut

5,0

10.0

15,0

20.0

x ₀

53.7

56.8

58.2

60.6

S

43.0

40.0

35,0

34,5

Tableau 1 : Calcul du paramètre de compression lightness BasicPhoto

Pour utiliser S comme mappage de légèreté LUT (S LUT ) il doit d’abord être normalisé dans la plage de luminosité de [0,100]. Les données normalisées sont ensuite mises à l’échelle dans la plage dynamique de l’appareil de destination, comme indiqué dans l’équation 4, où Jmin\ Out et Jmax\ Out sont les valeurs de légèreté du point noir et du point blanc du support de reproduction, respectivement.

Affiche la formule de S comme un mappage de légèreté LUT. (4)

À ce stade, les valeurs J S peuvent être obtenues à partir du LUT S en interpolant entre les points m des valeurs J O etJ S correspondantes qu’elle contient, et en utilisant l’équation suivante comme entrée.

Affiche la formule pour obtenir les valeurs J S. (5)

J minIn est la valeur de légèreté du point noir du milieu d’origine, J maxIn est la valeur de légèreté du point blanc du milieu d’origine, et J O est la légèreté d’origine. Pour référence ultérieure, vous pouvez indiquer par S la fonction sigmoidale définie de la manière décrite, comme illustré dans la figure 4 suivante.

Diagramme montrant le graphique pour le mappage chromatique le long de la légèreté constante.

Figure 4 : Mappage chromatique le long de la légèreté constante

Ensuite, si la limite de gamut de destination est chromatique, compressez la chroma le long des lignes de légèreté constante (l) et effectuez la compression comme suit.

Affiche la formule pour effectuer la compression chromatique. (6)

d représente la distance de E sur l ; g représente la limite de gamut moyenne ; r représente la reproduction ; et o la figure 5 d’origine.

Diagramme montrant le graphique pour la compression chromatique et légère dans BasicPhoto.

Figure 5 : Compression chromatique et légèreté dans BasicPhoto

Si la limite de gamut de destination est monochrome, la valeur de chroma est rogné sur zéro.

Troisièmement, utilisez un clip MinCD (décrit précédemment) pour éliminer toute erreur résiduelle.

Amélioration noire

L’algorithme précédent peut être modifié pour améliorer le noir lorsque la destination est un appareil d’imprimante. Le problème doit être lié au choix de JminOut, qui ne correspond généralement pas à la couleur la plus sombre qu’une imprimante peut produire.

Plus précisément, la couleur avec densité la plus élevée, obtenue en plaçant 100 % d’encres (ou couverture maximale possible, si la limitation GCR/ink est en vigueur), n’est généralement pas « neutre » dans l’espace d’apparence de couleur. Voir la figure 6. En d’autres termes, si la légèreté minimale neutre est utilisée pour l’appareil de destination, l’échelle de légèreté construite mappe à une légèreté minimale qui n’est pas la densité la plus élevée qui peut être obtenue par l’imprimante. Considérez le cas d’utilisation supplémentaire de moniteur sur l’imprimante. Le moniteur noir, R=G=B=0, sera alors imprimé comme n’étant pas la densité la plus élevée. L’impact sur la qualité de l’image est qu’il y a un manque de profondeur et de contraste.

Diagramme montrant comment le point noir de l’appareil peut être plus sombre que la légèreté minimale neutre.

Figure 6 : Le point noir de l’appareil peut être plus sombre que la légèreté minimale neutre.

Supposons que la destination « point noir de l’appareil » est Jkakbk/JkCkh k. Si C k n’est pas zéro, le point noir de l’appareil n’est pas neutre par rapport à CAM02. Si vous utilisez J k pour la destination « légèreté minimale neutre » dans la construction de l’échelle de légèreté ; autrement dit, définition

JminOut = Jk

et l’appliquer à l’interpréteur de commandes gamut source, vous obtenez la configuration illustrée dans la figure 7. Dans la figure, le plan de teinte correspond à h k.

Diagramme montrant le scaler de légèreté modifié avec point noir de l’appareil de destination.

Figure 7 : Géométrie utilisant le scaler de légèreté modifié avec point noir de l’appareil de destination

Pour permettre à l’algorithme de compression chromatique suivant de continuer, vous souhaitez aligner les luminosités maximales et minimales sur les interpréteurs de commandes source et de destination. Cela peut être obtenu en ajustant l’interpréteur de commandes de destination entre J neutralMin et J k en déplaçant des points vers la gauche. En outre, cette transformation doit être appliquée sur l’ensemble de l’espace Jab, pas seulement le plan de teinte correspondant à h k.

La transformation est

Affiche la formule de la transformation.

La figure 8 montre l’effet de la transformation.

Diagramme montrant l’effet de l’échelle de légèreté modifiée avec point noir de l’appareil de destination.

Figure 8 : Géométrie à l’aide de l’échelle de légèreté modifiée avec point noir de l’appareil de destination

Après avoir appliqué l’algorithme de compression chromatique habituel, le point doit ensuite être « décalé ; » autrement dit, la transformation inverse doit être appliquée pour obtenir la couleur mappée finale.

Affiche la formule de la transformation inverse pour obtenir la couleur mappée finale.

Le cas des interpréteurs de commandes à double gamut

L’objectif est de généraliser SIG_KNEE pour l’interpréteur de commandes gamut unique dans le cas où l’appareil source GBD ou l’appareil de destination gbD a une structure à deux interpréteurs de commandes. L’interpréteur de commandes interne sera appelé l’interpréteur de commandes référence, tandis que l’interpréteur de commandes externe sera appelé l’interpréteur de commandes plausible. Vous souhaitez prendre en compte les cas suivants.

(a) Les goD sources et les goD de destination ont une structure à deux interpréteurs de commandes.

(b) Le GBD source a une structure à deux interpréteurs de commandes ; le GBD de destination n’a qu’un seul interpréteur de commandes.

(c) Le GBD source n’a qu’un seul interpréteur de commandes ; le GBD de destination a une structure à deux interpréteurs de commandes.

(d) Les goD sources et les goD de destination n’ont qu’un seul interpréteur de commandes.

Le cas (d) est le cas d’un interpréteur de commandes gamut unique qui a été abordé précédemment. Pour les cas (a), (b) et (c), vous pouvez généraliser la mise à l’échelle de la légèreté pour utiliser les informations supplémentaires de la structure de l’interpréteur de commandes double. Dans les cas (b) et (c) où la source ou la destination n’a qu’un seul interpréteur de commandes, vous introduisez un « interpréteur de commandes de référence induit » qui sera abordé dans une section suivante, « Shell référence induit ». L’algorithme général pour deux interpréteurs de commandes sera décrit pour le cas (a). Une fois la construction de l’interpréteur de commandes de référence induit expliquée, l’algorithme peut également être appliqué à la casse (b) et (c). Quant à la compression chromatique, le ratio de compression sera déterminé par les plus grands shells disponibles. En d’autres termes, si l’interpréteur de commandes plausible et l’interpréteur de commandes référence sont disponibles, l’interpréteur de commandes plausible sera utilisé ; sinon, l’interpréteur de commandes référence sera utilisé.

Mise à l’échelle de la luminosité généralisée

L’existence de deux interpréteurs de commandes pour le goD source et de destination signifie que vous devez mapper un ensemble de quatre points du GBD source à un ensemble correspondant dans le GOD de destination.

Montre comment mapper un ensemble de quatre points à un ensemble correspondant.

Les indices ont les significations suivantes.

o ou r : « original » (source) ou « reproduction » (destination)

min ou max : légèreté neutre minimale ou maximale neutre

pla ou ref : Interpréteur de commandes plausible ou shell de référence

L’ordre dans chaque quadruplé est également l’ampleur relative attendue de ces points.

La carte Lightness Rescaling utilise les deux premières équations que l’interpréteur de commandes unique, mais J S est défini de manière fragmentante comme suit.

Affiche la formule de J S de manière fragmenté. (7)

En d’autres termes, il s’agit de sigmoidal dans l’interpréteur de commandes de référence et linéaire en dehors. Voir figure 9.

Diagramme montrant un graphique pour la fonction Lightness Rescaling pour les GOD à deux interpréteurs de commandes.

Figure 9 : Fonction de mise à l’échelle de légèreté pour les GOD à deux interpréteurs de commandes

INTERPRÉTEUR DE COMMANDES DE RÉFÉRENCE INDUIT

Où un GBD a un interpréteur de commandes et que l’autre GOD a deux interpréteurs de commandes, vous devez créer un « Interpréteur de commandes de référence » pour le GBD avec un seul interpréteur de commandes. L’interpréteur de commandes existant, qui serait appelé l’interpréteur de commandes de référence, sera remplacé par « Shell plausible ». En fait, vous n’avez pas à créer un interpréteur de commandes dans l’espace Jab. Étant donné que la mise à l’échelle de la légèreté utilise uniquement J max et J min, vous devez uniquement effectuer ces valeurs pour l’interpréteur de commandes référence induit. Il existe deux cas, selon le gbD avec deux interpréteurs de commandes.

Cas 1 : Le gbD source a deux interpréteurs de commandes ; destination GBD a un interpréteur de commandes.

Déterminez l’interpréteur de commandes référence induit de destination sur l’axe neutre ; autrement dit, le J r,\ min,\ ref et J r,\ max,\ ref de l’interpréteur de commandes. Cette opération s’effectue à l’aide de l’algorithme suivant.

Affiche l’algorithme pour déterminer l’interpréteur de commandes référence induit par la destination.

Les facteurs ? bas et ? contrôlez la séparation entre l’interpréteur de commandes plausible et l’interpréteur de commandes de référence. La valeur 1 signifie que les valeurs J min ou J mₐₓ coïncident. Leurs valeurs sont « induites » à partir de l’interpréteur de commandes de référence source et de l’interpréteur de commandes plausible source.

Affiche la formule des valeurs de l’interpréteur de commandes référence source et de l’interpréteur de commandes plausible source.

Les « facteurs de fudge » F low et F high sont des paramètres paramétrables qui doivent se trouver entre 0 et 1. Si la valeur est 0, le J min ou J mₐₓ sont directement induits à partir des interpréteurs de commandes sources. Pour ce cas, choisissez F faible = 0,95 et F élevé = 0,1.

Cas 2 : Le gbD source a un interpréteur de commandes ; destination GBD a deux interpréteurs de commandes.

Déterminez l’interpréteur de commandes référence induit par la source sur l’axe neutre ; autrement dit, le J o,\ min,\ ref et J o,\ max,\ ref de l’interpréteur de commandes. Cette opération s’effectue à l’aide de l’algorithme suivant.

Affiche l’algorithme pour déterminer l’interpréteur de commandes référence induit par la destination sur l’axe neutre.

Là encore, les facteurs ? bas et ? contrôlez la séparation entre l’interpréteur de commandes plausible et l’interpréteur de commandes de référence. La valeur 1 signifie que les valeurs J min ou J mₐₓ coïncident. Leurs valeurs sont « induites » à partir de l’interpréteur de commandes de référence source et de l’interpréteur de commandes plausible source :

Affiche l’algorithme pour contrôler la séparation entre l’interpréteur de commandes référence et l’interpréteur de commandes plausible source.

Raisons des modifications des recommandations du CIE TC8-03

BasicPhoto diffère des recommandations CIE TC8-03 de la manière suivante.

  1. Chroma n’est pas compressé vers le cusp, mais le long des lignes de légèreté constante.
  2. La plage de luminosité utilise la légèreté de la couleur la plus sombre dans la gamut plutôt que le point auquel la limite de gamut franchit l’axe neutre.
  3. BasicPhoto prend en charge à la fois un interpréteur de commandes gamut de référence et un interpréteur de commandes gamut plausible, si l’une ou l’autre limite de gamut dans la transformation a deux interpréteurs de commandes.
  4. BasicPhoto utilise CIECAM02 ; au lieu d’utiliser CIECAM97s pour convertir en D65 à 400 cd/m2, puis à l’aide de l’espace de couleur IPT RIT.

La première modification a été apportée pour empêcher les problèmes d’inversion de tonalité qui peuvent se produire lors de l’utilisation de la compression vers un cusp. Comme illustré dans la figure 10, la compression de cusp peut entraîner des inversions de tonalité. Cela peut se produire lorsque les couleurs de haute couleur sont plus claires que les couleurs de la couleur inférieure. Étant donné que SGCK compresse chaque pixel indépendamment à la fois dans la légèreté et la couleur, il n’est pas garanti de conserver la relation de légèreté entre les valeurs de pixels après la compression. L’inconvénient bien connu de cette décision de compresser sur des lignes de légèreté constante est que vous pouvez subir des pertes de chroma, en particulier dans les zones où la limite de gamut de destination est très plate, comme cela se produit avec des jaunes lumineux.

Diagramme montrant l’inversion de tonalité provoquée par SGCK.

Figure 10 : Inversion de tonalité causée par SGCK

Montre une image originale d’une théière. Affiche le résultat SGCK de l’image de théière. Affiche le résultat BasicPhoto de l’image de théière.

Figure 11 : Image d’origine, résultat SGCK et résultat BasicPhoto

La figure 11 illustre cette inversion de ton. Sur la gauche est une image d’origine capturée par une caméra numérique ; au centre, l’image telle qu’elle est reproduite par SGCK ; et à droite, l’image telle qu’elle est reproduite par BasicPhoto. L’image à gauche se trouve dans l’espace de couleur de l’appareil photo numérique, le centre et les images de droite se trouvent dans l’espace de couleur d’un écran vidéo LCD. Dans l’image d’origine, la partie supérieure de la théière est plus foncée que le bas, car le fond reflète la table sur laquelle il est assis. Dans l’image SGCK, la partie supérieure est réellement plus légère que le bas, en raison de l’inversion de ton. En outre, il est difficile de voir les éléments reflétés dans la partie inférieure de la théière. À droite, BasicPhoto a fixé l’inversion de ton et les articles réfléchis sont plus clairement distingués.

Le deuxième changement a été apporté pour améliorer la reproduction de couleurs presque noires sur les imprimantes où le noir le plus noir ne tombe pas directement sur l’axe neutre CIECAM02. La figure 12 suivante montre une image convertie en sRVB ; reproduit pour une imprimante à jet d’encre RVB à l’aide de SGCK ; et reproduits pour la même imprimante à l’aide de BasicPhoto. L’image dans le centre n’utilise pas le noir complet de l’appareil, et donc il manque le contraste vu dans l’original. Le contraste est restauré avec BasicPhoto.

Affiche l’image d’origine d’un jeu de lecture. Affiche l’image du jeu de lecture reproduit pour une imprimante à jet d’encre R G B à l’aide de SGCK. Affiche l’image de l’ensemble de lecture reproduit pour une imprimante à jet d’encre R G B à l’aide de BasicPhoto.

Figure 12 : Noir amélioré

La troisième modification a été apportée pour améliorer la reproduction des couleurs pour les caméras numériques. En particulier dans les cas où l’appareil photo numérique a été profilé à l’aide d’une cible de référence, une description de limite de gamut générée à partir de couleurs mesurées peut ne pas inclure toutes les couleurs qui peuvent être capturées dans une scène réelle. Au lieu de découper toutes les couleurs dans la plage de couleurs mesurée, vous autorisez l’extrapolation pour produire une limite de gamut plausible. L’algorithme BasicPhoto est conçu pour prendre en charge une telle limite de gamuts extrap isolé.

La quatrième modification a été apportée, car CIECAM02 fonctionne bien pour le mappage gamut. Le processus recommandé par TC8-03 de conversion des couleurs d’appareil en D65 à 400 cd/m2, puis l’utilisation de l’espace de couleurs IPT RIT est à la fois gourmand en calcul et en temps.

Mappage hue

HueMap est l’équivalent de l’intention de saturation icc.

Si la limite de gamut source ou la limite de gamut de destination ne contient pas de primaires, ce modèle revient au modèle MinCD (relatif) décrit dans une section précédente ; par exemple, les appareils pour lesquels les primaires ne peuvent pas être déterminées (profils ICC avec plus de quatre canaux) ou des profils ICC monochromes.

Cet algorithme ajuste d’abord la teinte de la valeur de couleur d’entrée. Ensuite, il ajuste simultanément la légèreté et la couleur, à l’aide d’un mappage de cisaillement. Enfin, il extrait la valeur de couleur pour s’assurer qu’elle se trouve dans la gamme.

La première étape consiste à déterminer les « Roues Hue ». Recherchez les valeurs JCh pour les couleurs primaires et secondaires pour l’appareil source et de destination. Vous envisagez uniquement les composants hue. Cela entraîne une roue de teinte primaire ou secondaire avec six points de couleur pour chaque appareil. (Voir la figure 13.)

Diagramme montrant les roues de teinte avec six points de couleur.

Figure 13 : Roues Hue

De meilleurs résultats peuvent être obtenus si le principal bleu source n’est pas pivoté vers le principal bleu de destination. Au lieu de cela, l’angle de teinte primaire bleu source est utilisé comme angle de teinte primaire de destination.

Ensuite, effectuez les rotations de teinte pour chaque couleur d’entrée de l’image source,

a)À l’aide de l’angle de teinte de la couleur d’entrée, déterminez l’emplacement de la couleur sur la roue de teinte source par rapport aux deux couleurs primaires ou secondaires adjacentes. L’emplacement peut être considéré comme un pourcentage de la distance entre les primaires. Par exemple, la teinte de couleur d’entrée est de 40 pour cent de la façon entre la valeur de teinte de Magenta et la valeur de teinte rouge.

b)Sur la roue de teinte de destination, recherchez l’angle de teinte associé, par exemple, 40 % de Magenta à Rouge. Cette valeur correspond à l’angle de teinte de destination.

En général, les primaires sources et les secondaires ne seront pas aux mêmes angles de teinte que les primaires et les secondaires de destination ; autrement dit, l’angle de teinte de destination est généralement différent de l’angle de teinte source.

Par exemple, supposons que les roues de teinte produisent les valeurs suivantes :

Source M = 295 degrés, Source R = 355 degrés.

Destination M = 290 degrés, Destination R = 346 degrés.

Si l’angle de teinte de la couleur d’entrée est de 319 degrés, il est de 40 pour cent de l’angle (24 degrés) de la source M à la source R. L’angle de M à R est de 60 degrés, et l’angle de M à la teinte d’entrée est de 24 degrés. Calculez l’angle sur la destination qui est de 40 % entre la destination M et la destination R (22 degrés), de sorte que l’angle de teinte de la couleur de destination est de 312 degrés.

Ensuite, calculez les points de référence de teinte pour la teinte source et la teinte de destination. Pour calculer le point de référence de teinte pour une valeur h (teinte) particulière, vous souhaitez rechercher la valeur J (légèreté) et la valeur C (chroma).

  • Recherchez la valeur J du point de référence de teinte en interpolant entre les valeurs J des points principaux ou secondaires adjacents, en utilisant la position relative de la teinte ; par exemple, 40 % dans cet exemple.
  • Recherchez la valeur C maximale à cette valeur J et h. Vous avez maintenant le JCh du point de référence de teinte pour cette teinte.

Diagramme montrant une feuille de teinte.

Figure 14 : Feuille de teinte (visualisation d’une tranche de limite de gamut à une teinte spécifique)

L’étape suivante consiste à calculer le mappage de cisaillement pour chaque pixel. Tout d’abord, visualisez une feuille de teinte à partir de la gamme source pour l’angle de teinte de couleur source, et une feuille de teinte du gamut de destination pour l’angle de teinte de destination calculé lors de la rotation de la teinte. Les feuilles de teinte sont créées en prenant une « tranche » de la surface de limite de gamut JCh à un angle de teinte spécifique (voir la figure 14).

REMARQUE : Pour des raisons d’optimisation des performances, les feuilles de teinte ne sont pas réellement créées ; ils sont décrits et affichés ici uniquement à des fins de visualisation. Les opérations sont effectuées directement sur la surface de limite de gamut à la teinte spécifiée. Vous calculez ensuite les points de référence de teinte pour déterminer le mappage de cisaillement.

  • Effectuez une mise à l’échelle légère pour mapper les points noirs et blancs de la feuille source à la feuille de destination (voir la figure 15). Les points noir et blanc de la feuille de teinte source sont mappés linéairement aux points noirs et blancs de la feuille de teinte de destination, en mettant à l’échelle toutes les coordonnées J de la limite source. La valeur de couleur d’entrée mappée par teinte est mise à l’échelle de la même manière.

Diagramme montrant le mappage de légèreté.

Figure 15 : Mappage de luminosité

  • Déterminez les points de référence de teinte pour chaque feuille de teinte. Appliquez un mappage de cisaillement à la feuille source afin que les points de référence source et de destination coïncident (voir la figure 16). Le point de référence d’un gamut à une teinte spécifique est le point de référence de teinte interpolé entre les primaires adjacentes. Le point de référence de la feuille de teinte source est mappé linéairement au point de référence de la feuille de teinte de destination, à l’aide d’une opération de « shérif » qui verrouille l’axe J, en conservant les points noirs et les points blancs stationnaires. Les points noirs, les points blancs et les points de référence des feuilles de teinte source et de destination doivent coïncider.
  • Appliquez le mappage de cisaillement à la valeur de couleur d’entrée ajustée à légèreté. Les coordonnées J et C de la valeur de couleur source sont proportionnellement mises à l’échelle, par rapport à sa distance par rapport à l’axe J.
  • Ensuite, une compression de légèreté dépendante de la couleur subtile vers la valeur J du point de référence de teinte est effectuée sur le point de couleur mappé au shérif. La compression vers la référence de teinte J est effectuée de manière gamma, où blanc, noir, gris et points sur la référence de teinte J ne sont pas affectés. Tous les autres points tendent vers la référence de teinte J d’une mode lisse, légèrement en regroupement près de la référence de teinte J, avec la constante de chroma restante. La dépendance chromatique garantit que les couleurs neutres ne sont pas affectées, et l’effet est augmenté sur les couleurs avec une couleur supérieure.

Voici une description mathématique de la compression de légèreté vers la référence de teinte J ou en ajustant la valeur J du point de destination. Elle est appelée point de destination, car elle a été mappée au jeu de destination.

Tout d’abord, calculez « factorC » (facteur de dépendance chroma) pour le point de destination, qui détermine l’effet de la compression de légèreté. Les points proches ou sur l’axe J auront peu ou pas de compression ; Les points plus éloignés de l’axe J (haute-chroma) auront plus de compression appliquée. Multipliez par 0,5 pour vous assurer que factorC est inférieur à 1, car il est possible que la sourceC soit légèrement supérieure à la référenceC, mais pas deux fois plus grande.

factorC = (destinationC / referenceC) ? 0,5

où:

destinationC est la valeur C du point de destination.

referenceC est la valeur C du point de référence Hue.

Ensuite, déterminez si le point de destination J est au-dessus ou en dessous de la référence de teinte J. S’il est ci-dessus, procédez comme suit :

  1. Calculez « factorJ » pour le point de destination par rapport à la référenceJ. Cette valeur factorJ est comprise entre 0 et 1 (0 si sur la référenceJ ; 1 si au maximumJ).

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

    où:

    destinationJ est la valeur J du point de destination.

    referenceJ est la valeur J du point de référence de teinte.

    maxJ est la valeur J maximale de la gamut.

  3. Appliquez une fonction de puissance de type gamma à factorJ, ce qui réduira factorJ d’une certaine quantité. Cet exemple utilise la puissance de 2 (le carré). Soustrait le factorJ réduit du factorJ d’origine et multipliez le résultat par la plage J totale au-dessus de la référence principaleJ pour trouver le « deltaJ », qui représente le changement en J après la compression de légèreté, mais pas l’inclusion de la dépendance de chroma.

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

  5. Appliquez factorC au deltaJ (plus la couleur est élevée, plus l’effet est élevé) et calculez la nouvelle valeur J pour le point de destination.

  6. destinationJ = destinationJ - (deltaJ ? factorC)

Si J-value pour le point de destination est inférieur à référenceJ, un calcul similaire aux étapes précédentes A-C est effectué, en utilisant minJ au lieu de maxJ pour rechercher la plage en J pour calculer le factorJ et en tenant compte de la polarité des opérations « sous » la référenceJ.

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

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

destinationJ = destinationJ + (deltaJ ? factorC)

où:

minJ est la valeur J minimale de la gamut.

La chroma pour les points de couleur d’entrée est développée linéairement (si possible) le long de la légèreté constante proportionnelle à la valeur de chroma maximale des gamuts source et de destination à cette teinte et à cette légèreté. Combiné à la compression de légèreté dépendante de la couleur précédente, cela permet de préserver la saturation, car le mappage de cisaillement à l’aide des points de référence provoque parfois la sur compresse du point source dans la chroma (voir la figure 16).

Diagramme montrant le mappage de cisaillement pour correspondre aux points de référence de teinte, avant le shérif sur la gauche, après le shérif sur la droite.

Figure 16 : Mappage de shérifie, compression de légèreté vers la référence de teinte J et expansion chromatique

Voici une description mathématique du processus d’expansion chromatique ou l’ajustement de la valeur C du point de destination. Elle est appelée point de destination, car elle a été mappée et légèreté compressée dans la gamme de destination.

  1. Avant le mappage de cisaillement, déterminez sourceExtentC (l’étendue chromatique à la légèreté et à la teinte du point source).

  2. Après le mappage de cisaillement et la compression de légèreté qui transforme le point source en point de destination, déterminez le destExtentC (l’étendue chromatique à la légèreté et à la teinte du point de destination).

  3. Si la sourceExtentC est supérieure à la destExtentC, aucun ajustement chromatique au point de destination n’est nécessaire et vous pouvez ignorer l’étape suivante.

  4. Ajustez destinationC (la couleur du point de destination) pour s’adapter à l’étendue chromatique de destination à cette légèreté et à cette teinte.

  5. destinationC = destinationC ? (destExtentC / sourceExtentC)

    où:

    destinationC est la valeur C du point de destination.

    sourceExtentC est la valeur C maximale du gamut source à la légèreté et à la teinte du point source.

    destExtentC est la valeur C maximale de la plage de destination à la légèreté et à la teinte du point de destination.

Enfin, effectuez le découpage de distance mimimum. Si la couleur d’entrée pivotée, légèreté et mappée à la teinte est toujours légèrement en dehors de la plage de destination, clipez-la (déplacez-la) vers le point le plus proche de la limite de gamut de destination (voir la figure 17).

Diagramme montrant le découpage de distance minimale.

Figure 17 : Découpage de distance minimale

Description des limites gamut et algorithmes d’interpréteur de commandes Gamut

La fonction de limite de gamut d’appareil utilise le moteur de modèle d’appareil et les paramètres analytiques pour dériver une limite de gamut d’appareil de couleur, décrite comme une liste de vertex indexée de la coque de la gamme d’appareils. La coque est calculée différemment selon que vous travaillez avec des appareils additifs, tels que des moniteurs et des projecteurs, ou des dispositifs soustractifs. La liste de vertex indexée est stockée dans CIEJab. La structure de la liste de vertex indexées est optimisée pour l’accélération matérielle par DirectX.

Cette approche a de nombreuses solutions connues. Si vous recherchez « convex hull DirectX » sur le Web, vous obtenez plus de 100 coups. Par exemple, il existe une référence de 1983 sur cette rubrique spécifique (Computer Graphics Theory and Application, « Shiphulls, b-spline surfaces et cadcam », pp. 34-49) avec des références datant de 1970 à 1982 sur le sujet.

La collection de points peut être déterminée à partir d’informations disponibles en externe, comme suit :

  • Les points de l’interpréteur de commandes de référence pour les moniteurs sont générés à l’aide d’un échantillonnage du cube de couleur dans l’espace colorant de l’appareil.
  • Les points de l’interpréteur de commandes de référence pour les imprimantes et les périphériques de capture sont obtenus à partir des exemples de données utilisés pour initialiser le modèle.
  • Les points de l’interpréteur de commandes de référence pour scRVB et sRGB sont générés à l’aide d’un échantillonnage du cube de couleur pour sRGB.
  • Les points de l’interpréteur de commandes plausibles pour les appareils de capture sont générés à l’aide d’un échantillonnage du cube de couleur dans l’espace de coloration de l’appareil.
  • Les points de l’interpréteur de commandes de référence pour les projecteurs sont générés à l’aide d’un échantillonnage d’un polyhedron dans le cube de couleur dans l’espace de coloration de l’appareil.
  • Les points de l’interpréteur de commandes possibles pour les espaces de couleurs de plage dynamique large sont générés à l’aide d’un échantillonnage du cube de couleur dans l’espace lui-même.

Vous pouvez créer une liste de vertex qui décrit efficacement la gamme d’appareils de couleur, en fonction d’un profil d’appareil et des services de support système.

Pour les appareils de sortie, la limite de gamut décrit la plage de couleurs qui peuvent être affichées par l’appareil. Une limite de gamut est générée à partir des mêmes données que celles utilisées pour modéliser le comportement de l’appareil. Conceptuellement, vous extrayez un échantillonnage de la plage de couleurs que l’appareil peut produire, mesurer les couleurs, convertir les mesures en espace d’apparence, puis utiliser les résultats pour créer la limite de gamut.

Les appareils d’entrée sont plus difficiles. Chaque pixel d’une image d’entrée doit avoir une valeur. Chaque pixel doit être en mesure de représenter n’importe quelle couleur trouvée dans le monde réel d’une certaine manière. Dans ce sens, aucune couleur n’est « hors gamme » pour un appareil d’entrée, car elles peuvent toujours être représentées.

Tous les formats d’image numérique ont une plage dynamique fixe. En raison de cette limitation, il existe toujours des stimulations distinctes qui correspondent à la même valeur numérique. Par conséquent, vous ne pouvez pas établir un mappage un-à-un entre les couleurs réelles et les valeurs de caméra numérique. Au lieu de cela, la limite de gamut est formée en évaluant une plage de couleurs réelles qui peuvent produire les réponses numériques de l’appareil photo. Vous utilisez cette plage estimée comme gamut pour l’appareil d’entrée.

Les primaires sont incluses pour fournir un mappage de type gamut graphique graphique métier.

Dans le style vrai orienté objet, vous abstraitez la représentation sous-jacente de la limite de gamut. Cela vous permet de modifier la représentation à l’avenir. Pour comprendre le descripteur de limite de gamut (GBD) utilisé dans le nouveau CTE, vous devez d’abord comprendre le fonctionnement des algorithmes de mappage de gamut (GMA). Traditionnellement, les GMA ont été conçus pour répondre aux besoins de la communauté d’art graphique ; autrement dit, pour reproduire les images qui ont déjà été correctement rendues pour l’appareil sur lequel l’image d’entrée a été créée. L’objectif des GMAS d’arts graphiques est de rendre la meilleure reproduction possible de l’image d’entrée sur l’appareil de sortie. Le nouveau gbD CTE est conçu pour résoudre quatre problèmes clés.

Étant donné que l’image d’entrée est rendue pour l’appareil d’entrée, toutes les couleurs correspondent à la plage entre le point blanc et le point noir du support. Supposons que l’image soit une photographie d’une scène dans laquelle il y a un blanc diffus, tel qu’une personne dans une chemise de tee-shirt blanc, et une mise en surbrillance spéculaire, telle que la lumière reflétant une fenêtre ou un bosselot chrome. La scène est restituée sur le support d’entrée afin que la surbrillance spéculaire soit mappée au point blanc du milieu, et que le blanc diffus soit mappé à une couleur neutre plus foncée que le point blanc du milieu. Le choix de la façon de mapper les couleurs de la scène au support d’entrée est à la fois une décision dépendante de la scène et une décision esthétique. Si la mise en surbrillance spéculaire était manquante dans la scène d’origine, le blanc diffus serait probablement mappé au point blanc du milieu. Dans une scène avec beaucoup de détails en surbrillance, plus de plage serait laissé entre le blanc spéculaire et le blanc diffus. Dans une scène où la mise en surbrillance n’est pas significative, très peu de plage peut être laissée.

Pour les images pré-rendues, le mappage de gamuts est relativement simple. En fait, le point blanc du milieu d’origine est mappé au point blanc du support de reproduction, le point noir source est mappé au point noir de destination et la plupart du mappage est terminé. Les différents GMA en existence fournissent des variantes pour mapper d’autres points sur l’échelle de tonalité du milieu source et différentes façons de gérer les valeurs chromatique hors gamme. Mais le mappage de blanc à blanc et noir à noir est cohérent tout au long de ces variations. Cette implémentation exige que le blanc soit au-dessus d’un J* de 50 et noir sous un J* de 50.

Tous les encodages de couleurs ne limitent pas les plages de couleurs pour les images d’entrée. L’encodage de couleur standard IEC scRGB (IEC 61966-2-2) fournit 16 bits pour chacun des trois canaux de couleur rouge, vert et bleu (RVB). Dans ce codage, la référence noire n’est pas encodée en tant que triple RVB (0, 0, 0), mais comme (4096, 4096, 4096). Le blanc de référence est encodé comme (12288, 12288, 12288). L’encodage scRVB peut être utilisé pour représenter les surbrillances spéculaires et les détails de l’ombre. Il inclut des triples RVB qui ne sont pas physiquement possibles, car ils nécessitent des quantités négatives de lumière et des encodages qui se trouvent à l’extérieur du locus horizontal CIE. Il est clair qu’aucun appareil ne peut produire toutes les couleurs de la gamut scRGB. En fait, aucun appareil ne peut produire toutes les couleurs qu’un être humain peut voir. Par conséquent, les appareils ne peuvent pas remplir la gamut scRGB et il serait utile de représenter la partie de la gamut qu’ils remplissent. Chaque appareil a une plage de valeurs dans l’espace scRGB qu’il peut produire. Il s’agit des couleurs « attendues » pour l’appareil ; il serait surprenant que l’appareil produise des couleurs en dehors de cette gamme. Il existe une transformation définie de l’espace scRVB à l’espace d’apparence. Par conséquent, chaque appareil a également une plage de valeurs d’apparence qu’il est censé reproduire.

Dans scRVB et l’entrée des appareils de capture caractérisés par une cible fixe, il est possible d’obtenir une valeur en dehors de la plage de valeurs attendues. Si quelqu’un étalonne une caméra sur une cible de test ; puis capture une scène avec des surbrillances spéculaires, il peut y avoir des pixels plus brillants que le point blanc de la cible. La même chose peut se produire si un rouge naturel est plus chromatique que le rouge cible. Si quelqu’un prend une image scRVB à partir d’un appareil, puis modifie manuellement les couleurs de l’image, il est possible de créer des pixels qui se trouvent en dehors de la plage attendue de la gamme d’appareils, même s’ils se trouvent dans la gamut scRGB complète.

Un deuxième problème peut ne pas, d’abord, sembler être lié à cela. Il se produit lorsque vous utilisez une cible de couleur pour caractériser un appareil d’entrée, tel qu’un appareil photo ou un scanneur. Les cibles réfléchissantes sont généralement produites sur papier et contiennent un certain nombre de patchs colorés. Les manufaturers fournissent des fichiers de données avec des mesures de couleur prises sous une condition d’affichage fixe pour chaque correctif de couleur. Les outils de profilage des couleurs créent un mappage entre ces valeurs mesurées et les valeurs retournées par les capteurs de couleur dans les appareils. Le problème est que souvent ces cibles de couleur ne couvrent pas la plage complète de valeurs d’appareil. Par exemple, le scanneur ou la caméra peut retourner une valeur de (253, 253, 253) pour le point blanc de référence, et un patch rouge de référence peut avoir une valeur RVB (254, 12, 4). Celles-ci représentent la plage de valeurs attendues pour l’appareil d’entrée, en fonction des valeurs cibles. Si vous caractérisez l’appareil d’entrée en fonction des réponses à la cible, vous attendez uniquement des couleurs dans cette plage étroite. Cette plage n’est pas seulement plus petite que la plage de couleurs que les humains peuvent voir, elle est inférieure à la plage de couleurs que l’appareil peut produire.

Dans les deux cas, il est difficile d’estimer la gamme de l’appareil ou de l’image d’entrée, malgré l’existence d’une gamme de référence ou de mesures. Dans le premier problème, la gamut plausible de l’appareil d’entrée est inférieure à la gamme complète de scRVB. Dans le deuxième problème, la plage de référence de la cible est inférieure à la gamme complète possible de l’appareil d’entrée.

Le troisième problème implique le mappage de tonalité. De nombreux modèles de limites de gamut qui peuvent représenter adéquatement les images pré-rendues utilisées dans les arts graphiques ont été proposés, par exemple, la plage de montagnes Braun et Fairchild GBD (Braun[97]), et le descripteur de limite Segment De Morovic (Morovic[98]). Mais ces modèles fournissent uniquement des informations sur les extrêmes de la gamme de l’appareil ; il manque des informations sur les autres points du mappage tonal. Sans ces informations, les GMA ne peuvent faire que des estimations approximatives du mappage de tonalité optimal. Pire encore, ces modèles ne fournissent aucune aide pour la plage dynamique étendue en scRGB et dans les images de caméra numérique.

Comment ce problème est-il résolu dans les industries photographiques et vidéographiques ? La caméra capture une image. Les experts peuvent débattre de la quantité de rendu dans l’appareil de capture ; mais ils sont d’accord que ce n’est pas un montant significatif. Les deux technologies ne mappent pas un blanc diffus dans une scène capturée au point blanc du milieu. De même, ils ne mappent pas le point noir de la scène au point noir du milieu. Le comportement du film photographique est décrit dans l’espace de densité à l’aide d’une courbe caractéristique, souvent appelée courbe Hurter et Driffield, ou courbe H&D. La courbe montre la densité de la scène originale et la densité résultante sur le film. La figure 18 montre une courbe H&D classique. L’axe x représente l’augmentation de l’exposition des journaux. L’axe y représente la densité sur la diapositive. Cinq points de référence sont marqués sur la courbe : noir sans détail, qui représente la densité minimale sur le négatif ; noir avec des détails ; référencer la carte gris moyen ; blanc avec des détails ; et blanc sans détail. Notez qu’il existe un espace entre le noir sans détail (qui représente le noir de l’appareil) et le noir avec des détails (ombre noire). De même, il existe un espace entre le blanc et le blanc (blanc diffus) et blanc sans détail (qui représente le blanc de l’appareil).

Diagramme montrant la courbe H et D pour le film de diapositive.

Figure 18 : Courbe H&D pour le film de diapositive

L’industrie vidéo fournit des « salles d’entrée » et des « pieds de page » dans des images. Dans la spécification DE l’UIT 709, la luminance (appelée Y) est encodée en 8 bits, avec une plage de 0 à 255. Toutefois, le noir de référence est encodé à 15 et le blanc de référence est encodé en 235. Cela laisse la plage d’encodage comprise entre 236 et 255 pour représenter les surbrillances spéculaires.

L’industrie vidéo présente un système de boucles essentiellement fermées. Bien qu’il existe de nombreux fournisseurs d’équipements différents, les systèmes vidéo sont basés sur des appareils de référence. Il existe un encodage standard pour les images vidéo. Il n’est pas nécessaire de communiquer une limite de gamut avec des images vidéo, car toutes les images sont encodées pour la reproduction sur le même appareil de référence. Le film est également fermé, car il n’est pas nécessaire de transmettre des données intermédiaires entre différents composants. Vous souhaitez une solution qui permet aux images d’appareils avec des gamuts variables et représentant à la fois des scènes prédéfinis et non affichées sur la sortie avec des gamuts variables.

Un quatrième problème que le nouveau CTE doit résoudre est que les couleurs visuellement grises produites par un appareil, par exemple, lorsque red=green=blue sur un moniteur, ne tombent pas fréquemment sur l’axe neutre de la CAM (lorsque la chroma = 0,0). Cela provoque de grandes difficultés pour les GMA. Pour que les GMA fonctionnent bien, vous devez ajuster la description de la gamme de l’appareil et des points d’entrée afin que l’axe neutre de l’appareil tombe sur l’axe neutre de l’espace d’apparence. Vous devez ajuster les points hors de l’axe neutre d’une quantité similaire. Sinon, vous ne pouvez pas faire de gradations lisses par le biais de l’image. En sortie de la GMA, vous annulez ce mappage, par rapport à l’axe neutre de l’appareil de sortie. C’est ce qu’on appelle un droit « chiropractique » de l’axe. Comme un chiropractore, vous n’avez pas seulement droit au squelette (axe neutre), mais vous ajustez le reste du corps pour se déplacer avec le squelette. Comme un chiropractore, vous n’ajustez pas le squelette de la même quantité à travers l’espace entier. Au lieu de cela, vous ajustez différentes sections différemment.

Diagramme montrant la courbure de l’axe neutre de l’appareil par rapport à l’axe neutre CIECAM.

Figure 19 : Courbure de l’axe neutre de l’appareil par rapport à l’axe neutre CIECAM

Ce que le nouveau CTE nécessite est un modèle d’une limite de gamme qui peut être utilisée pour représenter à la fois les images sources rendues et nonenderées, fournir des informations sur l’apparence des neutres de l’appareil et fournir des informations pour le mappage des images de tonalité avec une large plage de luminosité.

Diagramme montrant les trois interpréteurs de commandes gamut.

Figure 20 : Trois interpréteurs de commandes gamut

La limite de gamut est composée de trois interpréteurs de commandes qui définissent trois régions.

Dans le nouveau CTE, l’interpréteur de commandes externe de la gamut est formé avec une coque convex faite à partir de points d’échantillon dans la gamme d’appareils. Une coque est formée en prenant un ensemble de points d’échantillon et en les entourant par une surface. Une coque convex a la propriété supplémentaire d’être convex partout. Par conséquent, ce n’est pas la plus petite coque possible qui peut être adaptée aux données. Mais l’expérimentation a montré que l’ajustement des points d’exemple trop serrés provoque des artefacts non appétissants dans des images, comme un manque d’ombrage lisse. La coque convex semble résoudre ces problèmes.

Dans l’algorithme, les valeurs d’apparence des couleurs sont obtenues pour un ensemble de points échantillonné à partir de l’appareil. Pour les moniteurs et les imprimantes, les valeurs d’apparence des couleurs sont obtenues en démettant des échantillons, puis en les mesurant. Vous pouvez également créer un modèle d’appareil, puis exécuter des données synthétiques via le modèle d’appareil pour prédire les valeurs mesurées. Les valeurs mesurées sont ensuite converties de l’espace colorimétrique (XYZ) en espace d’apparence (Jab), et la coque est enveloppée autour des points.

Le point clé de cet algorithme est que le point blanc adopté utilisé dans la conversion de colorimétrique en espace d’apparence n’a pas besoin d’être le point blanc du support. Au lieu de cela, vous pouvez sélectionner un point plus loin à l’intérieur de la gamut et sur (ou près) de l’axe neutre. Ce point aura alors une valeur J de 100. Les échantillons avec une valeur Y mesurée supérieure à la valeur blanche adoptée finissent par une valeur J supérieure à 100.

Si vous placez le point blanc diffus de la scène comme point blanc adopté pour la conversion d’espace de couleur, les surbrillances spéculaires dans la scène sont facilement détectées comme ayant une valeur J supérieure à 100.

Étant donné que le modèle de couleur CIECAM02 est basé sur le système visuel humain, une fois qu’un blanc adopté est sélectionné, le niveau de luminosité du point noir (J = 0) est déterminé automatiquement par le modèle. Si l’image d’entrée a une large plage dynamique, il est possible qu’il y ait des valeurs qui correspondent à des valeurs J inférieures à zéro.

La figure 21 suivante montre les neutres de l’appareil qui s’exécutent au centre des gamuts plausibles et de référence.

Diagramme montrant l’axe neutre de l’appareil ajouté à la limite de gamut.

Figure 21 : Axe neutre de l’appareil ajouté à la limite de gamut

Tous les mappages de gamut impliquent de découper une plage d’entrée vers une plage de sortie, ou de compresser la plage d’entrée pour s’adapter à la plage de sortie. Des algorithmes plus complexes sont formés en compressant et en découpage dans différentes directions, ou en divisant la gamme en différentes régions, puis en effectuant une capture ou une compression dans les différentes régions.

Le nouveau CTE étend ce concept pour prendre en charge les régions d’une gamut possible, une gamut plausible et une gamut de référence, et permet aux GMA de les mapper de différentes façons. En outre, les GMA ont des informations sur l’axe neutre de l’appareil. La discussion suivante explique comment gérer les situations où les gamuts plausibles et les gamuts de référence ont été réduits les uns sur les autres.

Diagramme montrant le G M A avec deux descripteurs gamut non réduits.

Figure 22 : GMA avec deux descripteurs gamut non réduits

Vous pouvez voir cet exemple si vous mappez à partir d’un appareil d’entrée, tel qu’un appareil photo ou un scanneur caractérisé par une cible réfléchissante, à l’espace scRGB. Ici, les couleurs plausibles plus claires que les blancs de référence sont des surbrillances spéculaires. Dans la pratique, la caractérisation d’une caméra avec une cible peut ne pas générer la plage complète de valeurs possibles dans la caméra ; cependant, les surbrillances spéculaires et les couleurs très chromatiques trouvées dans la nature seraient. (Les cibles transmissives ont généralement un correctif qui correspond à la densité minimale possible sur le support. Avec une telle cible, les surbrillances spéculaires seraient comprises dans la plage de la cible.) La référence noire pour une cible réfléchissante serait le début de la région noire de l’ombre. Autrement dit, il y a probablement des couleurs dans les ombres qui sont plus sombres que le noir sur la cible. Si l’image contient beaucoup de contenu intéressant dans cette région, il peut être utile de conserver cette variante tonale.

Diagramme montrant le G M A avec un gamut de destination réduit.

Figure 23 : GMA avec gamut de destination réduit

La figure 23 montre un algorithme de mappage de gamut possible lorsque le gamut de destination fournit uniquement la plage entre le blanc de l’appareil et le noir, et il n’existe pas de couleurs possibles en dehors de cette gamut. Cela est susceptible de se produire pour les périphériques de sortie classiques, tels que les imprimantes. Les couleurs possibles sont mappées au bord de la plage de destination. Mais il manque une courbe de tonalité pour l’appareil de sortie. L’GMA doit sélectionner un point neutre de luminosité inférieure à utiliser comme destination de mappage pour le blanc de référence. Un algorithme sophistiqué peut le faire en histogrammes montrant les légèretés dans l’image source et en voyant le nombre de chutes dans la plage attendue mais plus légère que le blanc de référence. Plus la légèreté est grande, plus l’espace est nécessaire dans l’appareil de destination entre les points mappés pour les surbrillances spéculaires et le blanc de référence. Un algorithme plus simple peut choisir une distance arbitraire vers le bas de l’échelle de luminosité à partir du blanc de l’appareil, par exemple 5 %. Une approche similaire s’applique au mappage du noir maximal et de l’ombre noire.

Après avoir généré la courbe de tonalité de destination, vous pouvez mapper dans une méthode similaire à celle utilisée dans la figure 23 précédente. Tous les points de la courbe de tonalité de destination tombent dans la plage d’appareils, et tous les points du mappage doivent se trouver dans la plage d’appareils.

Si vous inversez les figures de gauche et les figures de droite, et les directions des flèches de la figure 23, vous pouvez décrire le cas où l’image source n’a qu’une gamut de référence, et les trois gamuts de l’appareil de sortie n’ont pas été réduits les uns sur les autres. Par exemple, il peut s’agir d’un mappage d’un moniteur à scRVB. Là encore, la GMA doit synthétiser les points de contrôle des cinq points de la courbe de tonalité de l’image source. Certains mappages peuvent placer tous les points de la courbe de tonalité au sein de la gamme d’appareils scRGB, tandis que d’autres mappages peuvent utiliser plus de la gamut scRGB en mappant le blanc diffus au blanc de référence et en autorisant le blanc spéculaire à mapper à une valeur plus légère.

Enfin, vous avez le cas où les deux appareils ont uniquement la gamut de référence, c’est-à-dire la façon dont la plupart des algorithmes de mappage de gamut fonctionnent. Pour résoudre ce problème, vous pouvez simplement revenir aux algorithmes actuels. Sinon, si vous avez un moyen raisonnable de déterminer les cinq points de référence pour les appareils source et de destination, vous pouvez organiser la carte des points de référence.

Les gamuts d’appareil contiennent plus de cinq points de référence sur l’axe neutre. Elles représentent simplement les limites entre les régions potentielles de l’image. Entre chacun des points de référence, vous pouvez utiliser l’une des techniques de mappage de gamut existantes. Vous pouvez donc découper la plage de couleurs inattendues et compresser toutes les couleurs entre le blanc et le noir attendus, ou vous pouvez découper toutes les couleurs en dehors de la plage de référence et compresser dans cette plage. Il existe de nombreuses possibilités, qui peuvent être implémentées dans différents GMA. En outre, les GMA peuvent compresser et découper de différentes façons. Toutes ces combinaisons sont couvertes dans cette invention.

Jusqu’à présent dans cette discussion, la gamme a été traitée comme s’il s’agissait uniquement d’une fonction de l’appareil sur lequel l’image a été créée, capturée ou affichée. Toutefois, il n’existe aucune raison pour laquelle toutes les images d’un appareil doivent avoir la même gamme. Les GMA dépendent des données dans le GBD. Si le descripteur est modifié entre les images, il n’existe aucun moyen que les GMAs sachent. En particulier, si les images n’ont pas de surbrillance spéculaire, les GMA fonctionnent mieux si le descripteur gamut ne montre pas qu’il existe des couleurs plus claires que le blanc diffus.

Dans la nouvelle architecture CTE, il est possible d’utiliser plusieurs GMA. L’utilisation de plusieurs GMA est intrinsèquement mal définie. Par exemple, si un appareil de capture associe un GMA à son aspect « look and feel », il tend à le faire avec un gamut de destination « ciblé ». Il en va de même pour les appareils de sortie et les gamuts sources « ciblés ». La gamut sRGB est une gamut implicite couramment ciblée. Par conséquent, il est fortement recommandé d’utiliser une seule GMA si la prévisibilité est une priorité. Un flux de travail GMA unique doit être la valeur par défaut pour tous les flux de travail, en particulier les flux de travail grand public et prosumer. Bien que le mappage de gamut pour la reproduction préférée soit effectué une seule fois, il existe des instances où plusieurs processus de mappage sont inclus. Tout d’abord, pour la vérification linguistique, vous effectuez un mappage préféré à la gamme de l’appareil cible final, puis un rendu colorimétrique sur la gamme de l’appareil de vérification linguistique. Deuxièmement, certains types de mappage sont utilisés pour modifier les caractéristiques de l’image, mais ne sont pas inclus pour mapper à un gamut d’appareil, par exemple, ajuster la courbe de tonalité ou la chromatique. Si plusieurs GMA sont utilisés, l’interface de transformation prend un tableau de cartes de gamut liées, autrement dit, des cartes gamut qui ont été initialisées avec une paire de descriptions de limites gamut. Lorsqu’il existe plusieurs mappages de gamuts, la limite de gamut d’entrée d’une carte gamut réussie doit être identique à la limite de gamut de sortie de son prédécesseur.

La fonction de limite de gamut d’appareil prend le moteur de modèle d’appareil et les paramètres analytiques et dérive une limite de gamut d’appareil de couleur décrite comme une liste de vertex ordonnée de la coque convex de la gamut de l’appareil. La liste de vertex ordonnée est stockée dans CIEJab. La structure de la liste de vertex ordonnées est optimisée pour l’accélération matérielle par DirectX. Cette approche a de nombreuses solutions connues (recherchez « convex hull DirectX » sur le web et vous obtenez plus de 100 hits). Il existe également une référence de 1983 sur ce sujet (Computer Graphics Theory and Application, « Shiphulls, b-spline surfaces and cadcam » pp. 34-49), avec des références datant de 1970 à 1982 sur le sujet.

Deux techniques différentes peuvent être utilisées pour calculer les triangles dans l’interpréteur de commandes gamut. Pour d’autres appareils autres que les appareils RVB additifs, vous calculez une coque convex. Vous pouvez envisager d’examiner la prise en charge de coque non convex pour d’autres appareils si vous avez un accès direct à ces appareils pour valider la robustesse, les performances et la fidélité des algorithmes. Il s’agit d’un processus bien connu qui ne nécessite pas de description supplémentaire. La technique utilisée pour les appareils RVB additifs est décrite comme suit.

Différents GOD présentent des avantages et des inconvénients. La représentation de coque convexe garantit de belles propriétés géométriques, telles que des tranches de teinte convex qui fournissent un point d’intersection unique avec un rayon émanant d’un point sur l’axe neutre. L’inconvénient de la représentation de coque convexe est également convexité. Il est connu que de nombreux appareils, en particulier les appareils d’affichage, ont des gamuts qui sont loin d’être convex. Si le gamut réel s’écarte considérablement de l’hypothèse de convexité, la représentation de coque convex serait inexacte, peut-être dans la mesure où elle ne représente pas la réalité.

Après avoir adopté un GBD qui donne une représentation raisonnablement précise de la gamme réelle, d’autres problèmes surviennent, certains en raison du concept même de coupe de teinte. Il y a au moins deux situations pathologiques. Dans la figure 24 suivante, une gamme CRT donne lieu à des tranches de teintes avec des « îles ». Dans la figure 25, une gamme d’imprimantes donne lieu à une tranche de teintes avec une partie de l’axe neutre manquant. Les tranches de teinte pathologique ne sont pas causées par des limites de gamut pathologiques dans ces cas. Ils sont causés par le concept même de tranche de teinte, car (a) il est pris le long de la teinte constante, et (b) il ne prend qu’une moitié du plan qui correspond à l’angle de teinte.

Diagramme montrant une vue supérieure et latérale de la « courbure » dans les teintes bleues.

Figure 24 : Un moniteur CRT classique a une gamme qui montre une « courbure » particulière dans les teintes bleues. Si les tranches de teinte sont prises dans cette plage de teintes, les îles isolées peuvent apparaître dans les tranches de teinte.

Diagramme d’un gamut avec un « écart » dans son axe neutre.

Figure 25 : Une imprimante peut avoir une gamme qui a un « écart » dans son axe neutre. Lorsqu’une tranche de teinte est prise (qui n’est qu’une moitié du plan), il y a une « dent » sur la partie de la limite qui est l’axe neutre. Cela peut être difficile à résoudre de façon algorithmique.

Pour résoudre ces pathologies, un nouveau cadre est proposé qui abandonne le concept de tranche de teinte utilisé comme point de départ. Au lieu de cela, l’infrastructure utilise l’ensemble d'« éléments de ligne de limite » ou de lignes qui se trouvent sur la limite gamut. Ils ne fournissent pas nécessairement une visualisation géométrique cohérente comme les tranches de teintes, mais prennent en charge toutes les opérations de gamut courantes. Outre la résolution des problèmes mentionnés précédemment, cette approche suggère également que la construction de tranches de teintes, même lorsqu’il est possible, est inutile de calcul.

Triangulation de la limite Gamut

Le point de départ est un GBD constitué d’une triangulation de la limite gamut. Les méthodes connues de construction de GBD fournissent généralement cette triangulation. Pour la bétonité, une méthode de construction de GBD pour les appareils additifs est décrite ici. Ces appareils incluent des moniteurs (basés sur CRT et LCD) et des projecteurs. La géométrie simple du cube vous permet d’introduire un treillis régulier sur le cube. Les faces limites du cube peuvent être trianglées de plusieurs manières, comme celle illustrée dans la figure 26. L’architecture fournit un modèle d’appareil pour l’appareil afin que les valeurs colorimétriques des points de treillis puissent être obtenues de manière algorithmique, ou des mesures ont été effectuées directement pour ces points. L’architecture fournit également CIECAM02, afin que vous puissiez supposer que les données de départ ont déjà été mappées dans CIECAM02'espace Jab. Ensuite, chaque point de treillis sur les faces limites du cube RVB a un point correspondant dans l’espace Jab. Les connexions de points qui forment l’ensemble de triangles dans l’espace RVB induisent également un ensemble de triangles dans l’espace Jab. Cet ensemble de triangles forme une triangulation raisonnable de la limite de gamut si (a) le treillis sur le cube RVB est assez fine, et (b) la transformation de l’espace d’appareil à l’espace de couleur uniforme est topologiquement bien comportementée ; autrement dit, il mappe la limite à la limite, et il ne tourne pas la gamme à l’intérieur afin que les points intérieurs deviennent des points de limite.

Diagramme montrant une méthode simple pour triangluer la limite gamut d’un appareil avec R G B comme espace d’appareil.

Figure 26 : Méthode simple pour trianguler la limite de gamut d’un appareil avec RVB comme espace d’appareil

Éléments de ligne de limite

L’essentiel de ce framework est le concept d’éléments de ligne de limite ; un ensemble de segments de ligne qui (a) se trouvent sur la limite gamut et (b) se trouvent sur un plan. Dans ce cas, le plan est un plan de teinte. Chaque segment de ligne est le résultat de l’intersection du plan avec un triangle de limite gamut. Bien que de nombreux chercheurs aient utilisé la construction d’un plan avec des triangles de limites, ils analysent généralement la relation entre ces segments de trait et tentent de construire un objet géométrique cohérent hors des segments de trait. Différents algorithmes ont été conçus pour suivre ces segments de ligne un après l’autre jusqu’à ce qu’une tranche de teinte entière soit obtenue, et de nombreuses tentatives ont été effectuées pour accélérer le processus de recherche.

Cette approche est différente. Vous croisez le plan avec les triangles pour obtenir les segments de trait. Vous considérez ensuite ces segments de ligne comme les objets conceptuels de base . Il est nécessaire d’analyser la relation entre les segments de ligne ; vous n’avez pas à savoir comment ils sont interconnectés les uns avec les autres. Ce point de vue résout le problème de la tranche de teinte avec des îles. Les approches connues qui tentent de construire une tranche de teinte supposent que, si l’on commence par un segment de ligne et le suit au segment de ligne suivant, et ainsi de suite ; il revient finalement au point de départ, auquel point une tranche de teinte entière serait construite. Malheureusement, cette approche manquerait l’île (et dans le pire scénario, le continent). En n’insistant pas sur l’obtention d’une image géométrique cohérente ; c’est-à-dire la tranche de teinte, vous pouvez gérer le problème de l’île sans effort. Une autre différence importante dans cette approche est que, pour accélérer la construction de segments de ligne, il utilise un « filtre triangle ». Le filtre triangle lève certains triangles qui ne produisent certainement pas de segments de ligne qui seraient utiles dans l’opération de gamut actuelle. Étant donné que l’intersection d’un triangle avec le plan est coûteuse en calcul, cela améliore la vitesse. Un effet secondaire est que vous ne pouvez pas construire une tranche de teinte, car certains segments de trait sont manquants en raison du filtrage du triangle.

Opération Gamut : CheckGamut

L’exemple suivant explique comment fonctionne l’infrastructure et comment CheckGamut est effectué, c’est-à-dire l’opération de vérification si une couleur est in-gamut.

L’infrastructure générale est illustrée dans la figure 27 suivante. Il existe différents composants. Les composants étiquetés en italique sont des composants qui peuvent être différents dans l’implémentation en fonction de l’opération de gamut en question. Les autres composants sont invariants dans toutes les opérations de gamut. Pour commencer, l’entrée est un ensemble d’attributs de couleur. Dans le cas de CheckGamut, il s’agit de la couleur de requête. Dans la figure 27 et la discussion suivante, il est supposé que l’angle de teinte se trouve parmi les attributs de couleur d’entrée ou peut être obtenu à partir d’eux. Cela est clairement le cas si l’entrée est le point de couleur entier, soit dans Jab ou JCh, à partir duquel vous pouvez ensuite calculer l’angle de teinte. Notez que l’angle de teinte est nécessaire uniquement, car les plans de teinte sont utilisés. Selon l’opération de gamut en question, il peut ne pas être nécessaire d’utiliser le plan de teinte. Par exemple, dans la construction de la routine CheckGamut, vous pouvez utiliser des plans de constante J. Il s’agit d’une généralité qui ne sera pas utilisée ni abordée plus loin ; mais il peut être utile de mémoriser cette flexibilité de la méthodologie pour prendre en charge d’autres opérations de gamut lorsque le plan de teinte peut ne pas être le meilleur choix.

Diagramme montrant le flux pour prendre en charge les opérations de gamut.

Figure 27 : Infrastructure pour prendre en charge les opérations de gamut

L’angle de teinte, qui est obtenu directement à partir des entrées ou calculé à partir des entrées, est utilisé pour initialiser le plan de teinte étiqueté Plan Hue complet dans la figure. « Full » est souligné parce que c’est le plan complet, pas seulement le demi-plan contenant la teinte. Le plan complet contient à la fois l’angle de teinte d’entrée et l’angle 180 degrés opposés à celui-ci. La fonctionnalité clé du plan de teinte est la fonction Intersect, qui est expliquée dans la sous-section suivante, Plan Hue complet : Intersect. Supposons que le GBD a déjà été construit et que l’ensemble de triangles de limites Gamut est disponible. Croisez les triangles qui ont survécu au filtre triangle avec le plan de teinte à l’aide de Intersect. Le composant Triangle Filter est étiqueté en italique, ce qui signifie que le composant varie en implémentation pour différentes opérations de gamut. Le filtre triangle pour CheckGamut est expliqué dans la section, Opération Gamut : CheckGamut (continue). Le résultat de l’intersection d’un triangle avec le plan de teinte est vide ou un élément Boundary Line , autrement dit, une paire de points distincts. Si le résultat n’est pas vide, il est passé dans le processeur d’éléments de ligne , ce qui effectue à nouveau des opérations différentes en fonction de l’opération de gamut. Le processeur d’éléments de ligne met à jour la structure de données interne, les données traitées internes , dont le contenu ou la disposition dépend également de l’opération de gamut. En règle générale, les données traitées internes contiennent la « réponse » au problème, qui est continuellement mis à jour avec chaque nouvel élément de ligne de limite trouvé. Lorsque tous les éléments de ligne de limite ont été traités, la réponse a été trouvée. Il reste à y accéder via l’adaptateur de sortie. Étant donné que les données traitées internes sont spécifiques à l’opération de gamut, l’adaptateur de sortie est également spécifique à l’opération gamut.

Plan Hue complet : Intersect

La fonction Intersect calcule l’intersection du plan de teinte et d’un triangle. Aussi simple qu’il sonne, cette fonction est importante pour deux raisons.

Tout d’abord, l’intersection de chaque bord du triangle avec le plan peut générer trois points d’intersection, une situation géométriquement impossible. La raison pour laquelle cela peut se produire dans le calcul est que, lorsque des calculs sont effectués en virgule flottante, par exemple, au format IEEE, il y a des incertitudes, ou « bruit numérique », dans chaque étape qui affecte la conclusion d’un bord qui croise le plan. Lorsque le plan croise les bords dans une situation proche de l’absence, les points d’intersection sont proches les uns des autres et la détermination si un point d’intersection se trouve à l’intérieur du bord est aléatoire. Bien que le bruit dans les valeurs numériques des points soit petit, la conclusion qualitative qu’il y a plus de deux points d’intersection est géométriquement impossible et difficile à gérer correctement dans l’algorithme.

Ensuite, cette fonction se trouve dans la boucle critique pour chaque bord de chaque triangle filtré. Il est donc important d’optimiser son efficacité autant que possible.

Pour résoudre le premier problème de bruit numérique, effectuez les calculs en entiers. Pour résoudre le deuxième problème d’optimisation de son efficacité, mettant en cache l’attribut le plus utilisé de chaque vertex, ou le « produit point » associé à chaque vertex. La transmission d’entiers est un moyen typique de garantir la cohérence géométrique. L’idée de base est que si vous devez quantiser, faites-le au début. Ensuite, les calculs suivants peuvent être effectués dans des entiers, et si les entiers sont suffisamment larges afin qu’il n’y ait aucun risque de dépassement de capacité, les calculs peuvent être effectués avec une précision infinie. Fonction de quantisation suivante utile à cet effet.

ScaleAndTruncate(x) = Partie entière de x*10000

Le facteur de mise à l’échelle 10000 signifie que le nombre à virgule flottante d’entrée a quatre décimales, ce qui est suffisamment précis pour cette application. Selon la plage de valeurs de l’espace d’apparence de couleur, vous souhaitez choisir un type entier avec des bits suffisamment larges pour contenir les calculs intermédiaires. Dans la plupart des espaces d’apparence de couleur, la plage de chaque coordonnée se trouve dans la plage -1 000 à 1 000. La coordonnée quantifiée a une valeur absolue maximale de 1 000*10 000 = 10 000 = 10 000 000. Comme vous le verrez, la quantité intermédiaire est un produit par points, qui est une somme de deux produits de coordonnées, de sorte qu’il a une valeur absolue maximale de 2*(10 000 000) = 2?10 ₁₄. Le nombre de bits requis est le journal ₁₄ ) = 47,51. Un choix pratique pour le type entier est, par conséquent, des entiers 64 bits.

Pour garantir que l’intersection d’un plan avec un triangle donne toujours un ensemble vide ou un ensemble de deux points, vous devez considérer le triangle dans son ensemble, et non en tant que bords individuels du triangle séparément. Pour comprendre la situation géométrique, considérez les « distances signées » des sommets du triangle à partir du plan de teinte. Ne calculez pas directement ces distances signées ; au lieu de cela, calculez les produits de points des vecteurs de position des sommets avec le vecteur normal quantifié au plan. Plus précisément, lors de l’initialisation du plan de teinte, le vecteur normal quantifié est calculé comme suit.

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

Notez que ce vecteur est un vecteur à deux dimensions. Vous pouvez utiliser un vecteur à deux dimensions, car le plan de teinte est vertical, de sorte que le troisième composant du vecteur normal est toujours égal à zéro. De plus, une table de choix de produits par points est initialisée pour avoir une entrée pour chaque vertex à partir des triangles de limites Gamut et le produit point correspondant défini sur une valeur non valide.

Pendant une opération d’intersection du plan de teinte avec un triangle, le produit de point de chaque sommet du triangle est recherché. Si la valeur de la table de recherche est la valeur non valide, le produit point est calculé à l’aide de l’expression suivante.

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

Là encore, le composant J du sommet n’est jamais utilisé, car le vecteur normal est horizontal. Ce produit point est ensuite enregistré dans la table de recherche afin qu’il n’ait pas à être calculé à nouveau si le produit point du vertex est interrogé ultérieurement.

La mise en cache permet de déterminer rapidement si un bord croise le plan, une fois que les produits point sont tabulés dans la table de recherche, qui est générée progressivement à mesure que les sommets sont traités.

Diagramme montrant l’intersection du plan de teinte avec un triangle.

Figure 28 : Intersection du plan de teinte avec un triangle

Pour que le triangle de la figure 28 croise le plan de teinte dans un segment de trait non dégénéré, les produits de points des sommets doivent se trouver dans l’un des motifs suivants, lorsqu’ils sont triés dans l’ordre croissant.

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

Un point de terminaison du segment de ligne se produit lorsque le plan est croisé par un bord avec des sommets qui ont des signes différents dans le produit point. Si le signe est égal à zéro, le sommet se trouve à droite sur le plan, et l’intersection du bord avec le plan est le sommet lui-même. Notez également que les cas 0,0,0 ; -,-,0; 0,++ ne sont pas signalés. Le premier cas (0,0,0) signifie que le triangle entier se trouve sur le plan. Cela n’est pas signalé, car chaque bord du triangle doit appartenir à un triangle voisin qui ne se trouve pas non plus entièrement sur le plan. Le bord est signalé lorsque ce triangle est pris en compte. Les deux autres cas (-,-,0 et 0,++) correspondent à la configuration géométrique que le triangle touche le plan dans un sommet. Ces cas ne sont pas signalés parce qu’ils ne donnent pas lieu à un segment de ligne non dégénéré.

L’algorithme précédent détermine quand calculer une intersection entre un bord du triangle et le plan de teinte. Une fois qu’un bord est déterminé, l’intersection est calculée à l’aide d’équations paramétriques. Si l’un des produits de points est égal à zéro, l’intersection est le sommet lui-même, donc aucun calcul n’est nécessaire. En supposant que les deux produits de points des sommets du bord ne sont pas zéro , vertex1 est le vertex avec le produit dotProduct1 négatif  ; et vertex2 est le vertex avec dot product dotProduct2 positif . Cet ordre est important pour s’assurer que le point d’intersection calculé ne dépend pas de la façon dont l’ordre des sommets apparaît dans la représentation du bord. Le concept géométrique du bord est symétrique par rapport à ses sommets. L’aspect de calcul de l’utilisation d’équations paramétriques de l’arête introduit des asymétries (choix du sommet de départ), ce qui peut donner un point d’intersection légèrement différent en raison du bruit numérique et du conditionnement des équations linéaires à résoudre. Cela dit, le point d’intersection, l’intersection, est donnée par les éléments suivants.

t = dotProduct1/(dotProduct1 - dotProduct2)

carrefour. J = vertex1. J + t * (vertex2. J - vertex1. J)

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

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

Opération Gamut : CheckGamut (continu)

L’algorithme géométrique de base utilisé pour la vérification de la gamut consiste à compter le nombre de croisements de rayons. Pour un point de requête donné, envisagez un rayon commençant par le point de requête et pointant vers le haut (direction J). Comptez le nombre de fois où ce rayon traverse la limite de gamut. Si ce nombre est pair, le point de requête est hors gamme. Si ce nombre est impair, le point est à l’intérieur. En principe, cet algorithme peut être implémenté en 3D, il est généralement en proie à des difficultés causées par des situations dégénérées, telles que le rayon ment (en partie) sur un triangle de limite, ou la dégénérée de dimension inférieure, telle que le rayon ment (en partie) sur un bord d’un triangle de limite. Même en 2D, vous devez gérer ces situations dégénérées ; mais le problème est plus simple et a été résolu de manière satisfaisante. Voir [O’Rourke].

Pour un point d’entrée donné Jab, déterminez son angle de teinte h comme suit.

h = atan(b/a),

Initialisez le plan de teinte, puis déterminez les éléments de ligne de limite correspondant à ce plan de teinte. Étant donné que les éléments de ligne de limite ne sont pertinents que s’ils croisent le rayon vers le haut, configurez un filtre triangle pour supprimer les triangles qui donnent des éléments de trait qui ne croisent certainement pas le rayon vers le haut. Dans ce cas, considérez la zone englobante du triangle. Le rayon vers le haut ne croise pas le triangle si le point de requête est à l’extérieur de l’ombre par la zone englobante si une source de lumière était directement au-dessus. Gonflez cela légèrement avec une tolérance pré-fixe pour permettre le bruit numérique afin que vous ne jetiez pas par inadvertance des triangles susceptibles de donner des éléments de trait utiles. Le résultat est le cylindre rectangulaire semi-infini illustré dans la figure 29. Vérifier si le point de requête est à l’intérieur ou à l’extérieur de ce cylindre peut être implémenté efficacement à l’aide d’inégalités simples.

Affiche le filtre de triangle pour CheckGamut.

Figure 29 : Filtre triangle pour CheckGamut

CheckGamut a trois composants spécifiques à l’opération gamut : données traitées internes, processeur d’éléments de ligne et adaptateur de sortie. Les données traitées internes sont une liste d’éléments de ligne qui ont été traités par le processeur d’éléments de ligne. Dans ce cas, le processeur d’éléments de ligne ajoute simplement un élément de ligne à la liste. La structure des données internes pour les données traitées internes peut être une liste liée ou un tableau qui peut augmenter de taille.

L’adaptateur de sortie est un module qui accède à la liste des éléments de ligne, détermine si un élément de ligne traverse le rayon vers le haut (nombre 1) ou non (nombre 0). La somme de tous ces nombres donne un nombre total. L’adaptateur de sortie génère finalement une réponse de « oui » (in-gamut) ou « non » (hors gamut), selon que le nombre total est impair ou même. L’étape où vous déterminez si un élément de ligne traverse le rayon vers le haut mérite une certaine attention, car c’est là que le problème de dégénéré se produit et aussi le problème de surcomptabiliser survient. Après [O’Rourke], pour qu’un élément de ligne traverse le rayon, le point de terminaison droit (le point de terminaison avec une couleur plus grande) doit être strictement sur le côté droit du rayon. Cela garantit que, si un point de terminaison se trouve exactement sur le rayon, il n’est compté qu’une seule fois. La même règle résout également la situation dégénérée où l’élément de ligne se trouve exactement sur le rayon. Vous n’incrémentez pas le nombre pour cet élément de ligne.

La figure 30 montre les éléments de ligne résultants d’un exemple de gamut avec le point de requête à différentes positions.

Diagramme montrant les éléments de ligne résultants d’un exemple de gamut avec le point de requête à différentes positions.

Figure 30 : Fonctionnement de CheckGamut

Mappage gamut de différence de couleur minimale

Le mappage de la différence de couleur minimale, MinDEMap, a une spécification simple : si une couleur est in-gamut, ne faites rien. Si une couleur est hors gamut, projetez-la sur le point « le plus proche » sur la limite de gamut. Le mot clé « nearest » n’est pas bien défini tant que vous n’avez pas spécifié l’équation de différence de couleur à utiliser. Dans la pratique, pour faciliter et accélérer le calcul, la distance euclide de l’espace d’apparence de couleur choisi, ou une variante de celle-ci, est utilisée comme métrique de différence de couleur. L’avantage de la métrique Euclidean est qu’elle est compatible avec le produit point de l’espace, ce qui permet d’utiliser l’algèbre linéaire. En détail, si un « produit point » est défini dans l’espace, une distance peut être définie comme la racine carrée du produit point du vecteur de différence avec lui-même. Un produit point peut généralement être défini par une matrice 3x3 positive A.

u ?v = u T Av

où le côté droit est la multiplication de matrice habituelle. Si A est la matrice d’identité, le produit point standard est récupéré. Dans la pratique, si Jab est l’espace de couleur, vous ne souhaitez pas mélanger les composants, de sorte qu’une matrice diagonale autre que la matrice d’identité peut être utilisée. En outre, vous souhaiterez peut-être conserver l’échelle sur un et b inchangé afin que la mesure de la teinte soit conservée. Ainsi, une variante utile du produit de points euclidean standard est la suivante.

w J (composant J de vous)(composant J de v) + (composant de vous)(composant de v) + (composant b de vous)(composant b de vous)(composant b de v)

où w J est un nombre positif. Une autre variante consiste à laisser w J varier avec le point de requête d’entrée :

w J\ = w J (queryPoint)

Le résultat final est une mesure de distance asymétrique par rapport aux deux points, et avec des poids relatifs différents sur la légèreté et la couleur ou la teinte, car le point de requête d’entrée varie. Ceci est conforme à certaines observations sur la perception de couleur humaine que les différences de couleur ne sont pas pondérées de façon égale dans toutes les dimensions. On a constaté que les gens sont moins sensibles aux différences de légèreté qu’ils sont à des différences de teinte et de chroma.

La fonction de poids suivante est utile.

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

où k ...), = 1, k ₁ = 0,75/(C mₐₓ ) n, C mₐₓ = 100, n = 2 et C est le plus petit de la chromaie du point de requête et C mₐₓ.

de sorte qu’un poids de 0,25 est mis sur le terme J lorsque la chroma est égale à zéro, et un poids de 1 lorsque la chroma est de 100. La tendance de mettre moins de poids sur J lorsque la chroma est petite, et plus de poids sur J lorsque la chroma est grande suit l’utilisation recommandée pour CMC et CIEDE2000.

Graphique montrant la fonction de pondération sur le composant J de la métrique.

Figure 31 : Fonction de poids sur le composant J de la métrique

Utilisez l’espace Jab pour l’exemple suivant. Il est extrêmement exigeant de rechercher dans tous les triangles de limites pour déterminer le point le plus proche dans la métrique euclide. Voici une approche simple pour rendre ce processus aussi efficace que possible, sans introduire d’hypothèses supplémentaires qui peuvent accélérer le processus, mais aussi se retrouver dans une réponse approximative. Tout d’abord, il est nécessaire de comprendre la procédure géométrique de projeter un point sur le triangle donné. Une description est donnée ici.

Une projection orthogonale sur le plan infini contenant le triangle est effectuée en premier. La distance la plus courte du point de requête à partir du plan peut être déterminée en deux étapes.

(a) Calculer le vecteur normal de l’unité au triangle.

(b) Calculer le produit de point du vecteur normal de l’unité et un vecteur formé à partir du point de requête et d’un point sur le triangle ; c’est-à-dire l’un de ses sommets. Étant donné que le vecteur normal a une longueur d’unité, la valeur absolue de ce produit point est la distance du point de requête du plan.

Le point projeté peut ne pas être la réponse, car il peut se trouver en dehors du triangle. Par conséquent, vous devez d’abord effectuer une vérification. Le calcul équivaut à calculer les coordonnées barycentriques du point projeté par rapport au triangle. Si le point projeté est déterminé à l’intérieur du triangle, il s’agit de la réponse. Si ce n’est pas le cas, le point le plus proche est acquis sur l’un des bords du triangle. Effectuez une recherche sur chacun des trois bords. La détermination de la projection du point de requête sur un bord est un processus similaire à la projection sur le triangle, mais une dimension moins. Une projection orthogonale est d’abord calculée. Si le point projeté se trouve sur le bord, il s’agit de la réponse. Si ce n’est pas le cas, le point le plus proche est acquis sur l’un des deux points de terminaison. Effectuer une recherche sur les deux points de terminaison ; c’est-à-dire calculer la distance du point de requête de chacun d’eux et comparer celle-ci est plus petite.

Un examen minutieux révèle qu’il y a beaucoup de recherches répétées lorsque vous parcourez tous les triangles, car un bord est toujours partagé par deux triangles, et un sommet partagé par au moins trois bords. En outre, vous n’êtes pas beaucoup intéressé à trouver le point le plus proche d’un triangle particulier ; Au lieu de cela, vous êtes intéressé à trouver le point le plus proche de la limite de gamut entière. Toutefois, un triangle particulier serait celui dans lequel cela est obtenu. Il existe deux stratégies que vous pouvez utiliser pour accélérer la recherche.

Stratégie I. Chaque vertex sera traité, au plus, une fois. Chaque arête sera traitée, au plus, une fois.

Stratégie II. À tout moment dans la recherche, vous avez un meilleur candidat avec la meilleure distance correspondante. Si vous pouvez déterminer, par une vérification rapide, qu’un triangle n’est pas capable de donner une meilleure distance, il n’est pas nécessaire de poursuivre le calcul plus loin. Vous n’avez pas besoin du point le plus proche et de la distance pour ce triangle.

Diagramme montrant le flux du mappage DE minimum.

Figure 32 : Schémas de mappage DE minimum

La figure 32 montre le flux général de logique pour la carte minDEMap gamut. Pour un point de requête, la fonction CheckGamut est appelée pour la première fois. Si le point est in-gamut, la carte est une no-op. Si le point est hors gamut, appelez ProjectPointToBoundary. Passez à la figure 33. À ce stade, il est supposé que les valeurs suivantes ont été calculées.

(a) Vecteur normal d’unité pour chaque triangle de limite Gamut par rapport au produit point standard.

(b) Liste de vertex et liste de bords, en plus de la liste de triangles.

Diagramme montrant la routine « ProjectPointToBoundary ».

Figure 33 : Routine ProjectPointToBoundary

Toutes ces opérations sont des surcharges constantes et auraient diminué le coût si des requêtes suffisantes pour cette limite de gamut sont effectuées. En règle générale, c’est le cas lorsque vous générez un LUT de transformation d’un appareil vers un autre, où il n’y a que deux gamuts fixes, et que le LUT de transformation s’exécute à travers des points sur la grille échantillonné uniformément. Vous pré-calculez les vecteurs normaux par rapport au produit de points standard, même si la notion de perpendiculaire sera basée sur le produit à points pondérés, qui dépend du point de requête comme expliqué précédemment. La raison est qu’un vecteur normal par rapport au produit à points pondérés peut être obtenu facilement à partir du vecteur normal par rapport au produit à points standard. Si n ₀ est un vecteur normal par rapport au produit point standard, puis

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

est normal pour le triangle par rapport au produit à points pondérés. En raison de cette relation, il est toujours utile de précaliser n ₀ même s’il doit être ajusté en fonction du point de requête.

La routine ProjectPointToBoundary commence par réinitialiser l'« historique traité » des sommets et des arêtes. Il s’agit de tables d’indicateurs BOOLEAN qui suivent si un sommet ou un bord a été visité précédemment. Il réinitialise également la variable ShortestDistance à « INFINITY », qui est la valeur encodée maximale dans le système de nombre à virgule flottante utilisé. Ensuite, il s’exécute via une boucle, recherchant le point le plus proche de chaque triangle à l’aide de l’appel ProcessTriangle. ProcessTriangle est la routine pour mettre à jour la variable ShortestDistance et se trouve clairement dans la boucle critique. Une optimisation consiste à s’arrêter lorsque le résultat est suffisant. Après chaque appel à ProcessTriangle, la variable ShortestDistance est examinée. S’il satisfait à un seuil prédéfini, vous pouvez arrêter. Le seuil prédéfini dépend de l’espace de couleur utilisé et de la précision requise du système d’imagerie des couleurs. Pour une application classique, vous ne souhaitez pas faire de travail inutile si la différence de couleur est inférieure à ce qui peut être discerné par la vision humaine. Pour CIECAM02, cette différence de couleur est 1. Utilisez toutefois une valeur de seuil de 0,005 dans l’implémentation pour conserver la précision des calculs, car il peut s’agir uniquement d’une étape intermédiaire dans une chaîne de transformations.

ProcessTriangle implémente la stratégie II précédente. Obtention d’un vecteur normal du vecteur normal de l’unité précalcalée vers le triangle par rapport au produit de points standard, il calcule la distance du point de requête vers le plan infini contenant le triangle en formant le produit de point de la vecteur normal d’unité et le vecteur queryVector, le vecteur de l’un des sommets du triangle, vertex1, au point de requête, queryPoint.

queryVector = queryPoint - vertex1

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

Il s’agit d’un calcul relativement peu coûteux, et la distance est nécessaire pour effectuer d’autres calculs. Si cette distance n’est pas inférieure à la meilleure distance actuelle, ShortestDistance, ce triangle ne produit pas une meilleure distance, car il ne donne pas une meilleure distance que le plan contenant celui-ci. Dans ce cas, vous revenez au contrôle dans la boucle triangle. Si la distance est inférieure à ShortestDistance, potentiellement, vous avez un point plus proche, si ce point se trouve à l’intérieur du triangle. Vous devez effectuer des calculs « durs » (bien que rien au-delà de l’algèbre linéaire) pour déterminer cela. Si les deux autres sommets du triangle sont vertex2 et vertex3, formez d’abord les vecteurs de baseBasisVector et secondBasisVector.

firstBasisVector = vertex2 - vertex1

secondBasisVector = vertex3 - vertex1

Utilisez le système linéaire suivant d’équations pour résoudre les inconnus que vous et v avez.

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

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

et les conditions du point projeté à se trouver à l’intérieur du triangle sont les suivantes :

0 ≤ u ≤ 1, 0 ≤ v ≤ 1 et vous + v ≤ 1

Après ce calcul, s’il est déterminé que le point projeté se trouve dans le triangle, vous avez trouvé un nouveau point le plus proche ; la distance que vous avez calculée au début est la nouvelle distance la plus courte. Dans ce cas, mettez à jour les variables ShortestDistance et ClosestPoint. Si le point projeté se trouve en dehors du triangle, vous pouvez trouver un point plus proche sur l’un de ses bords. Vous pouvez donc appeler la routine ProcessEdge sur chacun des trois bords.

Diagramme montrant le flux des routines ProcessEdge et ProcessVertex.

Figure 34 : Routines ProcessEdge et ProcessVertex

La routine ProcessEdge implémente la stratégie I, illustrée dans la figure 34. ProcessEdge commence par vérifier si le bord a été traité avant. Si c’est le cas, aucune autre action n’est prise. Si ce n’est pas le cas, il procède au calcul de la projection orthogonale du point de requête sur la ligne infinie contenant le bord. L’algèbre linéaire impliquée dans le calcul est similaire aux équations de triangle précédentes. Toutefois, le calcul est plus simple, il n’est pas décrit ici. Si le point projeté se trouve à l’intérieur du bord, vous trouvez la distance du point projeté à partir du point de requête. Si cette distance est inférieure à ShortestDistance, vous avez trouvé un nouveau point le plus proche. Mettez à jour ShortestDistance et ClosestPoint. Si le point projeté se trouve en dehors du bord, appelez ProcessVertex sur les deux points de terminaison. Avant de retourner le contrôle, mettez à jour l’historique des arêtes afin que ce bord soit marqué comme « TRAITÉ ».

Enfin, vous donnez une description de ProcessVertex. La routine ProjectVertex implémente également la stratégie I et gère une table d’historique de vertex. Comme illustré dans la figure 34, il vérifie d’abord si le sommet a été traité avant. Si c’est le cas, aucune autre action n’est prise. Si ce n’est pas le cas, il calcule la distance du sommet à partir du point de requête. Si la distance est inférieure à ShortestDistance, mettez à jour ShortestDistance et ClosestPoint. À la fin, il met à jour l’historique des vertex afin que ce vertex soit marqué comme « TRAITÉ ».

Lorsque la boucle de contrôle externe a épuisé tous les triangles ou quitté avant que le seuil de différence de couleur soit atteint, la variable ClosestPoint est accessible. Il s’agit du résultat de MinDEMap. L’appelant peut également récupérer ShortestDistance si elle s’intéresse à la distance de la couleur mappée à partir de la couleur de requête.

Lissage de teinte

Diagramme montrant deux vues supérieures de lissage de teinte, l’original en haut et la teinte lissée en bas.

Figure 35 : Lissage de teinte

Un problème se produit avec les opérations qui sont limitées à la teinte ; autrement dit, l’opération considère uniquement les variables dans un plan de teinte. La figure 35 montre un exemple de gamme présentant des tranches de teintes « discontinues » dans les teintes bleues. Dans cette plage de teintes, pour certains angles de teinte, la limite gamut est tangentielle au plan de teinte. En effet, cela provoque un changement dans la structure topologique des tranches de teinte. Dans l’exemple illustré, comme le plan de teinte balaye sur cette plage de teintes, une « île » émerge et submerge. Cette modification de la topologie entraîne l’interruption des opérations spécifiques de teinte. Par exemple, le cusp à teinte fixe change brusquement à mesure que l’angle de teinte change dans cette plage.

Il existe une raison pour laquelle il est souhaitable de conserver la teinte dans certaines opérations. Pour résoudre le problème précédent, les triangles de limites Gamut d’origine doivent être « lisses ». En règle générale, un lissage de teinte d’un ensemble de triangles de limite Gamut est un ensemble de triangles de sorte que (a) il forme la limite d’un nouveau « gamut », qui peut ne pas correspondre à la gamut réelle de l’appareil et qui contient la gamut définie par l’ensemble original de triangles ; et (b) les triangles dans le nouveau jeu sont limités loin d’être parallèles aux plans de teinte.

Une façon pratique d’obtenir un ensemble lisse de triangles teinte est de prendre la coque convex des sommets originaux. Comme illustré dans la figure 35, les tranches de teinte de la coque convex varient en douceur dans la plage de teintes problématiques sans changement soudain dans la topologie.

Définition de primaries et de secondaires dans la description de la limite gamut

Certaines méthodes de mappage de gamut, telles que HueMap, dépendent de l’emplacement des primaries et des secondaires de l’appareil. Pour les appareils additifs, les primaires sont rouges, vertes et bleues (R, G et B) ; et les secondaires sont cyan, magenta et jaune (C, M et Y). Pour les appareils soustractifs, les primaires sont C, M et Y ; et les secondaires sont R, G et B. Le GBD effectue le suivi des six de ces valeurs, ainsi que du blanc et du noir (W et K), dans un tableau de valeurs de couleur Jab. Ces valeurs sont définies dans la description de la limite de gamut lors de sa création. Pour les appareils de sortie, les principaux peuvent être déterminés en exécutant des combinaisons de valeurs de contrôle d’appareil via le modèle d’appareil. Pour les appareils de capture, cette approche n’est pas bien adaptée à la création du GOD de référence, car il est presque impossible de capturer une image qui génère une valeur d’appareil pur entièrement saturée, par exemple (0,0, 0,0, 1,0). Les profils d’appareil WCS contiennent les index des primaires dans la cible de capture. Étant donné que ces valeurs ne sont pas contenues dans un profil ICC, utilisez des valeurs mesurées à partir d’une cible de scanneur classique après la conversion en Jab, par rapport aux conditions d’affichage de la CPI.

Définition de l’axe neutre dans la description de la limite gamut

Les méthodes de mappage de gamut HueMap et Relative MinCD utilisent l’axe neutre de l’appareil pour le lissage. Pour les périphériques de sortie de référence, l’axe neutre peut être déterminé en exécutant des valeurs neutres d’appareil (R=G=B ou C=M=Y) via la méthode DeviceToColorimetric, puis via la méthode ColorimetricToAppearance de l’objet CIECAM02. Toutefois, les appareils de capture ne retournent pas toujours une valeur neutre de l’appareil lorsqu’ils sont présentés avec un échantillon neutre. Cela est particulièrement vrai lorsque l’éclairage ambiant n’est pas parfaitement neutre. Les profils d’appareil WCS contiennent les index des échantillons neutres dans la cible. Utilisez ces exemples pour définir l’axe neutre. Étant donné que ces informations ne sont pas disponibles pour les profils ICC, vous devez utiliser la même méthode que celle utilisée pour les appareils de sortie ; exécutez des exemples neutres d’appareil via la méthode DeviceToColorimetric, puis couplez les valeurs d’entrée et les résultats colorimétriques.

concepts de gestion des couleurs de base

schémas et algorithmes de système de couleurs Windows