Vous disposez de nombreuses options pour désaturer une image. De plus, veuillez noter que la désaturation d'une image est no simplement pour faire du N&B mais pour certaines applications vous pouvez penser qu'ils sont équivalents.
J'ai mis à jour ce post avec plus de détails.
Moyenne
C'est la première chose qu'un étudiant peut image à faire pour convertir en échelle de gris (au moins ce que j'ai d'abord pensé dans le passé !) et il apparaît comme la désaturation :
level = (R + G + B) / 3
Il ne produit pas un mauvais résultat, il est rapide et facile à mettre en œuvre. Mais elle présente le gros inconvénient de ne pas correspondre à la façon dont les humains perçoivent la luminosité.
Luminance
Cette deuxième méthode (la luminance est parfois appelée Luminosité, Luma ou Intensité) est un meilleur modèle de la façon dont nos yeux perçoivent la luminosité. Elle se base sur le fait que densité du cône dans l'œil n'est pas uniforme d'une couleur à l'autre. Nous percevons le vert beaucoup plus fortement que le rouge et le rouge plus fortement que le bleu.
Étant donné que nous ne percevons pas toutes les couleurs avec la même intensité, la méthode de la moyenne est inexacte (du moins, elle ne produit pas un résultat qui ressemble à celui de la moyenne). naturel ). Comment gérer cela ? Il suffit d'utiliser une moyenne pondérée :
level = R * 0.3 + G * 0.59 + B * 0.11
Comme vous pouvez l'imaginer, ces valeurs font l'objet de nombreuses discussions. La recommandation originale de l'UIT-R proposait cette formule :
level = R * 0.2126 + G * 0.7152 + B * 0.0722
Si je ne me trompe pas, Photoshop utilise celui-ci pour son simple fonction de désaturation (oui, c'est la version non arrondie de la première) :
level = R * 0.299 + G * 0.587 + B * 0.114
Je ne pense pas que nous puissions noter une grande différence, de toute façon la recommandation a changé récemment, jetez un coup d'oeil ici sur Wikipedia pour plus de détails sur cette formule.
Voulez-vous plus de détails ? Lisez cet article de Charles Poynton : La réhabilitation du gamma et son FAQ sur ce sujet.
Désaturation
Vous avez chaque pixel décrit avec le Modèle de couleur RVB mais la saturation appartient à la Modèle de couleur HSL (en réalité, vous pouvez utiliser à la fois les modèles HSL ou HSV quand travail avec saturation). Veuillez lire le lien pour plus de détails sur ces modèles.
La désaturation d'une image comprend les étapes suivantes :
- Convertissez chaque pixel de RGB en HSL (cf. cet article si vous avez besoin de détails).
- Forcer la saturation à zéro (cela devrait être ce que
setSaturation(0)
ne)
- Reconvertissez-le en RVB (voir ceci signet ).
Laissez-moi vous présenter un grand Une simplification de ce processus : vous pouvez désaturer une couleur en trouvant le point médian entre le maximum de RVB et le minimum de RVB (la luminosité, vous vous souvenez qu'une couleur, dans l'échelle des couleurs, peut être désaturée en fonction de la luminosité). Espace couleur RVB est un point dans l'espace 3D ?). La formule (simplifiée) pour obtenir l'image désaturée est la suivante :
level = (max(R, G, B) + min(R, G, B)) / 2
Dé-composition
Une forme plus simple de désaturation, appelée parfois décomposition maximale locale choisit simplement la valeur maximale de chaque triplet RVB :
level = max(R, G, B);
Comme vous pouvez l'imaginer, vous pouvez utiliser à la fois le maximum local ou le minimum local (j'ai écrit local car il recherche le minimum/maximum pour chaque pixel).
Autres méthodes
N'oubliez pas que vous pouvez obtenir une image N&B (puis quelque chose qui ressemble à une image désaturée) de manière très rapide en conservant simplement un seul canal du triplet RVB (par exemple le canal vert) et en copiant cette valeur sur tous les canaux).
Parfois, les didacticiels de Photoshop n'utilisent pas ses fonctions pour désaturer une image (la fonction Désaturer et la palette de réglage) mais, pour obtenir de meilleurs résultats, ils ajoutent un calque avec une couleur uniforme (calculée avec des valeurs de Luminance ) et ils fusionnent ce calque avec l'image originale (cherchez un tutoriel et reproduisez ces étapes dans votre code).