Der Martin: Ähnlichkeit von Farben beurteilen

Beitrag lesen

Hallo,

ich möchte um eine gegebene Farbe herum, zum Beispiel #e00000, einen Radius bilden und hellere, sowie dunklere und ähnliche Farben mit berücksichtigen.

das hört sich doch "auf den ersten Blick" einfach an. Letztendlich brauchst du also einen Algorithmus (mit 'i'!), der dir bei zwei gegebenen Farben einen Differenz- oder Ähnlichkeitswert liefert. Das hat im Prinzip nichts mit der Programmiersprache zu tun; ich habe deshalb mal den Themenbereich geändert.

Ich habe schon in diversen Suchmaschinen nach Ansätzen gesucht, aber nichts gefunden, was mir weiterhilft. Gibt es einen Algorythmus, um "benachbarte" Farbwerte zu generieren?

Willst du Farbwerte generieren, oder vorgegebene Farben beurteilen?

Im Endeffekt soll es möglich sein, eine Farbsuche in einer DB durchzuführen und dabei sich nicht nur auf exakt einen Farbwert zu beschränken, sondern mit einer gewissen Toleranz. Als Betrachter empfindet man ja benachbarte Farben ebenfalls als dazugehörig.

Ja. Und du hast keine Idee, wie man das angehen könnte?

Man kann natürlich fürs erste mal im RGB-Farbraum bleiben und festlegen, dass zwei Farben als "ähnlich" gelten, wenn ihre RGB-Komponenten jeweils um nicht mehr als x voneinaner abweichen. Je nachdem wie groß x gewählt wird, machst du den Ergebnisbereich größer oder kleiner.
Ich könnte mir aber vorstellen, dass man die visuelle Ähnlichkeit von Farben im HSL-Modell besser beurteilen kann.

In beiden Fällen hast du aber drei Farbkomponenten, bei denen du paarweise die Differenz bilden und diese drei Differenzen dann betragsmäßig aufsummieren musst. Um dem menschlichen Sehen besser gerecht zu werden, könntest du noch Gewichtungsfaktoren einführen; so kann das Auge Grün-Nuancen besser unterscheiden als z.B. Rot (im RGB-Farbraum), und Farbtonunterschiede besser als etwa Sättigungsunterschiede (im HSL-Farbraum).

So long,
 Martin

--
"Life! Don't talk to me about life!"
  (Marvin, the paranoid android in Douglas Adams' "The Hitchhiker's Guide To The Galaxy")
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(