Farbähnlichkeit zweier RGB-Werte ermitteln

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Farbähnlichkeit zweier RGB-Werte ermitteln

Beitrag von Thorium »

Kennt jemand einen Weg die Farbähnlichkeit zwischen 2 RGB-Werten zu ermitteln? Am besten wäre es, wenn die Farbähnlichkeit als Zahl ermittelt wird, desdo höher die Zahl, desdo unähnlicher sind sich die Farben, bei Null liegen 2 exakt gleiche Farben vor.

Ich brauche das, da ich eine automatische Konvertierung von Bildern auf eine fixe Farbpalette in einem meiner Programme benötige.

Mein Ansatz war jetzt erstmal die Differenz der einzelnen Kanäle zueinander zu ermitteln und die Differenzen der 3 Kanäle (RGB) dann zusammenzurechnen. Desdo höher der Wert desdo unähnlicher sind sich die Farben. Ist im Prinzip auch nicht falsch aber suboptimal. Es geht dabei ja um den optischen Eindruck.

Kleines Beispiel wo es hakt: Ich habe einen Pixelfarbwert von 50,60,40 vorliegen. Nun ist es so das mehrere Farbwerte die gleiche Farbähnlichkeit haben. z.B. 40,50,30 hätte Farbähnlichkeit 30 und 80,60,40 ebenfalls 30. Aber ersterer Wert würde im Bild besser aussehen, da es die gleiche Farbe fürs Betrachterauge ist, nur etwas dunkler. Wobei die andere Farbe mehr ins Rot geht.

Hoffe ihr versteht was ich meine, wenn nicht einfach nochmal nachfragen. Ich brauch nicht unbedingt einen fertigen Code, nur einen Lösungsweg der halbwegs elegant ist.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

du könntest die quadratische Abweichung berechnen. Wenn ein einzelner Wert stärker abweicht, fällt dieser damit auch stärker ins Gewicht.

50,60,40
40,50,30 -> -10-10-10 -> 30
80,60,40 -> +30+0+0 -> 30

50,60,40
40,50,30 -> -10²-10²-10² -> 300
80,60,40 -> +30²+0+0 -> 900

Differenz beim zweiten ist größer.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

gnasen hat geschrieben:du könntest die quadratische Abweichung berechnen. Wenn ein einzelner Wert stärker abweicht, fällt dieser damit auch stärker ins Gewicht.

50,60,40
40,50,30 -> -10²-10²-10² -> 300
80,60,40 -> +30²+0+0 -> 900

Differenz beim zweiten ist größer.
Sehr gute Idee, das werde ich gleich mal umsetzen. :allright:
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Du könntest auch alle RGB-Farben zuerst in das HSV-Farbmodell umrechnen
und diese dann vergleichen. Da kann man dann besser entscheiden, ob man
Farbton, Sättigung oder Hellwert stärker ins Gewicht fallen lässt.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

NicTheQuick hat geschrieben:Du könntest auch alle RGB-Farben zuerst in das HSV-Farbmodell umrechnen
und diese dann vergleichen. Da kann man dann besser entscheiden, ob man
Farbton, Sättigung oder Hellwert stärker ins Gewicht fallen lässt.
Hm, ja werde ich wohl nicht drumm rumm kommen. Das Ergebnis ist zwar mit gnasens Idee schon merkbar besser. Aber es gibt noch ein paar unschöne Effekte. Bei einem Bild z.b. wird ein Braun durch ein Blau ersetzt. Das macht zwar tatsächlich Sinn von den Zahlen her, sieht aber natürlich Mist aus. Da gibts passendere Töne in der Palette. Muss mich wohl noch eingehender mit dem Thema beschäftigen.

Die Schwierigkeit ist, das die Palette nur 32 Farben hat. :mrgreen: Also viel mit Variationen ist da nicht und deshalb liegt der Algo auch manchmal so blöd daneben.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Hast du 32 Feste Farben?
Dann wäre es ja vielleicht zu überlegen per Hand die passenden Bereiche anzugeben.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

da die RGB-Farben ja einen Raum darstellen (Würfel 255*255*255) würde ich auch den Farbunterschied als (normierten) Abstand in diesem Farbwüfel nehmen, also:

Code: Alles auswählen

Procedure.f DistanceRGB(Color1, Color2)
 ProcedureReturn Sqr( Pow(Red(Color1)-Red(Color2),2) + Pow(Green(Color1)-Green(Color2),2) + Pow(Blue(Color1)-Blue(Color2),2) ) / Sqr(255*255*3)
EndProcedure

; Komplementärfarben
Debug DistanceRGB($000000, $FFFFFF) ; schwarz - weiß (~1.00)
Debug DistanceRGB($00FF00, $FF00FF) ; grün - violett (~1.00)

; Farbarten
Debug DistanceRGB($FF0000, $00FF00) ; blau - grün    (~0.82)

; Kontranstunterschied
Debug DistanceRGB($FF0000, $808080) ; blau - grün    (~0.50)

; Helligkeitsunterschied
Debug DistanceRGB($FF0000, $800000) ; blau - grün    (~0.29)
die größte Differenz (1.00) tritt bei Komplementärfarben auf, wobei hingegen Helligkeiten relativ geringe unterschieden haben ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Batze hat geschrieben:Hast du 32 Feste Farben?
Dann wäre es ja vielleicht zu überlegen per Hand die passenden Bereiche anzugeben.
Ja, die Farben sind fest. Es geht dabei um den Import von Charakterportrais in ein altes DOS-Spiel.

Gleich mal Stargates Variante ausprobieren. :D
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

also die 16 grundfarben plus 16 grautöne?

... da würde ich vielleicht noch eher konkret spezialisieren anstatt groß zu vergleichen.
du hast da ja im grunde nur die sechs spektralfarben in zwei helligkeiten, und der rest sind grautöne, oder?

wenn deine Pics mehr als 32² groß sind, solltest du wohl auch eher dithern...

gibts für genau so nen zweck - import von bildern auf die alten 32 farben -
nicht vielleicht irgendwelche werkzeuge auf DOS-freaks seiten oder so?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Stargate: Du bist mein Held! :allright:
Mit deiner Methode sieht das Bild super aus! Ich würde sogar sagen absolut optimal! Vielen vielen Dank dafür, das hat mir jetzt ordentlich Zeit gespart. Ich mach grad mal noch ein paar Screenshots, das ihr seht worum es geht.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Antworten