Maison >développement back-end >C++ >Comment trouver la couleur la plus proche dans une gamme de couleurs à l'aide de différentes mesures de distance ?

Comment trouver la couleur la plus proche dans une gamme de couleurs à l'aide de différentes mesures de distance ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-30 20:23:13213parcourir

How to Find the Closest Color in a Color Array Using Different Distance Metrics?

Comment déterminer la couleur la plus proche dans un tableau de couleurs

Introduction

Trouver la la couleur la plus similaire au sein d’un tableau peut être une technique utile dans diverses applications. Cette question explore trois méthodes pour mesurer la similarité des couleurs et récupérer l'indice de la correspondance la plus proche.

Méthodes

Méthode 1 : Comparaison des teintes

En considérant uniquement la teinte (la nuance de couleur), cette méthode trouve la teinte la plus proche de la couleur cible. Il ignore la saturation et la luminosité.

int closestColor1(List<Color> colors, Color target)
{
    var hue1 = target.GetHue();
    var diffs = colors.Select(n => getHueDistance(n.GetHue(), hue1));
    var diffMin = diffs.Min(n => n);
    return diffs.ToList().FindIndex(n => n == diffMin);
}

Méthode 2 : Distance spatiale RVB

Cette méthode mesure directement la différence de valeurs RVB entre la couleur cible et chaque couleur dans le tableau.

int closestColor2(List<Color> colors, Color target)
{
    var colorDiffs = colors.Select(n => ColorDiff(n, target)).Min(n => n);
    return colors.FindIndex(n => ColorDiff(n, target) == colorDiffs);
}

Méthode 3 : pondérée Distance

Cette méthode intègre la teinte, la saturation et la luminosité pour évaluer la similitude. Le composant de teinte a un poids plus élevé par défaut.

int closestColor3(List<Color> colors, Color target)
{
    float hue1 = target.GetHue();
    var num1 = ColorNum(target);
    var diffs = colors.Select(n => Math.Abs(ColorNum(n) - num1) +
                                   getHueDistance(n.GetHue(), hue1));
    var diffMin = diffs.Min(x => x);
    return diffs.ToList().FindIndex(n => n == diffMin);
}

Fonctions d'assistance

  • getBrightness : calcule la luminosité des couleurs perçue.
  • getHueDistance : Détermine la différence de teinte entre deux couleurs.
  • ColorNum : pèse les composants de saturation et de luminosité.
  • ColorDiff : calcule l'espace colorimétrique RVB distance.

Utilisation

int indexInArray = closestColor1(clist.ToList(), someColor);

Conclusion

Le choix de la méthode dépend des exigences spécifiques de la demande. Pour les comparaisons basées sur les teintes, la méthode 1 est suffisante. La méthode 2 mesure la distance RVB, tandis que la méthode 3 fournit un calcul de distance pondéré prenant en compte toutes les propriétés de couleur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn