Heim >Backend-Entwicklung >C++ >Wie finde ich mithilfe verschiedener Abstandsmetriken die nächstgelegene Farbe in einem Farbarray?
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
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!