Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

01.05.2015, 12:11

RGB-Farbe auf helligkeit überprüfen

Servus Leute,

ich arbeite gerade an einer Software, die unter anderem Farben erkennen muss. Dabei spielt es keine Rolle, ob hellblau, dunkelblau, oder "normal"blau.
Meine Frage ist nun: Wie gehe ich dabei vor, die Farbverhältnisse zu überprüfen? Ich arbeite mit RGB-Farben und dachte an Folgendes:
R=8, G=9, B=12

Jetzt habe ich noch eine Farbe:
R=98, G=99, B=102

Man merkt, dass die Differenz vom jeweiligen RGB-Wert gleich ist(100), deshalb ist es die gleiche Farbe nur heller.
Ist diese Denkweise korrekt?

MfG Taulinator

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

01.05.2015, 12:15

Nein, sie ist nicht korrekt. Die Helligkeit einer Farbe hängt bei Menschen vom Farbton ab. B=255 wird immer dunkler empfunden als G=255.
Die Formel für die Helligkeit (0..255) lautet daher:
R*0,299 + G*0,587 + B*0,114
Mehr Infos:
http://de.wikipedia.org/wiki/Grauwert
http://de.wikipedia.org/wiki/YCbCr-Farbmodell
Wie man erkennt, können ganz verschiedene Farben eine gleiche Helligkeit haben.
Wenn Du rausfinden willst, ob ein Pixel X dieselbe Sättigung oder den selben Farbton hat wie ein Pixel Y, nur in anderer Helligkeit, dann solltest Du dir das HSV-Farbmodell mal anschauen. Da bekommst Du nämlich raus welche "Farbe" etwas hat, wie hell/dunkel diese ist und mit welcher Sättigung.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BlueCobold« (01.05.2015, 14:18)


Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

3

01.05.2015, 12:24

Kommt drauf an, in welche Farben du unterscheiden willst. Wenn du nur nach rot, grün und blau unterscheiden willst, dann sollte die Vorgehensweise schon von Nützen sein. Solltest du aber auch andere Farben erkennen wollen, dürfte das wohl nicht ganz funktionieren.
Weiterhin ist wichtig zu bedenken, dass eine Farbe, auch wenn sie von den Zahlenwerten her dem Blau zugeordnet werden könnte, nicht unbedingt als blau wahrgenommen wird. (0, 0, 2) dürfte nach der Vorgehensweise ein Blauton sein, dürfte bei einer Darstellung auf einem Bildschirm nur schwer von schwarz zu unterscheiden sein und wahrscheinlich gar nicht als Blau zu identifizieren.

Du solltest auch gucken, ob die Bestimmung der Farbe mit anderen Farbräumen einfacher sein könnte. HSV und HSL verwenden beide einen Wert, der die Farbe darstellt. Um also zu prüfen, um welche "einfache" Farbe (bspw. Rot, Blau, Gelb, ...) es sich handelt, müsste also nicht mehr die Kombination von 3 Werten betrachtet werden, sondern nur noch 1 Wert.


Wie BlueCobold bereits beschrieben hat, wird die Helligkeit anders wahrgenommen, als man es anhand von RGB-Werten vermuten würde. Du solltest also prüfen, ob die Helligkeit der zu erkennenden Farbe _wirklich_ keine Rolle spielt.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

4

01.05.2015, 12:43

Und wo wir schon bei Farben sind, möchte man vielleicht auch über sRGB und Gamma-Korrektur sprechen. Ich habe mal kurz recherchiert, folgender Link sieht ganz ok aus:

http://www.cambridgeincolour.com/tutoria…-correction.htm

Insgesamt sind Farben ein echt kompliziertes Thema. Es gibt eine Menge über Wahrnehmung, Darstellung, Speicherung und vermutlich noch 20 andere Dinge zu reden. Viel Spaß damit, hehe.

Um was für eine Software geht es denn? Es hört sich nach einem Problem an, das auch andere haben könnten und dann gibt es mit Sicherheit schon ein paar Bibliotheken, die dir nicht nur eine Menge Arbeit abnehmen, dir vermutlich auch eine bessere Lösung anbieten, als du sie dir ausdenken könntest.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige