Heim >Backend-Entwicklung >C++ >Wie finde ich mithilfe verschiedener Abstandsmetriken die nächstgelegene Farbe in einem Farbarray?

Wie finde ich mithilfe verschiedener Abstandsmetriken die nächstgelegene Farbe in einem Farbarray?

Linda Hamilton
Linda HamiltonOriginal
2024-12-30 20:23:13215Durchsuche

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

So bestimmen Sie die nächstliegende Farbe in einer Reihe von Farben

Einführung

Finden der Die Bestimmung der ähnlichsten Farbe innerhalb eines Arrays kann in verschiedenen Anwendungen eine nützliche Technik sein. In dieser Frage werden drei Methoden untersucht, um die Farbähnlichkeit zu messen und den Index der größten Übereinstimmung abzurufen.

Methoden

Methode 1: Farbtonvergleich

Wenn nur der Farbton (der Farbton) berücksichtigt wird, findet diese Methode den Farbton, der der Zielfarbe am nächsten kommt. Sättigung und Helligkeit werden ignoriert.

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

Methode 2: RGB-Raumabstand

Diese Methode misst direkt den Unterschied der RGB-Werte zwischen der Zielfarbe und jeder Farbe in das Array.

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

Methode 3: Gewichtet Abstand

Diese Methode berücksichtigt Farbton, Sättigung und Helligkeit, um die Ähnlichkeit zu messen. Die Farbtonkomponente hat standardmäßig ein höheres Gewicht.

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

Hilfsfunktionen

  • getBrightness: Berechnet die wahrgenommene Farbhelligkeit.
  • getHueDistance: Bestimmt die Farbtonunterschied zwischen zwei Farben.
  • ColorNum: Gewichtet die Sättigungs- und Helligkeitskomponenten.
  • ColorDiff: Berechnet den RGB-Farbraum Entfernung.

Anwendung

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

Fazit

Die Wahl der Methode hängt von den spezifischen Anforderungen ab die Anwendung. Für farbtonbasierte Vergleiche ist Methode 1 ausreichend. Methode 2 misst den RGB-Abstand, während Methode 3 eine gewichtete Abstandsberechnung unter Berücksichtigung aller Farbeigenschaften bietet.

Das obige ist der detaillierte Inhalt vonWie finde ich mithilfe verschiedener Abstandsmetriken die nächstgelegene Farbe in einem Farbarray?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn