4 Stimmen

Wie findet man ein "ausreichend unterschiedliches" RGB?

Angenommen, Sie erhalten eine Farbe in Form von RGB, gibt es einen Weg, um programmatisch festzustellen, ob sie ausreichend von einem anderen RGB abweicht.

Angenommen, ich möchte testen, ob Farben mindestens 30% voneinander entfernt sind, wie mache ich das? Oder anders ausgedrückt, wie kann ich eine Farbe erzeugen, die sich ausreichend von einer anderen Farbe unterscheidet?

7voto

andrew cooke Punkte 43891

Dies ist ein Minenfeld, weil die menschliche optische Verarbeitung furchtbar unordentlich ist. Aber worum es geht, ist Farbunterschied - auf dieser Seite werden verschiedene Formeln angegeben, die verwendet werden können, um verschiedene Werte zu berechnen, die den "Unterschied" zwischen zwei Farben darstellen.

[Update] und hier ist ein Online-Rechner, der anscheinend diese Unterschiede für Sie berechnen wird (es ist kompliziert und Links ändern nicht die URLs, sodass es schwer ist zu verlinken, aber wenn Sie herumklicken, ergibt es vielleicht einen Sinn....)

2voto

Shahbaz Punkte 44492

Dies ist sehr subjektiv. Ich persönlich denke jedoch, dass deine beste Chance darin besteht, Farbton-Sättigung-Helligkeit (HSL oder HSV) zu verwenden und versuchen, einen Wert aus dem Unterschied in den Werten zu erhalten. Zum Beispiel so etwas wie:

wert = a*abs(H1-H2)+b*abs(S1-S2)+c*abs(L1-L2);

und versuchen, mit Versuch und Irrtum die besten a, b und c Konstanten zu finden, die die Farben in derselben Menge differenzieren, wie es dein menschliches Urteilsvermögen tut. Wenn du lineare Regression kennst, könntest du einige Beispielfarben mit den von dir zugewiesenen Unterschieden haben und die Werte für a, b und c mit linearer Regression erhalten.

Eine geeignetere Formel könnte Unterschiede in der Potenz von 2 anstelle von abs enthalten und noch wichtiger Werte für a, b und c als Funktionen der Farben selbst anstelle von Konstanten.

1voto

woliveirajr Punkte 9353

Ich denke, es ist dasselbe Problem, das Sie vor einigen Stunden mit den Farben in einer anderen Frage hatten. Lesen Sie über HSV (oder HSL) in Wikipedia http://de.wikipedia.org/wiki/HSL\_und\_HSV: wenn Sie RGB -> HSV übertragen, ist der H-Wert die Farbe, S und V sind andere Eigenschaften.

Wenn Sie den Abstand zwischen Farben wissen möchten, messen Sie einfach den H-Wert. Wenn Sie ihn auf eine 360-Grad-Notation umstellen, reichen 30 Grad aus, um sehr unterschiedliche Farben zu erhalten.

Wenn Sie es in RGB-Farben wissen möchten, wird es etwas schwieriger: Die Werte R, G und B können zu einer grauen "Farbe" führen, die nicht genau eine Farbe ist.

-1voto

William Grobman Punkte 232

Behandeln Sie den RGB-Wert als Punkt und verwenden Sie die Distanzformel aus der Geometrie.

Entfernung = ( (R2-R1)^2 + (G2-G1)^2 + (B2-B1)^2 )^.5
Entfernung > Mindestwert

Im Falle eines gewünschten Unterschieds von 30 % den Mindestwert festlegen = die Entfernung des Punkts_1 * .3 vom Ursprung, d. h. .3( (R1)^2 + (G1)^2 + (B1)^2 )^.5

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X