⚠️ Ceci est un site de traduction non officiel, sans lien avec ImageMagick Studio LLC. Pour des informations officielles, consultez la page originale (https://usage.imagemagick.org/color_basics/index.html).

Exemples ImageMagick -- Bases de la couleur et canaux

Préface et index des exemples ImageMagick
Qu'est-ce que la couleur

Les images matricielles (raster), avec lesquelles ImageMagick travaille (en général), consistent essentiellement en un tableau de points individuels ou pixels de couleur. Modifier les points individuels et la façon dont ils sont représentés est ce que nous allons examiner dans cette section. Dans la section suivante, nous examinerons une modification globale plus générale des couleurs d'une image dans son ensemble.


Qu'est-ce que la couleur ?

Pour vraiment comprendre la couleur, vous devez savoir exactement ce qu'est la couleur. Dans le monde physique, la couleur est en réalité une illusion. Nous voyons la couleur parce que nos yeux perçoivent le monde physique d'une manière très particulière et limitée. Fondamentalement, dans nos yeux, nous avons des capteurs spéciaux pour le rouge, le vert, le bleu, et un capteur mineur et moindre pour la vision périphérique et les conditions de faible luminosité. Ce dernier explique pourquoi nous ne voyons que des couleurs grises la nuit. IM Diagram Pour plus d'informations, voir Wikipedia, Cellules en cône, le graphe à droite qui représente la réponse d'un œil humain typique aux différentes longueurs d'onde de la lumière. À cause de cela, nous ne percevons le monde qu'en termes de longueurs d'onde électromagnétiques rouge, vert et bleu, et c'est pourquoi les images et le traitement d'images concernent généralement le rouge, le vert et le bleu, ou RGB. Cependant, ce n'est pas tout à fait aussi simple. Chacun de nos capteurs de couleur répond en réalité à une gamme de longueurs d'onde. Par exemple, lorsque nous voyons une lumière jaune, nous percevons en fait cette lumière à l'aide des capteurs rouge et vert à la fois. Si nos capteurs de couleur étaient strictement des détecteurs de rouge et de vert purs, nous ne verrions aucune couleur jaune du tout. Les arcs-en-ciel présenteraient en fait des « trous ». Cela signifie qu'une télévision ou un écran d'ordinateur nous trompe en réalité pour nous faire voir du jaune, le moniteur émettant exactement le bon mélange de lumière rouge et verte, plutôt qu'une véritable lumière jaune. Nos capteurs de couleur perçoivent la même intensité que pour une lumière jaune pure, et par conséquent nous voyons du jaune, même si en réalité nous voyons deux fréquences de couleur différentes. Nous ne pouvons tout simplement pas faire la différence entre un jaune pur et un mélange de lumière rouge et verte. De manière similaire, les couleurs bleu-rouge (pourpre) n'existent pas réellement en tant que longueur d'onde unique et spécifique, mais seulement comme un mélange d'au moins deux fréquences de couleur, bien qu'à strictement parler le violet soit une fréquence spécifique à laquelle nous réagissons, principalement par le bleu et très légèrement par les deux autres capteurs. Notez que nous avons en réalité un quatrième capteur de vision, mais il ne sert pas à la couleur ; c'est un détecteur de faible luminosité, utilisé pour la vision nocturne, lorsque les capteurs en cône ne fonctionnent plus très bien. C'est pourquoi la nuit paraît monochromatique, et le clair de lune n'est que gris. Ce capteur est probablement aussi la raison pour laquelle l'espace colorimétrique sRGB (voir plus bas) comporte une composante linéaire particulière pour les couleurs très sombres. APARTÉ : D'autres animaux ont des capteurs différents des nôtres. Les abeilles et la plupart des autres insectes ont des capteurs pour l'ultraviolet ; ainsi, pour eux, nos images imprimées, nos téléviseurs et nos panneaux d'affichage n'auraient probablement guère de sens. Plus que probablement, ces images artificielles ressembleraient davantage à une image en fausses couleurs plutôt horrible qu'aux couleurs presque parfaites que nous, humains, sommes trompés à voir. Certains animaux ont 4 capteurs de couleur, tandis que d'autres n'en ont qu'un (noir et blanc) ou deux. De plus, certains animaux perçoivent le mouvement bien mieux que n'importe quelle couleur spécifique. Un taureau, par exemple, ne peut pas voir le rouge, mais voit les longueurs d'onde bleu-violet et verte ; en revanche, une cape qui s'agite apparaîtrait comme un éclat de couleur de « mouvement ». Pour un taureau, le cycle de rafraîchissement à 50/60 Hz d'un moniteur ressemblerait probablement à un éclat de « mouvement » plutôt qu'à une image cohérente ! Pour plus d'informations, voir Wikipedia, Vision des couleurs et Wikipedia, Couleur.

Espace colorimétrique RGB et canaux

Ainsi, l'espace colorimétrique RGB est en réalité une façon de représenter les images à l'aide de trois valeurs, rouge, vert et bleu, qui nous trompent en nous faisant croire que nous voyons quelque chose dans le monde réel. Les images peuvent donc être stockées sous forme de 3 tableaux de valeurs, chacune des trois valeurs formant un pixel unique, ou point de couleur, à afficher. Chacun des trois tableaux de valeurs est appelé un canal, qui est simplement une image en niveaux de gris représentant la quantité de lumière à créer pour un seul de nos capteurs de couleur. Par exemple, voici les composantes rouge, verte et bleue d'une image de rose. [IM Output]
Rose | | [IM Output]
Rouge | [IM Output]
Vert | [IM Output]
Bleu
---|---|---|---|---
Remarquez à quel point l'image « Rouge » est beaucoup plus claire pour afficher une rose que les deux autres composantes de couleur. Mais les trois images sont claires pour la zone blanche près du bas. RGB sont des couleurs additives Or, le rouge, le vert et le bleu sont appelés couleurs « additives ». C'est-à-dire que les couleurs sont additionnées pour former l'image couleur finale. C'est parce que ce sont les couleurs dominantes que nos yeux perçoivent, et en les combinant, nous pouvons effectivement générer presque toutes les couleurs que nos yeux peuvent voir. Elles sont additives en ce sens qu'en partant du noir, comme un moniteur éteint, vous ajouteriez ensuite de la lumière rouge, verte et bleue pour générer les couleurs appropriées de l'image que nous voyons. La clé de cela est que vous partez du noir, ou de l'absence de lumière, puis vous ajoutez des quantités appropriées de rouge, vert et bleu. Vous pouvez aussi obtenir le même effet en faisant briller trois torches avec du cellophane rouge, vert et bleu collé sur les extrémités, dans une pièce sombre. Lorsque les trois couleurs brillent au même endroit, disons sur un mur blanc, nous voyons du blanc. C'est à cause de la manière dont nos yeux perçoivent réellement ces couleurs « primaires » que les images couleur sont généralement exprimées en termes de valeurs RGB, également appelées « canaux de couleur ».

Espace colorimétrique CMY

Lorsque vous imprimez, vous avez un problème différent. Une feuille de papier ne peut pas générer de lumière, seulement la réfléchir. Vous devez donc partir d'une surface qui réfléchit toute la lumière qui la frappe, dans toutes les directions. C'est-à-dire ce qu'est une surface blanche. Espérons que la lumière qu'elle réfléchit est elle-même une lumière blanche pure, provenant soit du soleil qui brille à la fenêtre, soit générée par les éclairages de nos pièces artificiellement éclairées. Maintenant, pour créer une image sur ce papier, vous devez appliquer de l'encre sur cette surface, ce qui supprime en réalité des longueurs d'onde particulières de la lumière. Comme nous « percevons » les couleurs rouge, vert et bleu, ce sont les couleurs que nous voulons supprimer de manière sélective de la lumière réfléchie par cette feuille de papier blanc. Par conséquent, nous utilisons une encre cyan pour supprimer la lumière rouge, magenta pour supprimer la lumière verte, et jaune pour supprimer la lumière bleue. La quantité d'encre cyan, magenta et jaune nécessaire pour générer une couleur spécifique produit ce qu'on appelle l'espace colorimétrique CMY. Ici, je génère les masques d'encre nécessaires pour générer une image de rose en utilisant uniquement les encres cyan, magenta et jaune (en supposant que les encres soient « linéaires ») [IM Output]
Rose | | [IM Output]
Cyan | [IM Output]
Magenta | [IM Output]
Jaune
---|---|---|---|---
C'est-à-dire que plus les valeurs du masque cyan sont claires, plus il faudra d'encre cyan pour supprimer davantage de rouge. En d'autres termes, un masque cyan est l'exact négatif de la quantité de lumière rouge que nous voulons que le papier réfléchisse. En fait, les trois images de canaux ci-dessus sont l'exact négatif de ce qui a été généré pour l'espace colorimétrique RGB. Donc, pour passer d'une image RGB à une image CMY, tout ce que vous avez à faire est de Négativer l'image puis de déclarer que l'image est dans l'espace colorimétrique CMY. Comme nous supprimons sélectivement des longueurs d'onde, le cyan, le magenta et le jaune sont appelés « couleurs soustractives ».

Espace colorimétrique CMYK

Le problème majeur de la suppression sélective des longueurs d'onde est que le simple fait de supprimer toute la lumière rouge, verte et bleue, en appliquant les trois encres cyan, magenta et jaune, ne supprime pas réellement toute la lumière réfléchie. En conséquence, vous n'obtiendrez pas une couleur noire, mais une horrible couleur brun boueux. Les encres (ou filtres de lumière) ne sont pas parfaites, tout comme nos propres yeux ne sont pas parfaits. Comme je l'ai mentionné précédemment, chacun de nos capteurs de couleur ne perçoit pas une seule longueur d'onde de lumière, mais une gamme de longueurs d'onde que nous interprétons comme étant « rouge », « vert » ou « bleu » (ou un mélange de ces couleurs). À tel point que notre capteur de lumière « bleue » peut en réalité voir (bien que pas très bien) un peu d'ultraviolet. APARTÉ : le filtre d'une « lumière noire » est délibérément imparfait, afin que nous puissions « tout juste voir » la lumière d'une telle lampe, pour savoir si elle est allumée ou non. C'est à cause de cette « fuite » de couleur des encres CMY, et de nos propres yeux imparfaits, que nous ajoutons aussi une encre noire pure au mélange, lui permettant d'être utilisée pour effacer TOUTE lumière qui pourrait être réfléchie par le papier. Pour éviter de la confondre avec le bleu, l'encre ou le canal noir reçoit la lettre K. Ainsi, pour l'impression, nous utilisons quatre encres colorées : Cyan, Magenta, Jaune et noir (blacK) ; et nous définissons les images à l'aide de ces encres, pour former un espace colorimétrique CMYK. Par exemple, voici les composantes CMYK appropriées séparées de cette image. [IM Output]
Rose | | [IM Output]
Cyan | [IM Output]
Magenta | [IM Output]
Jaune | [IM Output]
noir (blacK)
---|---|---|---|---|---
Remarquez comment la quantité de cyan, magenta et jaune a été réduite et est maintenant plus sombre que dans l'espace colorimétrique CMY, car leur utilisation a été remplacée par une quantité appropriée de noir. C'est-à-dire que lorsque les trois encres sont présentes pour un pixel particulier, le noir est utilisé à la place. Ainsi, pour imprimer disons du noir pur, vous n'utilisez que de l'encre noire pure, et aucune autre encre. Rappelez-vous que le « noir » (blacK) ci-dessus représente la quantité d'encre noire à appliquer sur une feuille de papier, donc plus l'image de canal en niveaux de gris est claire, plus il faut utiliser d'encre noire. Il s'agit donc également d'une image d'aspect négatif, tout comme les trois autres images. Bien sûr, ajouter un noir pur dans une imprimante couleur rend l'impression de texte noir beaucoup plus simple, car vous n'avez plus besoin d'imprimer trois encres différentes, superposées parfaitement au même endroit, pour générer des lignes, lettres et formes en noir pur. Cela signifie beaucoup moins d'encre, le papier devenant moins « humide » et moins susceptible de couler ou de baver, ce qui est particulièrement bon pour les imprimantes. Pour une autre discussion similaire sur le fonctionnement des couleurs RGB et CMYK, voir la page d'introduction de XaraXone Workbook, Defining Color.

Autres espaces colorimétriques

Les autres espaces colorimétriques ne sont que d'autres façons de représenter ces mêmes couleurs, ou certaines des autres au-delà du strict RGB que nos yeux imparfaits peuvent aussi distinguer. Cependant, de tels espaces colorimétriques ont peu d'incidence sur l'affichage de ces couleurs à l'aide d'un moniteur, ou sur l'impression. Ils représentent essentiellement d'autres façons de manipuler et/ou de traiter les couleurs d'une image, afin de rehausser ou de mettre en évidence des choses spécifiques telles que...

  • Un meilleur traitement non linéaire des couleurs sombres (sRGB)
  • Arcs-en-ciel et teintes de couleur (espaces colorimétriques HSB, HSL, HSI, OTHA - intensité non préservée)
  • Définition standardisée des couleurs (XYZ)
  • Différences de couleur précises ou perceptuelles (espaces colorimétriques LAB et LUV, et leurs équivalents cycliques de teinte LCHab et LCHuv)
  • Gammes dynamiques étendues à grande plage (pour une utilisation avec les images HDRI) (scRGB)
  • Une meilleure compression des valeurs de couleur (comme dans YIQ et YUV)
  • Transmission pour les téléviseurs (YCbCr, YPbPr, où Y = signal noir et blanc)

Un dernier espace colorimétrique que je n'ai pas encore mentionné est le « GrayScale » (niveaux de gris), mais ce n'est qu'un simple tableau unique de valeurs de pixels. La façon dont vous interprétez ces valeurs est variable, car elles pourraient représenter de nombreuses choses différentes. Typiquement, une telle image est considérée comme étant en niveaux de gris linéaires et similaire au RGB linéaire (par opposition au sRGB non linéaire). IM version 6 n'a en réalité pas un tel espace colorimétrique en niveaux de gris, et ne fait que le simuler avec l'espace colorimétrique RGB linéaire, en réglant tous les paramètres RGB à la même valeur. Si les trois valeurs ne sont pas identiques, l'image n'est plus en niveaux de gris. Le GrayScale d'IM version 7 est une image à canal unique (utilisation mémoire bien plus réduite). | _Les modifications ci-dessus de l'« espace colorimétrique » d'une image ne sont qu'un arrangement grossier des couleurs d'une image dans la mémoire. Elles fournissent aussi des conversions de couleur très basiques (simplistes) entre différents espaces colorimétriques.

Pour des spécifications et des conversions de couleur exactes, il convient d'utiliser plutôt les Profils de couleur, mais cela ne fonctionne qu'avec les formats de fichiers image capables de gérer les profils de couleur.

_
---|---


Correction gamma et espace colorimétrique sRGB

Perception humaine de la couleur

Ci-dessus, nous avons vu que vous pouvez représenter les images de nombreuses façons différentes. Tous les espaces colorimétriques que nous avons examinés ci-dessus sont appelés espaces colorimétriques « linéaires », ce qui signifie que la valeur réellement utilisée représente les valeurs d'« intensité » réelles de la couleur dans une image. Cependant, la vie réelle n'est jamais aussi simple. Elle ne l'est jamais ! Par exemple, générons et sauvegardons une image avec une simple séquence linéaire de valeurs de gris... |

  magick -size 100x100 gradient:'gray(100%)-gray(0)' \
          -set colorspace sRGB gradient.gif

[IM Output]
Notes...

  • L'utilisation de "gradient:'gray(100%)-gray(0)'" garantit qu'IM génère un dégradé de données RGB linéaires, qui seront dans l'espace colorimétrique RGB linéaire.
  • Le "-set colorspace sRGB" indique à IM que ce dégradé « linéaire » est en réalité en « sRGB » et n'a donc pas besoin de « correction » lors de la sauvegarde dans un format de fichier image GIF qui ne peut stocker que des valeurs en espace colorimétrique sRGB.

Or, les valeurs de couleur réelles utilisées dans cette image forment un dégradé linéaire qui devrait passer en douceur du blanc en haut au noir en bas, avec un gris à 50 % mathématiquement parfait au milieu. Cependant, si vous regardez l'image, vous verrez qu'elle semble en réalité contenir beaucoup plus de couleurs sombres (proches du noir) que de couleurs claires (proches du blanc). Pourquoi ? Eh bien, la vision humaine, lorsqu'on lui présente une intensité lumineuse qui ne représente que la moitié de sa plage maximale (« blanc »), ne voit pas le gris moyen pur que la valeur de couleur indique, mais une couleur bien plus sombre. Par conséquent, le dégradé linéaire ci-dessus ne ressemble pas à une répartition uniforme et linéaire des couleurs du blanc au noir, mais comporte bien plus de couleurs sombres qu'il ne le devrait. La relation entre la valeur réelle de l'image et la valeur perçue est approximativement une « fonction puissance » de la forme...

**_gris_perçu_ = _valeur_ 2.2**

La valeur « 2.2 » est la valeur moyenne de la fonction gamma, typique de la plupart des êtres humains.

Correction gamma

La correction gamma est une façon d'ajuster les valeurs de couleur réellement sauvegardées, afin que l'image finale paraisse beaucoup plus uniforme dans sa répartition des couleurs. Fondamentalement, alors que la vision humaine fait paraître la lumière plus sombre à l'aide d'un facteur de puissance de 2.2, pour qu'une image linéaire « paraisse » linéaire, nous devons inverser cette fonction puissance, en utilisant une valeur de 1/2.2. C'est-à-dire que, pour qu'une image paraisse linéaire, nous devons la corriger à l'aide de la formule suivante...

**_valeur_corrigée_gamma_ = _valeur_ 1/2.2**

IM fournit la correction gamma soit via l'Opérateur Level, argument Gamma, soit plus spécifiquement à l'aide de l'Opérateur Gamma. Cependant, vous pourriez aussi modifier directement les valeurs de l'image à l'aide de la fonction POW d'Evaluate.

Alors appliquons-la et voyons le résultat d'une « image corrigée en gamma ».. |

  magick -size 100x100 gradient:'gray(100%)-gray(0)' -gamma 2.2 \
          -set colorspace sRGB gradient_gamma.gif

[IM Output]
Remarquez comme l'image comporte maintenant des quantités bien plus égales de couleurs claires et sombres. Cependant, les valeurs réelles au sein de l'image ne sont plus « linéaires », ce qui peut poser des problèmes lors du traitement ultérieur de cette image. La correction gamma n'est qu'une méthode « rapide » et approximative pour ajuster les couleurs afin de faire « paraître » une image correcte. Ce n'est pas la méthode habituelle, ni même la meilleure méthode pour corriger une image en fonction de la réponse humaine. Pour des exemples plus spécifiques de correction gamma dans le traitement d'images, voir Redimensionnement avec correction gamma Pour plus d'informations sur la correction gamma, voir

Vous pourriez aussi vouloir examiner l'opérateur "[-auto-gamma](https://imagemagick.org/command-line-options/#auto-gamma)", qui tente d'ajuster le gamma pour produire une image RGB linéaire, avec des quantités égales de clair et de sombre (dans l'espace linéaire).

Le gamma de votre moniteur

Reculez de quelques mètres de votre moniteur et regardez l'image à gauche. Si votre moniteur (et votre navigateur web) affiche correctement l'image sRGB, le point où le motif de « hachures » central a une luminosité à peu près égale au dégradé sRGB environnant devrait se situer tout au milieu. La plupart des moniteurs d'ordinateur échouent à ce test ! Cependant, les téléviseurs HDMI devraient s'en sortir parfaitement. L'image a été créée à l'aide de... |

  magick -size 45x256 gradient: -size 10x256 pattern:gray50 \
          -duplicate 1,0 +append -set colorspace sRGB -colorspace RGB \
          monitor_sRGB.png

[IM Output]
Voici quelques images similaires avec différents niveaux de « gamma » afin que vous puissiez voir à quel point votre moniteur est proche d'un affichage gamma « 2.2 » correct pour la perception humaine.

  for gamma in 1.6 1.8 2.0 2.2 2.4
  do
    magick -size 45x256 gradient: -size 10x256 pattern:gray50 \
            -duplicate 1,0 +append -gamma $gamma monitor_g$gamma.png
  done

[IM Output]
Gamma 1.6 | [IM Output]
Gamma 1.8 | [IM Output]
Gamma 2.0 | [IM Output]
Gamma 2.2 | [IM Output]
Gamma 2.4
---|---|---|---|---

L'image (quand vous reculez) où le point de luminosité égale se situe environ à la marque des 50 % vous indique le niveau de gamma approximatif de votre moniteur. S'il est correctement réglé, votre moniteur devrait avoir un niveau de gamma de 2.2, ce qui correspond de très près à celui de l'espace colorimétrique sRGB. Lorsque j'ai écrit ceci, mon ancien écran (fourni par le travail) était extrêmement mauvais. Il avait un réglage de gamma d'environ 1.8, et avait en réalité un gamma différent en haut de l'écran (plus sombre) qu'en bas (plus clair). Cela m'a causé des problèmes lors de la comparaison d'images à différents endroits de l'écran, car la même image paraît différente lorsqu'elle est placée à différentes positions verticales ! En revanche, mon ordinateur portable personnel (à cette époque) avait un affichage très uniforme, avec un réglage de gamma raisonnable de 2.0 selon ce qui précède.

Correction de l'espace colorimétrique sRGB

Sauvegarder une image dans un espace colorimétrique sRGB est très similaire à corriger le gamma d'une image, mais c'est un peu plus compliqué afin de mieux reproduire la réponse réelle de l'œil humain, en particulier avec les nuances de couleur très sombres. Alors sauvegardons notre dégradé linéaire dans un espace colorimétrique corrigé sRGB. |

  magick -size 100x100 gradient:'gray(100%)-gray(0)' \
          -set colorspace RGB -colorspace sRGB    gradient_sRGB.gif

[IM Output]
| À partir d'IM v6.7.7, ce qui précède est simplifié en simplement |

  magick -size 100x100 gradient:white-black gradient_sRGB.gif

_C'est parce que le dégradé linéaire sera toujours généré dans un espace colorimétrique linéaire (RGB) (ce qui est la seule façon sensée pour l'opérateur de fonctionner).

Cependant, comme les couleurs sRGB « white-black » sont demandées, le dégradé de données linéaires sera automatiquement converti en espace colorimétrique sRGB, produisant des valeurs de données non linéaires, et un dégradé perceptuellement linéaire.


| _Avant la version IM 6.7.5, ce qui précède aurait échoué car IM avait inversé les significations des espaces colorimétriques « sRGB » et « RGB ». Ainsi, sur les anciennes versions d'IM, les deux noms d'espace colorimétrique devaient être permutés. Par exemple...
|

  magick -size 100x100 gradient: -set colorspace sRGB \
          -colorspace RGB gradient_sRGB.gif

_Cette bizarrerie de gestion de l'espace colorimétrique a longtemps été considérée comme un bug d'IMv7 ; bien qu'elle était censée n'être corrigée que dans IMv7, elle a été rétroportée vers IMv7.


Notez que ce qui précède (ou tout autre dégradé) n'est pas parfait, car la perfection est tout simplement impossible : chacun voit les choses à sa manière, avec de légères différences. En clair : _ce que vous voyez n'est jamais exactement ce que les autres voient
(c'est en fait très zen). Le sRGB n'est qu'une très bonne approximation pour la majorité des gens, selon de nombreuses enquêtes, et beaucoup d'experts en impression/peinture/couleur. Pour les détails de la formule sRGB exacte, voir Wikipedia, Espace colorimétrique sRGB. Une réponse de luminance humaine plus complète et précise a été développée, et peut être consultée en ligne dans la thèse Human Vision, Just Noticeable Difference. Cela inclut la réponse adaptative dans des situations de changements majeurs d'éclairage. Le World Wide Web a standardisé l'utilisation du sRGB comme espace colorimétrique recommandé (et toujours raisonnablement simple) par défaut, et il devrait donc être utilisé pour toutes les images qui ne contiennent aucune information de profil d'espace colorimétrique. C'est-à-dire pour les images telles que GIF, PNG, JPEG et TIFF. Tous ces formats (sauf GIF) permettent l'utilisation de Profils de couleur pour spécifier de manière définitive l'espace colorimétrique de l'image. Cependant, les formats de fichiers image tels que PbmPlus ne sont généralement pas considérés comme étant dans l'espace colorimétrique sRGB. Ainsi, lorsque vous travaillez avec de tels formats de fichiers, il est généralement judicieux d'utiliser "-set colorspace ..." pour vous assurer que l'espace colorimétrique est bien celui que vous attendez. Et voici les trois images ensemble afin que vous puissiez les comparer. [IM Output]
Linéaire | [IM Output]
Gamma | [IM Output]
sRGB
---|---|---
Comme vous pouvez le voir, les images corrigées en Gamma et en sRGB sont presque identiques, et la différence, lorsqu'elle est représentée graphiquement, est en réalité extrêmement mineure. Ainsi, bien que l'utilisation du sRGB soit la méthode la plus correcte, l'utilisation de la Correction gamma est probablement plus facile à appliquer. Les plus grandes différences entre une image sRGB et une image Gamma se trouvent dans les images extrêmement sombres. Pour une valeur de gris 8 bits de 1, le sRGB est 60 fois plus clair que l'équivalent Gamma. Une valeur de 8 est 5 fois plus claire. Cela ne fera aucune différence notable dans la plupart des cas, mais cela peut en faire une lorsqu'une image très sombre est manipulée.

Traitement d'images réelles

La plupart des opérateurs de traitement d'images ne se soucient pas de l'espace colorimétrique utilisé par une image ; ils appliquent simplement leurs opérations aux données de canal indépendamment de leur espace colorimétrique. Bien que certains doivent faire un effort particulier pour gérer les données de canal supplémentaires pour le « noir » (Black), et, comme vous le verrez plus loin, l'« alpha » (transparence « alpha »). Cependant, l'espace colorimétrique d'une image peut grandement influencer le résultat final de nombreuses opérations. Ainsi, effectuer le traitement d'images dans un espace colorimétrique différent peut générer des résultats améliorés. Cet exemple montre plus clairement pourquoi traiter en sRGB n'est pas une bonne idée. Extrait d'une discussion sur les Flous de couleur et les « couleurs cassées », sur le forum des utilisateurs d'IM. Nous prenons deux couleurs utilisant différents canaux de couleur et les floutons ensemble de sorte qu'au sein du canal la couleur se floute vers zéro (une valeur de couleur basse). Faisons d'abord cela en utilisant le canal d'entrée sRGB par défaut. |

  magick -size 40x80 xc:red xc:lime +append \
          -blur 0x20 blur_sRGB.png

[IM Output]
Si vous regardez les résultats, on dirait que les couleurs se floutent du rouge vers le noir puis vers le vert. C'est parce que les valeurs, à nos yeux, paraissent plus sombres qu'elles ne le devraient dans l'espace colorimétrique sRGB. Ici, je floute à nouveau la même image, mais en utilisant un espace colorimétrique RGB linéaire. |

  magick -size 40x80 xc:red xc:lime +append \
          -colorspace RGB -blur 0x20 -colorspace sRGB blur_RGB.png

[IM Output]
Comme vous pouvez le voir, cette fois nous obtenons un résultat bien plus sensé, avec les couleurs rouge et verte se floutant à travers l'orange. Vous obtenez aussi des résultats similaires en utilisant d'autres espaces colorimétriques linéaires tels que LAB ou LUV, que nous examinerons plus en détail ci-dessous. Fondamentalement, lors du traitement d'images qui impliquent le mélange de couleurs, par exemple dans des opérations telles que la Quantification des couleurs (réduction des couleurs), mais aussi dans le Redimensionnement d'images et plus généralement la Distorsion d'images, vous devriez traiter les images dans un espace colorimétrique linéaire pour des résultats plus précis, bien qu'en réalité peu de gens le fassent. | _Helmut Dersch (célèbre pour la distorsion en barillet et la correction d'objectif) recommande d'envisager d'utiliser l'espace colorimétrique linéaire « LAB » pour le traitement des images, en particulier pour le redimensionnement et les distorsions d'images.

Je recommande seulement de passer de l'espace colorimétrique « d'entrée » sRGB à un autre espace colorimétrique « linéaire » lorsque vous effectuez du dessin, des compositions, des redimensionnements ou des distorsions d'images. Que ce soit le RGB linéaire, le LAB ou le LUV ne devrait pas avoir tant d'importance.

_
---|---
Voici par exemple des flous rouge-bleu dans les 3 principaux espaces colorimétriques linéaires. J'ai choisi ces couleurs car elles semblent montrer la plus grande différence dans les couleurs intermédiaires générées.

  for colorspace in RGB LUV LAB
  do
    magick -size 80x40 xc:red xc:blue -append \
            -colorspace $colorspace -blur 0x30 -colorspace sRGB \
            colorspace_$colorspace.png
  done

[IM Output]
RGB | [IM Output]
LUV | [IM Output]
LAB
---|---|---

Pour plus d'exemples de traitement d'images en tenant compte de l'espace colorimétrique, voir Redimensionnement avec correction d'espace colorimétrique. Voir aussi les avertissements sur les noms de couleurs et le dessin dans un espace colorimétrique linéaire, dans Dessin avec correction gamma et d'espace colorimétrique


Spécification des couleurs

Les couleurs dans IM peuvent être spécifiées de nombreuses façons. Le meilleur guide à ce sujet se trouve sur le site officiel d'IM Color Names.

Couleurs par nom

De nombreuses couleurs ont reçu des noms spécifiques, ce qui les rend plus faciles à utiliser. Par exemple, "RoyalBlue" est une très belle couleur bleu lumineux légèrement décalé. [IM Output] À droite se trouve une image contenant tous les noms de couleurs, y compris ceux avec des numéros, disponibles dans ImageMagick. Les couleurs ont d'abord été triées en 3 groupes, Blancs cassés, Tons moyens et Couleurs sombres, puis tracées dans trois roues chromatiques HSL distinctes, chacune avec un décalage vertical différent. Le blanc et le noir purs apparaissent comme leurs propres points distincts tout en haut et tout en bas du graphique, pour former les extrêmes de la plage verticale. Le script qui l'a généré est "[hsl_named_colors](../static/img/scripts/hsl_named_colors)" et suit une technique examinée dans Positionnement programmé d'images en couches. | _Techniquement, comme je dessine les couleurs HSL sous la forme tridimensionnelle d'un « bi-cône » plutôt que d'un « cylindre », le rayon de chaque point de couleur a été défini comme égal au « Chroma » de la couleur (« Saturation »/« Luminosité »), plutôt que simplement sa « Saturation ». Voir Wikipedia : HSL et HSV.

Pour être encore plus exact, des pyramides hexagonales auraient également dû être utilisées au lieu de cônes, bien que ce soit beaucoup plus difficile à calculer, pour peu de gain.

_
---|---
Comme vous pouvez le voir, il y a beaucoup de noms de couleurs associés aux teintes du rouge au jaune et un groupe plus petit dans les teintes du cyan au vert. Avec un groupe similaire dans les jaunes et cyans cassés. Mais il y a peu de couleurs vert cassé nommées. Essentiellement, certaines zones de l'espace colorimétrique HSL ont très peu de couleurs nommées. Il peut être difficile de trouver un nom de couleur spécifique à utiliser. Mais en chargeant l'image à droite dans le programme "[display](basics.html#display)" d'IM, vous pouvez utiliser le bouton central de la souris pour consulter le nom de couleur ImageMagick de la couleur spécifique qui a été tracée.

Noms de couleurs spéciaux

Il existe quelques couleurs spéciales, utilisées à des fins particulières au sein d'ImageMagick. 'None' ou 'Transparent' est une couleur noire entièrement transparente, généralement utilisée pour spécifier la transparence d'arrière-plan, comme lors de la création d'un Canevas de couleur unie, ou lors de l'utilisation des Couches d'image. 'Opaque' n'est qu'un alias de 'Black', et est donc rarement utilisé. Il est généralement utilisé uniquement lorsque l'on veut désigner N'IMPORTE QUELLE couleur opaque, comme lors du traitement du canal alpha.

Conflits de noms de couleurs

Les noms de couleurs peuvent provenir de trois sources différentes, SVG, X11 et XPM, et la plupart des noms produisent la même couleur quelle que soit la source de définition. Mais il existe quelques noms de couleurs qui produisent des couleurs différentes, selon la spécification de couleur utilisée. Le plus gros problème est la couleur SVG 'Green' (vert à demi-luminosité) qui est différente de la couleur X11/XPM 'Green' (vert RGB pur). Si vous voulez un vert pur, vous feriez mieux d'utiliser le nom de couleur SVG 'Lime' qui n'a aucun conflit. Wikipedia a un excellent article sur les conflits de noms de couleurs, ainsi qu'un bon tableau des noms de couleurs réels, dans X11 color names. Vous pourriez aussi vouloir consulter l'article Web Colors, qui fournit un ensemble de tableaux joliment ordonnés de certaines gammes de couleurs. Les conflits les plus notables concernent quatre couleurs spécifiques. Voici un tableau des conflits de noms de couleurs connus. Rappelez-vous que la couleur SVG est celle qu'IM utilisera par défaut. Conflit
Nom de couleur | Résultat SVG
(défaut IM) | Résultat X11
pour le nom | Nom équivalent
X11 | Nom de couleur
alternatif
---|---|---|---|---
Green | | #008000 | | #00FF00 | | | Lime
Maroon | | #800000 | | #B03060 | | FireBrick |
Purple | | #FF00FF | | #A020F0 | | Magenta |
Gray | | #7E7E7E | | #BEBEBE | | | Grey
Notes à propos de ce qui précède...

  • Le 'Grey' X11 est une couleur gris moyen visuelle. Il est aussi très proche (mais pas exactement identique) de la couleur X11 'Gray74' et de la couleur SVG 'Silver' ('gray(192)').
  • Le 'Gray' par défaut (SVG) est très proche d'un gris mathématiquement parfait, mieux spécifié à l'aide des noms de couleurs 'Gray50' ou 'gray(128)' (pour une utilisation 8 bits).
  • Comme toutes les couleurs nommées sont spécifiées à l'aide de valeurs 8 bits (0-255), aucune d'entre elles ne générera une couleur grise 16 bits parfaite et pure !
  • Lorsqu'un gris est nécessaire pour un traitement mathématique tel que FFT DC Phase Détection de bords, Images ombragées, Effets d'éclairage de composition, et Cartes de déplacement relatif, vous feriez bien mieux d'utiliser la formule de couleur 'gray(50%)' qui génère un gris moyen mathématiquement parfait à n'importe quelle profondeur de bits de couleur.

La prudence est recommandée lors de la sélection d'une couleur pour un usage spécifique.

Couleurs et espace colorimétrique

Bien que de nombreuses couleurs aient des noms, la plupart des couleurs présentes dans les images n'en ont pas ; ce sont juste un ensemble de valeurs, généralement 3, qui spécifient une couleur précise. Cependant, trois valeurs à elles seules ne définissent pas complètement une couleur ; vous devez aussi spécifier l'« espace colorimétrique » ou le « système de couleur » auquel ces valeurs appartiennent. Toutes les couleurs « nommées » ci-dessus sont dans l'espace colorimétrique sRGB, qui est l'espace colorimétrique dans lequel elles ont été définies. Mais parfois, vous voulez définir une couleur dans un espace colorimétrique différent. Par exemple, en HSL, ou en CYMK, ou même comme une couleur XYZ. ImageMagick peut le faire et vous pouvez voir les détails de ces spécifications dans ImageMagick Color Names. À venir : Exemples d'utilisation d'autres espaces colorimétriques (encore en développement) | _Bien que RGB dans ImageMagick représente un espace colorimétrique RGB linéaire, il est de pratique admise qu'un nom de couleur de la forme 'rgb(valeur,valeur,valeur)' définit en réalité une couleur sRGB.

Pour définir réellement une couleur RGB linéaire au lieu d'une couleur sRGB, utilisez la formule de couleur 'icc-color(RGB,valeur,valeur,valeur)' (voir ci-après).
---|---
À partir d'IM v6.7.8-3, vous pouvez utiliser la fonction 'icc-color(colorspace,color...)' pour définir une couleur, ou redéfinir l'espace colorimétrique d'une couleur spécifique. _À venir : Exemples d'utilisation

Couleurs semi-transparentes

Vous pouvez spécifier directement des couleurs semi-transparentes de seulement deux façons différentes. La méthode la plus courante pour définir une couleur semi-transparente est d'utiliser une valeur hexadécimale. Par exemple, voici quelques spécifications de couleur montrant divers niveaux de transparence de couleur. J'ai affiché les images de couleur générées sur un motif d'arrière-plan afin que vous puissiez voir ce motif à travers la transparence de l'image.

  magick -size 50x50    xc:'#00FF00FF'   color_hex_1.png
  magick -size 50x50    xc:'#00FF00C0'   color_hex_2.png
  magick -size 50x50    xc:'#00FF0090'   color_hex_3.png
  magick -size 50x50    xc:'#00FF0060'   color_hex_4.png
  magick -size 50x50    xc:'#00FF0030'   color_hex_5.png
  magick -size 50x50    xc:'#00FF0000'   color_hex_6.png

[IM Output] [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]

| Avant IM v6.3.0, le dernier ensemble de chiffres hexadécimaux contenait la transparence de la couleur sous la forme d'une valeur de « cache » (matte) ou d'« opacité ». C'est-à-dire que l'hexadécimal final '00' représentait « opaque » et 'FF' était transparent.

Cependant, après IM v6.3.0, cette valeur a été inversée afin de représenter une valeur de transparence « alpha », pour mettre IM en conformité avec les standards SVG et les autres logiciels graphiques. En d'autres termes, 'FF' représente maintenant entièrement opaque et '00' est entièrement transparent.
---|---
Vous pouvez aussi spécifier des couleurs à l'aide de la fonction de couleur spéciale 'rgba()'. Où les valeurs RGB vont de 0 à 255, et le canal alpha est spécifié comme une fraction décimale entre 0.0 (transparent) et 1.0 (opaque).

  magick -size 50x50   xc:'rgba(255,0,0, 1.0)'   color_rgba_1.png
  magick -size 50x50   xc:'rgba(255,0,0, 0.8)'   color_rgba_2.png
  magick -size 50x50   xc:'rgba(255,0,0, 0.6)'   color_rgba_3.png
  magick -size 50x50   xc:'rgba(255,0,0, 0.4)'   color_rgba_4.png
  magick -size 50x50   xc:'rgba(255,0,0, 0.2)'   color_rgba_5.png
  magick -size 50x50   xc:'rgba(255,0,0, 0.0)'   color_rgba_6.png

[IM Output] [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]

| Avant la version IM 6.2.7, le 'rgba()' utilisait aussi une valeur de cache (matte) pour la valeur du canal alpha. C'est-à-dire une valeur de 0 pour entièrement opaque et 255 pour entièrement transparent. Cela a été modifié conformément à la « recommandation W3C CSS3 Color Module pour la spécification des couleurs », dans le cadre de la mise en conformité d'IM avec les autres standards d'images, en particulier pour une utilisation WWW et SVG.
---|---
Il est actuellement impossible de spécifier directement une couleur semi-transparente par son nom, avec un réglage de valeur alpha supplémentaire. Cependant, vous pouvez le contourner en générant cette couleur nommée, puis en modifiant la transparence de l'image. Vous avez aussi la complication supplémentaire de devoir Définir le canal alpha avant de pouvoir réellement définir la transparence de la couleur.

  magick -size 50x50   xc:RoyalBlue                   color_name_1.png
  magick -size 50x50   xc:RoyalBlue -alpha set \
                        -channel A -evaluate set 80%   color_name_2.png
  magick -size 50x50   xc:RoyalBlue -alpha set \
                        -channel A -evaluate set 60%   color_name_3.png
  magick -size 50x50   xc:RoyalBlue -alpha set \
                        -channel A -evaluate set 40%   color_name_4.png
  magick -size 50x50   xc:RoyalBlue -alpha set \
                        -channel A -evaluate set 20%   color_name_5.png
  magick -size 50x50   xc:RoyalBlue -alpha set \
                        -channel A -evaluate set  0    color_name_6.png

[IM Output] [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]

Oui, c'est pénible, et ce serait bien si la transparence pouvait être définie dans le cadre de la spécification du nom de couleur. Si vous souhaitez voir cela, faites-en la demande sur le Forum des développeurs d'IM. Il est aussi possible de dessiner une couleur de remplissage nommée à l'aide des Paramètres de dessin MVG, bien que vous ayez besoin d'un canevas de départ transparent pour que cela fonctionne correctement. Par exemple... |

  magick -size 50x50 xc:none \
          -draw "fill Tomato fill-opacity 0.5 rectangle 0,0 49,49" \
          color_name_draw.png

| [IM Output]

| Notez qu'une couleur entièrement transparente, bien que complètement invisible, possède quand même une couleur. Cependant, la plupart des opérateurs IM reconnaissent que toute couleur entièrement transparente est identique à n'importe quelle autre couleur entièrement transparente. À cause de cela et de la manière dont fonctionnent les mathématiques internes, de nombreux opérateurs remplaceront souvent une couleur entièrement transparente par du noir entièrement transparent (également connu sous le nom de la couleur spéciale 'none').
---|---


Canaux de couleur

Les données de couleur réelles d'une image sont stockées sous forme de tableaux de valeurs, appelés canaux. Typiquement, une image aura au moins 3 canaux, représentant les valeurs de couleur rouge, verte et bleue. Mais comme vous l'avez vu ci-dessus, les valeurs stockées pourraient représenter d'autres espaces colorimétriques.

Espace colorimétrique et nommage des canaux

L'objectif principal de l'opérateur "[-colorspace](https://imagemagick.org/command-line-options/#colorspace)" est de changer la façon dont IM stocke les couleurs d'une image en mémoire. Normalement, chaque image possède 3 (ou 4) canaux de données image. L'« espace colorimétrique » actuel d'une image détermine ce que représentent les données de chaque canal. Or, normalement, les canaux sont nommés « Rouge », « Vert », « Bleu », car c'est généralement le type de données image stockées dans ces canaux. Mais ce n'est pas toujours le cas. Ne pensez pas au canal « R » ou « Rouge » comme étant rouge ; pensez-y comme au « canal 1 », qui pourrait contenir des données pour le « rouge », la « teinte », le « cyan » ou d'autres choses selon l'espace colorimétrique de l'image. « Rouge » n'est qu'une étiquette pour le canal généralement utilisé pour le « rouge », ou le premier canal. Le deuxième espace colorimétrique le plus couramment utilisé est 'CMYK', qui définit la quantité d'« encre » de couleur à appliquer pour assombrir une feuille de papier « blanche » (un espace colorimétrique soustractif). Notez que K est l'abréviation de « noir » (blacK), qui correspond aux valeurs d'intensité négativées de l'image. Comme cela est très courant, les canaux « RGB » ont aussi un nommage alternatif de « Cyan », « Magenta » et « Jaune », ou simplement les lettres « C », « M » et « Y », bien qu'en réalité ils se réfèrent au même ensemble de canaux que celui utilisé pour les images 'RGB'. Un quatrième canal de couleur spécial est aussi ajouté pour le canal de couleur « Black » ou « K ». Cela signifie essentiellement que le canal de couleur pour "Green" se réfère exactement au même canal de couleur que celui qui serait utilisé pour "Magenta". Que les données elles-mêmes soient « vertes » ou « magenta » dépend NON PAS du nom du canal, mais de l'« espace colorimétrique » de l'image en mémoire. La même chose se produit pour les autres espaces colorimétriques. Par exemple, utiliser un espace colorimétrique 'LAB' signifie que le canal « Rouge » contient la valeur « Luminosité » (Lightness), tandis que le canal « Vert » contient la valeur « A » (ou rouge-vert), et le canal « Bleu » contient la valeur « B » (ou bleu-jaune).
De manière similaire, les noms de canaux 'Alpha' ('A'), 'Opacity' ('O') et 'Matte' sont tous des alias du paramètre "[-channel](https://imagemagick.org/command-line-options/#channel)" faisant référence à l'information de transparence de l'image. Peu importe qu'un canal « alpha » soit l'inverse d'un canal « matte », il se réfère quand même au même canal et produit le même résultat, le Canal Matte interne de l'image. Que l'opérateur traite les données du canal alpha interne comme un « alpha » ou comme une valeur dépend de l'opérateur. Les opérateurs de canal de bas niveau comme "[-threshold](https://imagemagick.org/command-line-options/#threshold)" travaillent sur les données « matte » brutes du canal en mémoire. Cependant, la plupart des opérateurs de plus haut niveau comme "[-fx](https://imagemagick.org/command-line-options/#fx)" et "[-composite](https://imagemagick.org/command-line-options/#composite)" traitent ces données comme représentant des données « alpha », à des fins d'opération. Il existe encore une autre méthode de contrôle de l'espace colorimétrique des données image stockées. Le "[-set](https://imagemagick.org/command-line-options/#set) colorspace" (ajouté en IM v6.4.3-7) modifiera uniquement le réglage « espace colorimétrique » en mémoire. C'est-à-dire qu'il peut transformer une image RGB en une image HSL mais sans changer ni modifier les données de pixels réelles que l'image utilise. L'usage le plus typique de cela est lorsque vous combinez manuellement des Données de canaux pour définir l'espace colorimétrique final de l'image combinée.
Alors voyons comment nous pouvons manipuler les canaux de couleur. Rappelez-vous que chaque canal n'est qu'un tableau de valeurs. Tous les canaux se combineraient ensuite pour représenter la couleur réelle de chaque pixel au sein de l'image.

Séparation des images de canaux

La façon la plus simple de séparer les canaux de couleur individuels est d'utiliser l'opérateur "[-separate](https://imagemagick.org/command-line-options/#separate)" pour extraire le contenu actuel de chaque canal sous forme d'image en niveaux de gris.

  magick rose: -channel R -separate separate_red.gif
  magick rose: -channel G -separate separate_green.gif
  magick rose: -channel B -separate separate_blue.gif

[IM Output] [IM Output] [IM Output] [IM Output]

Remarquez comme la rose rouge est proéminente dans l'image du canal rouge, alors qu'elle est assez sombre dans les canaux bleu et vert. En revanche, les feuilles vertes sont proéminentes dans le canal vert mais pas dans les autres. Le blanc près du bas de l'image est clair dans tous les canaux. Dans IM v5 et avant, "-channel" n'était pas seulement un paramètre pour les opérations d'image ultérieures, mais aussi à l'occasion un « opérateur d'image » qui convertissait le canal spécifié en une image en niveaux de gris. Très déroutant ! Dans IM v6, le "-separate" a été créé pour « séparer » ces deux tâches très différentes. L'option "-channel" n'est qu'un paramètre utilisé par les opérations d'image ultérieures, tandis que "-separate" extraira les canaux spécifiés en images séparées, en niveaux de gris et entièrement opaques.
À partir d'IM v6.2.9-3, l'opérateur "-separate" vous permet de séparer plusieurs canaux de couleur selon le paramètre "-channel". Le nombre d'éléments dans le paramètre "-channel" déterminera le nombre d'images créées (dans l'ordre RGBA). Par exemple, comme le paramètre "-channel" par défaut est 'RGB', l'action par défaut est de créer trois images, que je produis ci-dessous.
  magick rose: -separate separate_RGB_%d.gif

[IM Output] [IM Output] [IM Output] [IM Output]

Et ici, nous utilisons l'opérateur "-colorspace" pour transformer la façon dont IM stocke les données de couleur de l'image en une représentation de couleur CMYK. Ensuite, nous extrayons les quatre canaux de couleur concernés.

  magick rose: -colorspace CMYK -separate separate_CMYK_%d.gif

[IM Output] [IM Output] [IM Output] [IM Output] [IM Output]

La dernière image (le canal 'Black' ou 'K') est particulièrement intéressante, car elle apparaît comme une image en niveaux de gris négativée de l'image d'origine. En réalité, elle représente la quantité d'« encre » qu'une imprimante CMYK devrait déposer sur le papier, réduisant la quantité de couleur nécessaire dans les autres canaux de couleur. Notez que par défaut, le paramètre "-channel" n'inclut pas le Canal de transparence Matte spécial de l'image. Si vous voulez toujours générer tous les canaux présents, vous pouvez utiliser un paramètre de canal "-channel ALL", ou utiliser le paramètre "-channel" 'RGBA' ou 'CMYKA'.

Canaux en niveaux de gris à partir des représentations d'espaces colorimétriques

Vous pouvez extraire des valeurs de canal spécifiques à partir des espaces colorimétriques à des fins particulières. Par exemple, ici nous extrayons la luminosité ou intensité en niveaux de gris de l'image de la rose, en utilisant un certain nombre de représentations différentes.

  magick rose: -colorspace Gray                      channel_gray.gif
  magick rose: -grayscale Rec709Luma                 channel_luma709.gif
  magick rose: -grayscale Rec601Luma                 channel_luma601.gif
  magick rose: -colorspace HSI  -channel B -separate channel_average.gif
  magick rose: -colorspace HSL  -channel B -separate channel_lightness.gif
  magick rose: -colorspace HSB  -channel B -separate channel_brilliance.gif
  magick rose: -colorspace CMYK -channel K -negate -separate channel_black.gif
  magick rose: -colorspace LAB  -channel R -separate channel_lab_light.gif

[IM Output]
Gray
Gray | [IM Output]
Rec709Luma
| [IM Output]
Rec601Luma (Y)
YUV/YIQ | [IM Output]
Average (I)
HSI/OHTA | [IM Output]
Lightness
HSL | [IM Output]
Brightness
HSB | [IM Output]
Neg Black
CMYK | [IM Output]
Luminance*
LAB / LUV
---|---|---|---|---|---|---|---

Pour les formules réelles, voir la référence officielle de l'option "[-colorspace](https://imagemagick.org/command-line-options/#colorspace)". Notez qu'à partir d'IM v6.7.7, les images en niveaux de gris sont stockées sans modification gamma ou sRGB, à la fois en mémoire et lors de la sauvegarde. Elles ont donc tendance à être plus sombres qu'avant cette version. Notez que 'Gray' (également connu sous le nom d'« Intensity » ou plus exactement « Luminance ») et le 'Luma' de l'espace colorimétrique YUV sont équivalents. De même, le 'Brightness' de l'espace colorimétrique HSB et le canal 'Black' négativé de l'espace colorimétrique CMYK sont équivalents (et typiquement trop clairs pour une utilisation en niveaux de gris). Notez que le canal 'Lightness' des espaces colorimétriques LAB (et aussi LUV) (à ne pas confondre avec le 'Lightness' de HSL) est considéré comme étant la meilleure correspondance avec la perception visuelle humaine, bien qu'il ne soit pas couramment utilisé pour générer des images en niveaux de gris. Notez que pour une image en niveaux de gris donnée, toutes les images en niveaux de gris des espaces colorimétriques produisent exactement la même image que l'image d'entrée en niveaux de gris, à l'exception de l'image du canal 'Lightness' ('R') pour un espace colorimétrique LAB / LUV.

Autres méthodes de séparation de canaux

Une méthode consiste à copier un canal dans tous les autres canaux, pour générer une image en niveaux de gris, exactement comme ce que génère l'Opérateur Separate. Une méthode simple, mais lente, consiste à utiliser l'Opérateur DIY FX.

  magick rose: -fx R channel_red.gif
  magick rose: -fx G channel_green.gif
  magick rose: -fx B channel_blue.gif

[IM Output] [IM Output] [IM Output] [IM Output]

C'est souvent considéré comme la solution la plus « simple » à comprendre, et elle a été utilisée dans d'autres tutoriels IM. D'autres méthodes impliquent l'utilisation d'une multitude de techniques pour « mettre à zéro » les canaux indésirables. Celles-ci sont listées dans Mise à zéro des canaux de couleur ci-dessous, et sont généralement bien plus rapides que d'utiliser "[-fx](https://imagemagick.org/command-line-options/#fx)".

Combiner des images de canaux RGB

Une fois que vous avez séparé tous les canaux de couleur de l'image, et que vous les avez traités, vous aurez aussi besoin de pouvoir rejoindre les images ensemble. Cela peut être fait à l'aide de l'opérateur de liste spécial "[-combine](https://imagemagick.org/command-line-options/#combine)", qui est essentiellement exactement l'inverse de "-separate".

  magick separate_red.gif separate_green.gif separate_blue.gif \
           -combine -set colorspace sRGB rose_combined.gif

[IM Output] [IM Output] [IM Output] [IM Output]

Celles-ci se "[-combine](https://imagemagick.org/command-line-options/#combine)" alors pour créer une image déclarée comme étant une image en espace colorimétrique sRGB. Un utilisateur voulait pouvoir permuter les canaux rouge et bleu d'une image ; cela rend la chose facile : séparez les canaux, permutez, et recombinez. |

  magick rose: -separate -swap 0,2 -combine rose_rb_swap.gif

[IM Output]
Rappelez-vous que le paramètre "[-channel](https://imagemagick.org/command-line-options/#channel)" par défaut est 'RGB', et définit quelles images de canaux sont jointes ensemble. Si tous les canaux à combiner ne sont pas définis, les autres canaux sont réglés à l'aide des valeurs de couleur du paramètre "-background" actuel. Vous devriez cependant noter que "[-combine](https://imagemagick.org/command-line-options/#combine)" et "-separate" ignoreront tous deux l'ordre dans lequel les canaux sont définis par le "[-channel](https://imagemagick.org/command-line-options/#channel)". Les canaux seront toujours traités et générés dans l'ordre de canal standard 'Red,Green,Blue,Matte', pour chaque canal défini dans le paramètre "[-channel](https://imagemagick.org/command-line-options/#channel)". Ainsi, même si vous utilisez un paramètre "-channel BR" ou simplement "blue,red", l'opérateur "-combine" s'attendra quand même à ce que les deux images soient d'abord le rouge puis le bleu. Les valeurs vertes et alpha (si les images ont une transparence) seront réglées à partir des valeurs du paramètre "-background" actuel. Par exemple...

  magick separate_red.gif separate_blue.gif -background black \
           -channel blue,red  -combine    rose_red_blue.gif

[IM Output] [IM Output] [IM Output]

Combiner des images de canaux non-RGB

À partir d'IM v6.4.3-7, vous pouvez aussi "[-combine](https://imagemagick.org/command-line-options/#combine)" des images de canaux qui représentent d'autres espaces colorimétriques, mais vous devez indiquer à IM quel espace colorimétrique l'image résultante devrait avoir. Cela se fait à l'aide de l'opérateur spécial "[-set](https://imagemagick.org/command-line-options/#set) colorspace". Cela modifie essentiellement l'espace colorimétrique d'une image en mémoire mais sans remapper les données de pixels de l'image, les laissant telles quelles. Une fois l'image combinée dans le bon espace colorimétrique, vous pouvez utiliser un opérateur "[-colorspace](https://imagemagick.org/command-line-options/#colorspace)" normal pour remapper les données de pixels vers des données RGB normales. |

  magick separate_HSB_?.gif  -set colorspace HSB  -combine  \
          -colorspace sRGB  rose_HSB_combined.gif

[IM Output]
Cette méthode fonctionne aussi pour les images CMYK, qui sont souvent difficiles à manipuler en raison de la nécessité d'un quatrième canal de couleur. |

  magick separate_CMYK_?.gif  -set colorspace CMYK  -combine  \
          -colorspace sRGB  rose_CMYK_combined.gif

[IM Output]
Une solution de contournement alternative (pour les versions antérieures d'IM) consiste à charger une image (le canal rouge) et à la modifier pour qu'elle soit dans le bon espace colorimétrique. Après cela, chaque image de canal individuelle peut être chargée et Copiée par canal dans cette image préparée à l'avance. |

  magick separate_HSB_0.gif -colorspace HSB \
          separate_HSB_0.gif -compose CopyRed   -composite \
          separate_HSB_1.gif -compose CopyGreen -composite \
          separate_HSB_2.gif -compose CopyBlue  -composite \
          -colorspace sRGB   rose_HSB_combined_alt.gif

[IM Output]
Bien sûr, si vous avez utilisé l'opération "[-set](https://imagemagick.org/command-line-options/#set) colorspace", les données du premier canal seront déjà en place, car cela ne modifie pas les données de pixels réelles, seulement la façon dont les données sont interprétées. | Le dernier exemple ne fonctionnera pas pour les images 'CMYK', car l'image du canal 'Black' ne contient pas réellement de canal noir ! Ainsi, "-compose CopyBlack" ne parviendra pas à trouver de données valides à copier. Je considère cela comme un bug, mais il est actuellement peu probable qu'il soit corrigé.
---|---

L'utilisation d'autres espaces colorimétriques peut être utile. Par exemple, ici je prends l'image intégrée de la rose et je veux négativer le canal de luminance de l'image dans l'espace colorimétrique 'Lab'. Une fois terminé, je recombine pour reconstruire à nouveau une image sRGB. |

  magick rose: -colorspace Lab -separate \
          \( -clone 0 -negate \) -swap 0 +delete \
          -combine -set colorspace Lab \
          -colorspace sRGB   rose_light_neg.gif

[IM Output]
| _Auparavant, cet exemple utilisait l'espace colorimétrique 'HSL', mais c'est un espace colorimétrique linéaire, et nous voulons négativer dans un « espace colorimétrique perceptuel » tel que fourni par 'Lab'.

_
---|---
Notez que l'image a toujours les mêmes couleurs, mais que la luminosité (clarté) des couleurs a été inversée, produisant un effet étrange. Vous pouvez remplacer le "-negate" par votre propre ensemble d'opérations pour ajuster les niveaux de luminosité d'une image. Cependant, comme "-negate" est lui-même un opérateur contrôlé par canal, nous n'avons pas eu à "-separate" le canal de luminance pour le négativer. |

  magick rose: -colorspace Lab \
          -channel R   -negate   +channel \
          -colorspace sRGB rose_light_neg2.gif

[IM Output]
Comme vous pouvez le voir, cela simplifie les choses, mais ce n'est pas toujours pratique selon l'effet que vous voulez obtenir.

Mise à zéro des canaux de couleur

Parfois, vous avez une image (RGB ou un autre espace colorimétrique) où vous voulez juste effacer ou « mettre à zéro » un ou deux des canaux de couleur, mais laisser tous les autres canaux tels quels. Par exemple, pour créer une image en niveaux de gris sans utiliser les Techniques de mise en niveaux de gris RGB, vous pourriez « mettre à zéro » le canal de saturation ('G') dans un espace colorimétrique HSL afin de créer une image en niveaux de gris. La valeur « Teinte » n'a aucun sens lorsque la saturation est nulle, il vous reste donc une image en niveaux de gris. La technique la plus directe consiste souvent à utiliser l'Opérateur Evaluate pour mettre à zéro toutes les valeurs du canal indésirable... |

  magick rose: -colorspace HSL \
          -channel G  -evaluate set 0  +channel \
          -colorspace sRGB rose_grey.gif

[IM Output]
Cependant, il existe de nombreuses façons moins évidentes de faire cela...

  # Evaluate (rapide et direct)
    -channel G -evaluate set 0 +channel

  # Mise à zéro avec FX (direct et simple, mais lent)
    -channel G -fx 0 +channel

  # Séparer les canaux que vous voulez conserver,
  # puis combiner en utilisant une couleur d'arrière-plan pour régler les autres canaux
    -channel RB -separate -background black -combine +channel

  # Gamma, ce qui est un détournement de l'opérateur, mais qui fonctionne TRÈS bien !
  # ( 1 = laisser tel quel ;  0 = mettre le canal à zéro ;  -1 = maximiser le canal )
  # C'est court, simple, ne nécessite aucun réglage de canal, mais très obscur !
    -gamma 1,0,1

  # Seuiller les canaux à zéro
    -channel G -threshold 101% +channel

  # Seuiller à la valeur maximale puis négativer à zéro
    -channel G -threshold -1 -negate +channel

  # Multiplier avec une couleur primaire/secondaire appropriée
  # La couleur spécifie les canaux à préserver !  'magenta' = 'red'+'blue'
    \( +clone +level-colors magenta \) -compose multiply -composite

  # Coloriser des canaux spécifiques en noir
  # (0 = laisser tel quel ;   100% défini à partir du remplissage (noir) )
    -fill black -colorize 0,100%,0

Pouvez-vous penser à d'autres façons de mettre à zéro (ou de maximiser) un canal de couleur que je n'ai pas listées ci-dessus ? -- écrivez-moi


Espaces colorimétriques

Jusqu'à présent, nous nous sommes concentrés sur les espaces colorimétriques 'sRGB', 'RGB' et 'CMYK'. C'est parce que ce sont les espaces colorimétriques généralement utilisés pour l'affichage, l'impression et le stockage traditionnel des images dans des fichiers. Mais bien que ces espaces colorimétriques soient pratiques, ils ne sont pas représentatifs de la façon dont nous, humains, voyons réellement le monde. Nos yeux peuvent voir dans les longueurs d'onde rouge, verte et bleue, mais nos cerveaux les interprètent comme : la teinte de couleur (quelle couleur), le degré de gris (à quel point c'est coloré), et l'intensité (à quel point c'est clair/sombre). À cause de cela, de nombreux espaces colorimétriques et systèmes de couleur ont été développés, souvent à partir d'exigences complètement indépendantes. Les peintres, par exemple, ont développé un système de couleurs (basé sur des sources de couleur comme le lapis-lazuli), de nuances et de teintes. Plus tard, les systèmes informatiques utilisant le RGB ont eu besoin de meilleures façons pour les utilisateurs de sélectionner ou de modifier les couleurs, d'une manière qui ne soit pas trop coûteuse en calcul.

Espaces colorimétriques basés sur la teinte

L'une des alternatives les plus connues est probablement le système cyclique basé sur la teinte, qui a été développé comme interface de sélection de couleur pour les couleurs RGB. Fondamentalement, le cube de couleur RGB a été pivoté dans les 3 dimensions de sorte que l'axe diagonal noir-gris-blanc du cube devienne un axe de l'espace colorimétrique. Et celui-ci spécifiait à quel point une couleur était sombre ou claire. La caractéristique clé de ce changement était une conversion simple à partir des valeurs RGB qui espaçait les couleurs primaires de manière égale autour de cet axe, afin de former une Teinte qui cycle du rouge, à travers le vert, puis le bleu et revient au rouge. La distance à laquelle la couleur se trouvait de cet axe (radialement) était appelée saturation ou chroma.
Par exemple, Séparons les canaux de l'image 'rose:' intégrée après l'avoir transformée dans l'espace colorimétrique 'HSB' (Hue, Saturation, Brilliance, également connu sous le nom de HSV, avec V pour Value).

  magick rose: -colorspace HSB -separate separate_HSB_%d.gif

[IM Output] [IM Output] [IM Output] [IM Output]

Ou un 'HSL' similaire mais pas tout à fait identique (Hue, Saturation, Lightness).

  magick rose: -colorspace HSL -separate separate_HSL_%d.gif

[IM Output] [IM Output] [IM Output] [IM Output]

Remarquez comme l'image du canal « Teinte » dans les deux espaces colorimétriques est le même moucheté de couleurs presque purement noires et blanches. C'est parce qu'une Teinte est en réalité circulaire. C'est-à-dire que le noir et le blanc dans l'image de canal ci-dessus sont tous deux en réalité des représentations d'une Teinte « Rouge », et de légères variations font que la teinte bascule d'un côté du rouge (produisant du blanc) à l'autre (produisant du noir). Si cela pose problème, vous pouvez faire pivoter le réglage de la teinte à l'aide de l'Opérateur Modulate afin que le rouge soit représenté par une autre valeur de teinte. La vraie différence entre 'HSL' et 'HSB' est la luminosité avec laquelle les couleurs primaires sont définies. Mais pour voir cela, il vaut mieux examiner des représentations plus pratiques de l'espace colorimétrique, en utilisant des roues chromatiques. Si vous regardez les dernières images « luminosité/clarté » dans les séparations ci-dessus, vous verrez que 'HSB' traite une couleur 'rouge' forte (proche de la primaire) comme presque blanche, tandis que 'HSL' la traite plutôt comme une intensité de gris moyen.

Générer une roue chromatique HSL

Les séparations brutes de la couleur d'une image ci-dessus restent difficiles à comprendre. Pour mieux comprendre l'espace colorimétrique, nous devons essayer de le visualiser. L'espace colorimétrique est plus habituellement représenté comme un dégradé polaire circulaire, montrant une partie de l'espace colorimétrique. Vous pouvez générer les images de valeurs de canaux séparées, et les Combiner pour générer des types d'images spécifiques difficiles à générer autrement. Par exemple, ici nous générons une roue chromatique 'HSL' parfaite.

  magick -size 100x300 gradient: -rotate 90 \
          -distort Arc '360 -90.1 50' +repage \
          -gravity center -crop 100x100+0+0 +repage  angular.png
  magick -size 100x100 xc:white                     solid.png
  magick -size 100x100 radial-gradient: -negate     radial.png

  magick angular.png solid.png radial.png \
          -combine -set colorspace HSL \
          -colorspace sRGB colorwheel_HSL.png

[IM Output]
Hue | [IM Output]
Saturation | [IM Output]
Luminance | | [IM Output]
Roue chromatique HSL
---|---|---|---|---

| _Les images en niveaux de gris sont générées comme un dégradé linéaire en utilisant des valeurs sRGB. Elles ont donc tendance à paraître un peu plus sombres qu'elles ne le devraient. Ce sont cependant les valeurs dans les images d'entrée qui sont importantes ici, pas l'espace colorimétrique de visualisation.

En revanche, l'image résultante, bien que générée dans l'espace colorimétrique RGB linéaire, est sauvegardée en espace colorimétrique sRGB pour garantir que les navigateurs et autres programmes d'affichage d'images affichent le dégradé d'une manière qui fonctionne bien visuellement._
---|---
Notez aussi que la Teinte est une valeur « modulo », qui se boucle au rouge (valeur de teinte = 0). Cela peut être pénible lors du traitement d'images car vous avez deux couleurs rouges qui sont visuellement identiques, mais qui, en termes de valeur, sont à une distance de teinte maximale l'une de l'autre. Ce n'est pas un bon espace colorimétrique à utiliser lorsqu'on travaille sur des différences de couleur. En réalité, les canaux de clarté/luminosité des espaces colorimétriques HSB et HSL ne sont pas très utiles car les diverses Teintes ne sont pas traitées de manière égale. Fondamentalement, il « égalise » l'intensité des couleurs primaires. Par exemple, faire pivoter une teinte 'jaune' pour qu'elle devienne une teinte 'bleue' rendra par exemple la couleur très claire très sombre, et vice-versa. Pour plus de détails, voir Inconvénients de HSL. La prudence est conseillée.
Il existe un certain nombre d'espaces colorimétriques qui utilisent aussi ce même système de teinte basé sur le « cône hexagonal ». HSB, HCL et HCLp (HCL perceptuel). Voici les roues chromatiques de ces quatre espaces colorimétriques à « cône hexagonal ».

  magick angular.png solid.png radial.png \
          -combine -set colorspace HSL \
          -colorspace sRGB colorwheel_HSL.png
  magick angular.png solid.png radial.png \
          -combine -set colorspace HSB \
          -colorspace sRGB colorwheel_HSB.png
  magick angular.png solid.png radial.png \
          -combine -set colorspace HCL \
          -colorspace sRGB colorwheel_HCL.png
  magick angular.png solid.png radial.png \
          -combine -set colorspace HCLp \
          -colorspace sRGB colorwheel_HCLp.png

[IM Output]
HSL | [IM Output]
HSB | [IM Output]
HCL | [IM Output]
HCLp
---|---|---|---

Rappelez-vous que toutes les couleurs montrées ci-dessus sont générées à une saturation de couleur maximale. Cependant, l'espace colorimétrique 'HSB' produira les couleurs primaires à une clarté maximale (HSL les génère à mi-intensité). À cause de cela, le blanc ne peut être généré que lorsque la saturation est nulle. En conséquence, au lieu d'une zone blanche autour des bords, vous obtenez plutôt des couleurs entièrement saturées. L'espace colorimétrique 'HCL' utilise les mêmes calculs de teinte en « cône hexagonal » mais il ajuste le canal de « clarté » afin d'utiliser l'intensité de couleur, plutôt que les valeurs RGB linéaires directes. En conséquence, lors de l'utilisation d'un espace colorimétrique 'HCL', les couleurs primaires sont situées à différents niveaux d'intensité, le bleu étant plus proche de la couleur noire centrale, et les couleurs rouges beaucoup plus claires et plus éloignées. La zone d'intensité de 50 % de l'espace colorimétrique 'HCL' ne produit pas de couleurs fortes mais génère plutôt des couleurs pastel plus naturelles. Par exemple, voici une comparaison des teintes saturées entre les espaces colorimétriques HSL et HCL à une intensité de 50 %.

  magick -size 100x100 xc:black \
          -fill white  -draw 'circle 49.5,49.5 40,4' \
          -fill black  -draw 'circle 49.5,49.5 40,30' \
          -alpha copy -channel A -morphology dilate diamond anulus.png
  magick hue_angular.png -size 100x100 xc:white xc:gray50 \
          -combine -set colorspace HSL -colorspace RGB \
          anulus.png -alpha off -compose Multiply -composite \
          anulus.png -alpha on  -compose DstIn -composite \
          -colorspace sRGB hues_HSL.png
  magick hue_angular.png -size 100x100 xc:white xc:gray50 \
          -combine -set colorspace HCL -colorspace RGB \
          anulus.png -alpha off -compose Multiply -composite \
          anulus.png -alpha on  -compose DstIn -composite \
          -colorspace sRGB hues_HCL.png

[IM Output]
HSL/HSB | [IM Output]
HCL
---|---

C'est-à-dire, pas pour dire que 'HCL' ne contient pas de couleurs pures, elles ne sont simplement pas « forcées » dans un plan commun comme elles le sont dans l'espace colorimétrique 'HSL'. En particulier, remarquez comme toutes les nuances en HCL ont la même intensité de 50 % (comme demandé), contrairement aux résultats des teintes de l'espace colorimétrique HSL. Le vert est probablement la plus proche de toutes les couleurs principales d'une intensité de 50 %, il a donc une bonne réponse dans les teintes à 50 %. Il est recommandé d'utiliser cet espace colorimétrique pour les rotations de teinte, afin de préserver la luminosité générale de toutes les couleurs de l'image. Voir les exemples dans Modulate dans l'espace colorimétrique HCL. Espace colorimétrique HWB ???

Espaces colorimétriques perceptuels

Les espaces colorimétriques 'Lab' et 'Luv' sont conçus de telle sorte qu'ils séparent entièrement l'intensité en niveaux de gris des composantes de couleur d'une image. Contrairement aux espaces colorimétriques 'RGB' et 'sRGB'. Cela rend l'espace colorimétrique beaucoup plus facile à traiter et à modifier en général, une fois que vous avez pris le coup de main. Plus précisément, 'Luv' a été conçu pour être « perceptuellement linéaire ». C'est-à-dire qu'un petit changement de couleur dans une partie de l'espace colorimétrique semble être à peu près le même qu'un changement similaire dans une autre partie de l'espace colorimétrique. Cela rend l'espace colorimétrique Luv bien mieux adapté aux comparaisons de différences d'images. Les deux espaces colorimétriques sont très similaires, et produisent généralement des résultats similaires lors du traitement d'image. Ici, nous séparons les canaux pour les espaces colorimétriques 'Lab' et 'Luv', juste pour montrer à quel point les deux espaces colorimétriques sont en réalité similaires.

  magick rose: \( -clone 0 -colorspace LAB -separate +append \) \
                \( -clone 0 -colorspace LUV -separate +append \) \
          -delete 0 -append -set colorspace sRGB separate_lab_luv.png

[IM Output] | | [IM Output] | Lab

Luv
---|---|---|---

D'autres meilleurs exemples des espaces colorimétriques 'Lab' et 'Luv' peuvent être vus en utilisant leur variation cylindrique 'LCHab' 'LCHvu', dans La roue chromatique LCH ci-dessous. Pour un exemple pratique d'utilisation de ces espaces colorimétriques, voir Redimensionnement dans l'espace colorimétrique Lab.

Espaces colorimétriques basés sur Lab et Luv

L'espace colorimétrique 'HCL' est basé sur l'espace colorimétrique 'LCHuv', qui est une représentation cylindrique de l'espace colorimétrique 'Luv', bien qu'avec une formule plus simple pour le canal de clarté, afin de générer un blanc pur à la clarté maximale. Pour être complet, voici les représentations cylindriques des espaces colorimétriques 'Lab' et 'Luv', qui sont connues respectivement sous les noms de 'LCHab' et 'LCHuv'. Notez cependant que l'ordre des canaux est l'inverse de l'espace colorimétrique 'HCL' équivalent montré ci-dessus.

  magick radial.png solid.png angular.png \
          -combine -set colorspace LCHab \
          -colorspace sRGB colorwheel_LCHab.png
  magick radial.png solid.png angular.png \
          -combine -set colorspace LCHuv \
          -colorspace sRGB colorwheel_LCHuv.png

[IM Output]
Lightness* | [IM Output]
Chroma | [IM Output]
Hue | | [IM Output]
LCHab | [IM Output]
LCHuv
---|---|---|---|---|---

Notez que l'espace colorimétrique 'LCH' est un alias de 'LCHab'. Dans ce qui précède, vous pouvez voir que 'LCHuv' présente une discontinuité où des couleurs irréalistes sont définies par le processus de la roue chromatique. Les conversions normales d'images ne génèreront pas ces couleurs.

Espace colorimétrique scRGB à grande plage dynamique

Wikipedia :  http://en.wikipedia.org/wiki/ScRGB

Il s'agit essentiellement d'une méthode de stockage d'une couleur à grande plage
dynamique (avec des négatifs et jusqu'à 10 fois la plage du RGB linéaire) dans un
entier 16 bits, avec seulement 1/2 de la résolution de couleur d'une image sRGB 16 bits normale.

Comme il utilise des entiers 16 bits, il peut être stocké dans des formats de fichiers image
capables de sauvegarder de telles images (PNG, PPM, MIFF), bien qu'un profil de couleur, ou une
autre méthode, doive être utilisé pour marquer ces images comme contenant des données en espace
colorimétrique scRGB.

Vous devriez faire très attention, avec de nombreux opérateurs de traitement d'images dans
cet espace colorimétrique, car il comporte un « décalage » pour lui permettre de gérer les
nombres négatifs.
Et bien que certains opérateurs comme resize et distort puissent être utilisés directement sur cet
espace colorimétrique, il est probablement préférable d'utiliser une version HDRI d'ImageMagick,
et de passer au RGB linéaire (avec négatifs), pour un traitement d'images plus général.

_Des exemples et plus d'informations sur l'utilisation de cet espace colorimétrique seraient les bienvenus_

Remplacer des couleurs dans les images

ImageMagick fournit naturellement un certain nombre d'options pour remplacer une couleur spécifique et des couleurs presque correspondantes par une autre couleur. C'est idéal pour manipuler des icônes et des images de type « bitmap » qui contiennent très peu de couleurs, mais cela a tendance à échouer pour les images contenant des nuances de couleurs ou des pixels de bord anti-crénelés. Fondamentalement, vous devez vous rappeler que les couleurs sont remplacées par une seule nuance. Donc si vous remplacez un ensemble ou un voisinage de couleurs, toutes ces couleurs sont remplacées par une seule couleur unique spécifique et non par une gamme correspondante de couleurs. Ce n'est pas pour dire qu'il est impossible de faire un remplacement de couleur nuancé, juste que ce n'est pas simple à faire pour le moment, sans beaucoup de travail. Quoi qu'il en soit, les images GIF ne permettent pas l'utilisation de la semi-transparence, donc remplacer des couleurs de cette manière est une bonne méthode pour contrôler la transparence d'arrière-plan des GIF (voir GIFs sur un motif d'arrière-plan pour des exemples) L'autre aspect est que, bien que vous puissiez mapper toutes les « couleurs proches » vers une palette de couleurs donnée, en utilisant des Palettes de couleurs prédéfinies, il n'y a pas d'opérateur pour faire un mappage direct un-à-un d'un grand ensemble de couleurs vers un autre ensemble complètement différent de couleurs. C'est une lacune qui pourrait changer dans une future version d'IM. Avec cette mise en garde, examinons les façons dont IM permet le remplacement direct d'une couleur spécifique par une autre couleur.

Remplacer une couleur spécifique

Les opérateurs "[-opaque](https://imagemagick.org/command-line-options/#opaque)" et "[-transparent](https://imagemagick.org/command-line-options/#transparent)" sont conçus pour remplacer une couleur dans une image par une autre. Par exemple, pour remplacer une couleur 'blue' par disons 'white', vous utiliseriez une commande comme celle-ci... |

  magick balloon.gif  -fill white -opaque blue   balloon_white.gif

[IM Output] [IM Output]
Fondamentalement, toute couleur qui était 'blue' a été remplacée par la couleur "[-fill](https://imagemagick.org/command-line-options/#fill)" actuelle. Cependant, à partir d'IM v6.2.7, cet opérateur est limité par le paramètre "[-channel](https://imagemagick.org/command-line-options/#channel)". Ainsi, pour transformer une couleur (disons le bleu) en transparence, vous devrez spécifier un "[-channel](https://imagemagick.org/command-line-options/#channel)" incluant le canal alpha pour rendre les couleurs transparentes. Vous devrez aussi vous assurer que l'image a un canal 'matte' ou canal alpha activé, pour contenir l'information de transparence. |

  magick balloon.gif   -alpha set  -channel RGBA \
                        -fill none -opaque blue   balloon_none.gif

[IM Output] [IM Output]
Comme remplacer une couleur par de la transparence est une opération si courante, ce qui précède possède son propre opérateur spécial de remplacement par transparence "[-transparent](https://imagemagick.org/command-line-options/#transparent)". |

  magick balloon.gif  -transparent blue   balloon_trans.gif

[IM Output] [IM Output]
À partir de la version IM 6.3.7-10, les versions « plus » de ces opérateurs inversent la sélection de couleur. C'est-à-dire que les couleurs qui ne correspondent PAS à la couleur donnée seront remplacées. Par exemple, ici je remplace toute couleur qui n'est PAS noir pur, par du blanc, ne laissant que les bordures noir pur de l'image. |

  magick balloon.gif  -fill white +opaque black   balloon_borders.gif

[IM Output] [IM Output]
Cela peut ne pas sembler grand-chose, mais lorsque vous le combinez avec un Facteur de flou (voir ci-dessous), cela devient un outil très puissant. | Avant IM v6.3.7-10, l'opération inverse nécessitait l'utilisation d'astuces avec des masques d'image. Fondamentalement, vous remplacez la couleur que vous voulez préserver par de la transparence, puis vous "[-colorize](https://imagemagick.org/command-line-options/#colorize)" toutes les autres couleurs vers la couleur souhaitée pour créer un masque de superposition. Celui-ci est ensuite superposé sur l'image d'origine pour « masquer » les couleurs qui ne correspondaient pas ! | |

  magick balloon.gif \
          \( +clone -alpha set -transparent black \
             -fill white  -colorize 100% \) \
          -composite    balloon_mask_non-black.gif

[IM Output] [IM Output]
Comme vous pouvez le voir, la forme « plus » de l'opérateur a énormément simplifié l'opération de remplacement « pas cette couleur ».
Pour des techniques de remplacement plus avancées, je vous suggère de consulter Suppression d'arrière-plan. | _Soyez prévenu que comme toutes les couleurs correspondantes (en particulier les 'couleurs correspondant par flou', voir ci-dessous) sont remplacées par une seule couleur uniforme, vous n'obtiendrez aucun anti-crénelage des bords des zones colorées. Et vous perdrez tout effet d'ombre ou autre effet d'ombrage qui pourrait être présent. Cela peut avoir un effet sérieusement préjudiciable sur l'apparence de toute image qui n'est pas simple, qui n'est pas de type dessin animé.

Ce type de remplacement de couleur n'est pas conçu pour des images réelles du monde réel, mais plutôt pour des effets de masquage d'image. La prudence est conseillée._
---|---
Le remplacement de couleur "[-opaque](https://imagemagick.org/command-line-options/#opaque)" ne peut pas remplacer une couleur par un motif en mosaïque. Il ne remplacera les couleurs que par une autre couleur unique spécifique. Cependant, les méthodes de remplacement de couleur "[-draw](https://imagemagick.org/command-line-options/#draw)" et "[-floodfill](https://imagemagick.org/command-line-options/#floodfill)" le peuvent (voir ci-dessous).

Remplacer en utilisant une couleur présente dans l'image

Vous pouvez aussi utiliser le Remplacement de couleur Draw pour recolorer les images en fonction des couleurs présentes dans l'image elle-même, plutôt qu'une couleur spécifique. |

  magick present.gif -fill red -draw 'color 0,0 replace' present_blue.gif

[IM Output] [IM Output]
Notez que je n'ai jamais spécifié la couleur à remplacer, seulement l'emplacement de la couleur à remplacer. C'est la couleur à cet emplacement qui est utilisée pour « faire correspondre » les zones à remplir, quelle que soit cette couleur. Vous pouvez voir dans l'exemple ci-dessus le problème du remplacement de couleur : la couleur spécifique peut apparaître à d'autres endroits que ceux que vous prévoyez, nous donnant une ligne de pixels rouges au sein de l'image 'present' ci-dessus. La transparence ne pose pas non plus de problème, bien que certaines parties internes de l'image aient aussi été rendues transparentes, tout comme elles sont devenues rouges ci-dessus... |

  magick present.gif -alpha set -fill none \
                      -draw 'color 0,0 replace' present_none.gif

[IM Output] [IM Output]
Notez cependant que, contrairement à "[-opaque](https://imagemagick.org/command-line-options/#opaque)" et "[-transparent](https://imagemagick.org/command-line-options/#transparent)", le Remplacement de couleur Draw ne vous permet pas d'inverser les « couleurs correspondantes » à remplacer. Draw possède aussi un Remplacement Matte spécial, où seule la transparence de la couleur de remplissage est remplacée. C'est-à-dire que vous pouvez rendre toutes les couleurs correspondantes transparentes, ou semi-transparentes, sans réellement changer la couleur du pixel lui-même. Avec le format de fichier approprié, bien sûr. |

  magick present.gif -alpha set -fill '#00000080' \
            -draw 'matte 0,0 replace' present_semi.png

[IM Output] [IM Output]
Cela devient bien plus utile lorsqu'un Facteur de flou est aussi spécifié. Le plus grand avantage d'utiliser "[-draw](https://imagemagick.org/command-line-options/#draw)" est que vous pouvez aussi remplacer la couleur par un motif en mosaïque. Par exemple.. |

  magick present.gif -tile pattern:right30 \
                -draw 'color 0,0 replace' present_tile.gif

[IM Output] [IM Output]
Pour des techniques de remplacement plus avancées, je vous suggère de consulter Suppression d'arrière-plan.

Remplissage par diffusion avec Draw

Les méthodes Draw Color vous fournissent aussi une méthode simple pour remplacer une couleur par « remplissage par diffusion ». C'est-à-dire que, plutôt que de remplacer TOUTES les couleurs correspondantes au sein de l'image, vous pouvez sélectionner uniquement les couleurs qui sont « connectées à » ou « attachées à » le point spécifié dans l'image. Le point spécifié ne spécifiera pas seulement le point de départ (point de germination), mais aussi la couleur que vous essayez de remplacer. |

  magick present.gif -fill red -draw 'color 0,0 floodfill' present_fill.gif

[IM Output] [IM Output]
Notez que les zones rouges qui n'étaient pas « attachées » au pixel 0,0 n'ont pas été remplacées. Pour le remplacement d'arrière-plan, cela peut être un problème, mais la solution est tout aussi simple. Agrandissez légèrement l'image pour que le remplissage par diffusion puisse « fuir » dans l'image depuis toutes les directions, puis retirez cet espace supplémentaire une fois terminé. |

  magick present.gif -bordercolor white -border 1x1 \
          -fill red     -draw 'color 0,0 floodfill' \
          -shave 1x1               present_bgnd.gif

[IM Output] [IM Output]
Bien sûr, vous pouvez ajuster quelles couleurs sont « correspondantes » à l'aide du paramètre de contrôle Facteur de flou ci-dessous, ce qui est particulièrement important pour les images JPEG.

Opérateur de remplissage par diffusion

L'opérateur "[-floodfill](https://imagemagick.org/command-line-options/#floodfill)" a été ajouté pour rendre le remplissage par diffusion légèrement plus facile, en particulier lorsque vous voulez spécifier exactement la couleur que vous voulez spécifiquement remplacer. Cela peut être particulièrement important lors de l'utilisation de la correspondance de couleur par Facteur de flou. Cependant, soyez prévenu que si ce point de germination n'est pas dans une correspondance de Facteur de flou de la couleur que vous recherchez, alors "[-floodfill](https://imagemagick.org/command-line-options/#floodfill)" ne fait rien. Cela peut être considéré comme une caractéristique de l'opérateur autant que comme sa malédiction.

Un petitFacteur de flou est recommandé pour le remplissage par diffusion.
Ou assurez-vous que le point de germination correspond exactement à la couleur recherchée.

Par exemple, ajoutez une bordure de couleur connue pour remplir par diffusion depuis les bords... |

  magick present.gif -bordercolor white -border 1x1 \
          -fill red    -floodfill +0+0 white \
          -shave 1x1              present_floodfill.gif

[IM Output] [IM Output]
Cela remplacera toute couleur qui est 'white' par 'red' et qui fait directement partie de la zone entourant le pixel de germination commençant à +0+0, qui est garanti d'être 'white' grâce à la bordure ajoutée. Vous pouvez aussi remplir par diffusion avec un motif en mosaïque. |

  magick present.gif -bordercolor white -border 1x1 \
                -tile pattern:left30   -floodfill +0+0 white \
                -shave 1x1           present_pattern.gif

[IM Output] [IM Output]
L'argument 'color ' peut parfois être pénible, en ce sens qu'il doit correspondre à la couleur du point de germination, sinon aucune action n'aura lieu. Mais cela peut aussi être utile, car cela garantira que le remplissage par diffusion fait exactement ce que vous vouliez, et non l'inattendu. Par exemple, ici j'essaie de remplir des disques blancs avec diverses couleurs... |

  magick disks.gif \
          -fill Red   -floodfill +30+50 white \
          -fill Green -floodfill +60+60 white \
          -fill Blue  -floodfill +10+40 white \
          floodfill_hit_miss.gif

[IM Output]
Dans ce cas, seules les opérations de remplissage par diffusion 'Green' et 'Blue' ont « touché un disque » (et l'ont rempli), tandis que le remplissage par diffusion 'Red' n'a pas correspondu à un disque, donc aucun disque n'a été rempli, sans remplir accidentellement l'arrière-plan de l'image. Cela signifie aussi que si vous avez déjà rempli une zone spécifique, les remplissages ultérieurs ne « re-rempliront » pas la même zone si deux points touchent cette zone. Cela peut faire gagner beaucoup de temps. Vous pourriez aussi vouloir consulter la Dilatation conditionnelle qui représente une opération de remplissage par diffusion de plus bas niveau depuis plusieurs points de « germination » dans l'image.

Facteur de flou - Correspondance de couleurs similaires/multiples

Les résultats globaux de la simple sélection d'une seule couleur à remplacer, comme montré dans les exemples précédents, ne sont généralement pas très agréables. Les bords ou zones de couleurs unies ont généralement un mélange de couleurs au bord, en raison de l'anti-crénelage (voir Anti-crénelage pour plus d'informations). Ainsi, vous devriez éviter le remplacement direct de couleur si possible. Par exemple, ici je prends ce qui ressemble à une simple « vache » en noir et blanc et j'essaie d'en faire une vache rouge.

  magick cow.gif -fill red -opaque black  cow_replace_red.gif

[IM Output] [IM Output]

Comme vous pouvez le voir, seules les parties centrales des zones 'noires' sont réellement devenues rouges. C'est parce que, bien que l'image apparaisse en noir et blanc, c'est en réalité une image en niveaux de gris dont presque tous les bords sont diverses nuances de gris. C'est-à-dire qu'ils ne sont pas exactement de couleur noir pur. Le facteur de flou ("[-fuzz](https://imagemagick.org/command-line-options/#fuzz)") représente une correspondance de « similarité » en distance sphérique multidimensionnelle entre les couleurs, en utilisant l'espace colorimétrique que l'image utilise. Bon, d'accord, essayons cela en clair. Vous avez une couleur spécifique. Une autre couleur sera traitée comme étant la même que la couleur recherchée, si la différence entre ces couleurs est inférieure au réglage du facteur de flou. Plus le « facteur de flou » est grand, plus de couleurs « proches » correspondront et seront remplacées. Alors essayons cela sur notre image de vache afin de transformer non seulement le noir pur mais aussi les couleurs proches du noir en rouge.

  magick cow.gif -fuzz 40%  -fill red -opaque black  cow_replace_fuzz.gif

[IM Output] [IM Output]

Comme vous pouvez le voir, nous avons maintenant remplacé tous les pixels 'sombres' de l'image par du rouge. Mais le résultat est toujours très mauvais, avec une teinte grisâtre sur le bord, et de forts effets de crénelage. Le remplacement direct de couleur n'est pas une bonne solution pour cette image, même si vous pouvez le faire fonctionner en utilisant un grand « facteur de flou ». Voir les exemples dans Ajustements de niveau par couleur pour la solution idéale pour cette image. Ce problème est encore pire pour les images où vous essayez de remplacer une couleur d'arrière-plan par de la transparence. Vous vous retrouvez essentiellement avec un « halo » autour de l'objet sur cette couleur d'arrière-plan. C'est très difficile à résoudre, et des problèmes comme celui-ci sont examinés en détail dans Suppression d'arrière-plan. Quelles opérations utilisent le facteur de flou L'opérateur "[-fuzz](https://imagemagick.org/command-line-options/#fuzz)" affecte à peu près tout opérateur qui compare des couleurs spécifiques au sein d'une image. Cela inclut : "[-opaque](https://imagemagick.org/command-line-options/#opaque)", "[-transparent](https://imagemagick.org/command-line-options/#transparent)", "[-floodfill](https://imagemagick.org/command-line-options/#floodfill)", "[-trim](https://imagemagick.org/command-line-options/#trim)", "[-deconstruct](https://imagemagick.org/command-line-options/#deconstruct)", "[-draw](https://imagemagick.org/command-line-options/#draw) 'color'", "[-draw](https://imagemagick.org/command-line-options/#draw) 'matte'", et probablement d'autres. Cela affecte aussi le "[-layers](https://imagemagick.org/command-line-options/#layers) [OptimizeTransparency](anim_opt.html#opt_trans)" des GIF, et la gestion de "[-compose](https://imagemagick.org/command-line-options/#compose) [ChangeMask](compose.html#changemask)". Cela affecte aussi les résultats de "magick compare" et spécifiquement le "[-metric](https://imagemagick.org/command-line-options/#metric) AE" ou Absolute Error Pixel Count (nombre de pixels en erreur absolue).

Distance du facteur de flou

Le réglage "[-fuzz](https://imagemagick.org/command-line-options/#fuzz)" est en réalité une forme de réglage de « distance » de couleur. Toute couleur qui se trouve dans la distance donnée de la couleur recherchée correspondra à cette couleur, même si ce n'est pas une correspondance exacte. Une valeur de '200' représente une distance de 200 unités de couleur dans la profondeur de couleur actuelle de l'IM utilisé. Pour un IM Q16 (qualité 16 bits pour le stockage de couleur), c'est assez petit, pour un IM Q8 c'est TRÈS grand, et cela fera correspondre beaucoup de couleurs entre elles. Ici, par exemple, je change toutes les couleurs qui sont dans les 30 000 unités de couleur (pour IM Q16) de 'blue' en blanc. Avec mes programmes ImageMagick Q16, cela représente approximativement la distance de 'blue' à 'navy' (bleu foncé à moitié), |

  magick colorwheel.png \
          -fuzz 30000 -fill white -opaque blue \
          opaque_blue.jpg

[IM Output]
Pour rendre cela plus facile à comprendre, ici j'inverse les couleurs correspondantes, transformant les couleurs non correspondantes en blanc. |

  magick colorwheel.png \
          -fuzz 30000 -fill white +opaque blue \
          opaque_blue_not.png

[IM Output]
Si votre IM est plus ancien que la version 6.3.7-10, lorsque la forme « plus » de l'opérateur "[-opaque](https://imagemagick.org/command-line-options/#opaque)" a été ajoutée, vous pouvez utiliser cette méthode de masquage pour inverser le résultat de la correspondance de couleur... |

  magick colorwheel.png \
          \( +clone  -fuzz 30000 -transparent blue \
             -channel RGB +level-colors white +channel \) \
          -composite   opaque_blue_inv.png

[IM Output]
Ou cette méthode qui limite toutes les modifications au seul 'canal alpha', de sorte que toutes les couleurs d'origine sont laissées telles quelles. C'est-à-dire que vous créez un masque négativé à partir de la sélection de couleur, afin de rendre toutes les couleurs non sélectionnées entièrement transparentes. Elles restent présentes, juste transparentes ! |

  magick colorwheel.png -fuzz 30000 -transparent blue \
          -channel A -negate +channel   opaque_blue_inv_alpha.png

[IM Output]
Un avantage de ces méthodes alternatives est que vous pouvez les étendre pour générer une technique « pas plusieurs couleurs ». Tout ce que vous avez à faire est d'ajouter plus de couleurs à la liste de celles rendues transparentes, avant de négativer le masque, et éventuellement de retirer la transparence négativée. |

  magick colorwheel.png \
          -fuzz 25000 -transparent blue -transparent red -transparent lime \
          -channel A -negate +channel \
          -background white -alpha remove   opaque_multi_inv.png

[IM Output]

| _À titre indicatif, dans un IM avec un réglage de compilation Q8, un facteur "[-fuzz](https://imagemagick.org/command-line-options/#fuzz)" de 256 (28) rendra les couleurs 'black' et 'blue' équivalentes. Pour un IM avec un réglage Q16, ce nombre est de 65536 (216).

Pour faire correspondre les couleurs 'blue' et 'red', ce nombre doit être multiplié par la racine carrée de 2, soit 362 pour IM Q8, et 92682 pour IM Q16.

Pour faire correspondre toutes les couleurs (par ex. les couleurs 'black' et 'white'), vous devrez multiplier par la racine carrée de 3. En d'autres termes, un réglage de facteur de flou de 444 pour IM Q8 et de 113512 pour IM Q16.
---|---
| _Il est probable que de meilleures et plus réalistes distances de couleur puissent être définies en utilisant un espace colorimétrique « perceptuel », tel que 'LAB' ou 'LUV'. Il suffit de passer les images dans cet espace colorimétrique avant d'effectuer la correspondance floue de couleur. Cela rendra des couleurs comme le bleu pur et le noir bien plus proches, et le jaune et le blanc plus proches, qu'ils ne le sont dans les espaces colorimétriques 'sRGB' ou 'RGB linéaire'.

---|---
Comme vous pouvez le voir d'après les formules ci-dessus, les distances de couleur directes ne sont définitivement pas une façon agréable de régler le facteur de flou à utiliser, car cela dépend aussi exactement du Réglage de qualité à la compilation utilisé. Régler le facteur "[-fuzz](https://imagemagick.org/command-line-options/#fuzz)" en pourcentage rend son utilisation bien plus simple. Dans ce cas, '100%' représente un facteur de flou suffisamment grand pour couvrir toutes les couleurs. C'est-à-dire qu'il représente la distance de couleur de 'black' à 'white', à travers la diagonale tridimensionnelle du cube de couleur RGB. Ici, nous remplaçons toute couleur se trouvant dans les 90 % de la distance du blanc au noir, par du blanc. Cela ne devrait laisser que les 10 % de couleurs proches du 'black' sur l'image, car le noir se trouve du côté opposé du cube de couleur RGB. |

  magick colorwheel.png -fuzz 90% -fill white -opaque white  opaque_w90.jpg

[IM Output]
Notez que ces 90 % représentent une sphère de couleurs autour du 'white' dans le cube de couleur RGB. Cependant, ce n'est pas la même chose que de remplacer les couleurs qui ne sont pas dans une sphère de 10 % du noir. |

  magick colorwheel.png -fuzz 10% -fill white +opaque black  opaque_k10.jpg

Comme vous pouvez le voir, la sphère de 10 % de couleurs proches du noir est bien plus uniforme que la sélection d'une sphère de 90 % des couleurs autour du blanc. Pensez à la façon dont une grande sphère centrée sur le coin blanc d'un cube remplit ce cube. Puis pensez à une petite sphère centrée sur le coin noir, et vous pourrez comprendre la différence entre les deux images. [IM Output]
| _Un facteur "[-fuzz](https://imagemagick.org/command-line-options/#fuzz)" de 100 % équivaut à la distance dans le cube de couleur RGB de 'black' à 'white'. À partir de cela, nous pouvons calculer qu'un pourcentage d'environ 57,7 % est la distance entre 'black' et 'blue', et 81,6 % est la distance de 'blue' à 'red' ou de l'une de ces couleurs à 'white'.

En résumé, tout ce qui est plus grand qu'environ 25 % (juste en deçà de la distance RGB de 'blue' à 'navy blue') représente un très grand changement de couleur._
---|---
Pour démontrer davantage les distances de couleur, utilisons un pourcentage de facteur de flou progressivement plus grand autour des couleurs bleues...

  magick colorwheel.png -fuzz 10% -fill white -opaque blue opaque_b10.jpg
  magick colorwheel.png -fuzz 25% -fill white -opaque blue opaque_b25.jpg
  magick colorwheel.png -fuzz 57% -fill white -opaque blue opaque_b57.jpg
  magick colorwheel.png -fuzz 81% -fill white -opaque blue opaque_b81.jpg
  magick colorwheel.png -fuzz 95% -fill white -opaque blue opaque_b95.jpg

[IM Output] [IM Output] [IM Output] [IM Output] [IM Output]

À partir de cela, vous pouvez clairement voir que ce n'est pas le 'black', ou le 'white', qui est la couleur la plus éloignée du 'blue', mais que c'est en réalité le 'yellow' qui est le plus éloigné au sein de l'espace colorimétrique RGB. Notez aussi qu'une différence de couleur de 81 % manquera tout juste de correspondre à une couleur 'red' pure ; cependant, bien que le rouge pur ne corresponde pas aux autres rouges, (à l'exception des couleurs rouge-orange) ceux-ci correspondent. C'est, là encore, dû à la nature « sphérique » de la correspondance de couleur. La morale est que vous feriez probablement mieux d'utiliser soit plusieurs petites correspondances par facteur "[-fuzz](https://imagemagick.org/command-line-options/#fuzz)", soit une « correspondance inversée » plus petite, plutôt qu'une seule grande valeur. Ici, nous comparons les couleurs de l'image avec une autre couleur, la couleur 'gris presque parfait', changeant les couleurs similaires vers ce même gris, à mesure que le 'facteur de flou' augmente.

  magick colorwheel.png -fuzz 25% -fill gray50 -opaque gray50 opaque_g25.jpg
  magick colorwheel.png -fuzz 30% -fill gray50 -opaque gray50 opaque_g30.jpg
  magick colorwheel.png -fuzz 35% -fill gray50 -opaque gray50 opaque_g35.jpg
  magick colorwheel.png -fuzz 45% -fill gray50 -opaque gray50 opaque_g45.jpg
  magick colorwheel.png -fuzz 51% -fill gray50 -opaque gray50 opaque_g51.jpg

[IM Output] [IM Output] [IM Output] [IM Output] [IM Output]

Comme vous pouvez le voir, les couleurs de l'image de roue chromatique ne commencent tout juste à correspondre qu'à un facteur de flou juste avant 30 %, et augmentent lentement jusqu'à ce qu'à 45 % toutes sauf les couleurs les plus extrêmes aient disparu. À 51 %, toutes les couleurs de l'image ont correspondu au gris presque parfait. Ce que vous voyez est le résultat de la façon dont les couleurs RGB sont disposées en un cube dans l'espace tridimensionnel. L'image de la « roue chromatique » ne contient cependant que des « couleurs entièrement saturées », ce qui signifie essentiellement toutes les couleurs extrêmes situées sur les faces extérieures du cube de couleur RGB. Un gris parfait est cependant situé au centre du cube, assez éloigné de toutes les « couleurs saturées ». Ainsi, ce n'est pas avant d'atteindre un grand facteur de flou de 28 % que la couleur au milieu des faces du cube commence à correspondre. À mesure que le facteur de flou s'agrandit, de plus en plus de couleurs correspondent jusqu'à ce qu'il ne reste que les couleurs aux coins extrêmes du cube de couleur. Vers 50 %, les couleurs des coins commenceront aussi à correspondre, et donc à 51 %, chaque couleur RGB opaque aura correspondu.

Facteur de flou et couleurs transparentes

L'utilisation d'un facteur "[-fuzz](https://imagemagick.org/command-line-options/#fuzz)" devient plus compliquée lorsque la correspondance implique des couleurs transparentes et semi-transparentes. Par exemple, ici je crée un dégradé entre le noir et le blanc, à travers l'image, mais j'ajoute ensuite un dégradé transparent verticalement. Je fais ensuite une correspondance floue de couleur pour un gris parfait (c'est-à-dire un gris à 50 %). Dans les images suivantes, je rends la couleur recherchée de plus en plus transparente jusqu'à ce qu'elle soit entièrement transparente, cependant le Facteur de flou reste constant à 20 %.

  magick -size 100x100 gradient: \( +clone -rotate 90 \) +swap \
          -compose CopyOpacity -composite  trans_gradient.png
  magick trans_gradient.png -channel RGBA \
          -fuzz 20% -fill Gray50 -opaque 'GrayA(50%,1.0)' fuzz_trans_100.png
  magick trans_gradient.png -channel RGBA \
          -fuzz 20% -fill Gray50 -opaque 'GrayA(50%,.75)' fuzz_trans_75.png
  magick trans_gradient.png -channel RGBA \
          -fuzz 20% -fill Gray50 -opaque 'GrayA(50%,.40)' fuzz_trans_40.png
  magick trans_gradient.png -channel RGBA \
          -fuzz 20% -fill Gray50 -opaque 'GrayA(50%,0.0)' fuzz_trans_00.png

[IM Output] [IM Output] [IM Output] [IM Output] [IM Output]

Notez que l'utilisation de "-channel RGBA" ci-dessus n'est pas pour la correspondance de couleur, mais pour spécifier les canaux de couleur à « remplir ». C'est-à-dire que sans cela, ce qui précède fera quand même correspondre les mêmes couleurs, mais le 'remplissage' gris restera semi-transparent, et ne sera pas réglé sur une couleur grise opaque. Si vous voulez faire correspondre toutes les couleurs quelle que soit leur transparence, alors vous devrez Désactiver le canal transparent de l'image, au moins temporairement. Vous pouvez le réactiver ensuite, bien que votre couleur de remplissage aura à nouveau la même transparence que la couleur d'origine. Dans la première image, en faisant correspondre une couleur grise entièrement opaque (alpha='1.0'), vous obtenez une correspondance très sphérique de toutes les couleurs grises presque opaques. Cependant, à mesure que la couleur recherchée devient plus semi-transparente, le nombre de couleurs semi-transparentes correspondantes semblera devenir plus grand, jusqu'à ce qu'un gris entièrement transparent corresponde à n'importe quelle couleur presque transparente. Ce qui se passe, c'est qu'à mesure que la transparence augmente, la distance entre les couleurs semi-transparentes diminue. Plus deux couleurs sont transparentes, plus les couleurs seront proches, par rapport à leurs équivalents opaques. Lorsque les deux couleurs sont entièrement transparentes, les deux couleurs seront considérées comme une correspondance parfaite, ou de distance '0'. L'autre chose à remarquer est que (à partir d'IM v6.6.6-4) la distance par rapport à une couleur entièrement transparente (grise ou autre) est purement une fonction de la transparence de la couleur (valeur alpha). La dernière image ci-dessus a fait correspondre tous les pixels qui étaient dans les 20 % d'être entièrement transparents, quelle que soit la couleur réelle. Cela signifie aussi qu'un grand Facteur de flou avec une couleur entièrement transparente (comme 'none') peut être utilisé pour faire correspondre toutes, ou presque toutes, les couleurs semi-transparentes. Par exemple... |

  magick trans_gradient.png -channel RGBA \
          -fuzz 95% -fill Gray50 -opaque None \
          -alpha off  fuzz_trans.jpg

[IM Output]
Remarquez que seuls les 5 % supérieurs des couleurs presque opaques ci-dessus n'ont pas correspondu, tandis que toutes les autres couleurs semi-transparentes ont été transformées en gris. Le "[-alpha](https://imagemagick.org/command-line-options/#alpha) off" final retire le dernier reste de semi-transparence de l'image. À cause de cela, le paramètre "[-channel](https://imagemagick.org/command-line-options/#channel) RGBA" n'est en réalité pas nécessaire, mais est recommandé pour être complet. Cet exemple est essentiellement équivalent à un seuillage du canal alpha, avant d'ajouter une sous-couche de couleur grise (pour rendre les couleurs transparentes grises) | Avant IM v6.6.6-4, la correspondance floue de couleur ne faisait pas correspondre les couleurs entièrement transparentes avec les couleurs opaques de manière égale. En fait, le noir était une correspondance bien plus proche que le blanc. Ainsi, le dernier exemple échouera. VoirBug de distance de flou et couleurs transparentes pour plus de détails.
---|---
| Pire encore, avant IM v6.2.6-2, la correspondance floue de couleur ne considérait pas toutes les couleurs entièrement transparentes comme étant la même couleur. C'est-à-dire que le noir entièrement transparent (également connu sous le nom de 'None') n'était pas le même que le blanc entièrement transparent (ou la couleur '#FFF0'), même s'ils sont tous deux entièrement transparents.
---|---


En construction

Mathématiques de couleur (obtenir la moyenne de deux couleurs ou plus)....

  Exemple de moyenne de deux couleurs... Disons '#000000'  et  '#DDDDDD'

  Généralement, les couleurs sont ajoutées aux images, et le résultat est sorti
  sous forme d'image 'txt:-' à un seul pixel, dont la couleur peut être extraite.

  * utiliser -resize pour fusionner les couleurs

      magick -size 2x1 xc:'#000000' -fill '#DDDDDD' \
              -draw 'point 0,0'  -resize 1x1  txt:-

  * Utiliser -evaluate-sequence mean sur elles !

      magick -size 1x1 xc:'#000000' xc:'#DDDDDD' \
              -evaluate-sequence mean  txt:-

    Ou pour un grand nombre de couleurs, vous pouvez utiliser le filtre de redimensionnement 'Box'
      magick rose: -filter Box -resize 1x1\! txt:
      # ImageMagick pixel enumeration: 1,1,255,RGB
      0,0: (145, 89, 80) #915950

  * Utiliser -fx pour appliquer la formule que vous voulez

      magick -size 1x1 xc:'#000000' xc:'#DDDDDD' \
              -fx '(u+v)/2'  txt:-

  Avec une API ImageMagick, les résultats peuvent être récupérés plus directement à partir de
  l'image.