PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RGB in HLS?


aths
2004-09-23, 14:38:49
Wie wandelt man RGB in HLS um, und umgekehrt? Die Formel sollte voll reversibel sein, also bei Konvertierung von Byte RGB zu Single HLS bei der Umkehrrechnung wieder den genau gleichen RGB-Wert zurückliefern.

Zweites Problem: Soll linear umgerechnet werden (RGB fließen gleich stark in die Helligkeit ein) oder sollte Grün höher gewichtet werden? Im Hintergrund steht der Vergleich von Farben mit Referenzfarben (ein RGB-BMP soll auf eine Referenzpalette reduziert werden, wobei jedoch der Aspekt des Farbtons ausschlaggebend sein soll, Sättigung spielt eine etwas kleinere Rolle, Helligkeit soll praktisch unbedeutend sein.)

Sofern man mit einem Polynom wichtet, verliert man da nicht die eigentlich wichtige Linearität beim Vergleich?

ScottManDeath
2004-09-23, 15:07:36
Ob es reversibel ist weiss ich nicht.


http://www.undu.com/DN971201/00000021.htm

http://www.efg2.com/Lab/Graphics/Colors/HSV.htm

Die vom zweiten Link habe ich genutzt (HSL 2 RGB) da das .NET Framework dummerweise nur RGB 2 HSL unterstützt und die andere Konversionsfunktion fehlt.


Helligkeit eines RGB Tripels ist

l = (0.30, 0.59,0.11) dot (r,g,b)

Damit werden die Farbekomponenten entsprechend der Wahrnehmung gewichtet.

aths
2004-09-23, 15:19:04
Helligkeit eines RGB Tripels ist

l = (0.30, 0.59,0.11) dot (r,g,b)

Damit werden die Farbekomponenten entsprechend der Wahrnehmung gewichtet.Ja, aber dein erstes Programmbeispiel nutzt eine andere Wichtung, wenn ich das richtig sehe (20% 60% 20%) Das zweite scheint gar nicht zu wichten.

Allerdings weiß ich noch nicht, wie wichtig eine vollständige Konvertierung für mein Problem ist. Muss mal Rücksprache halten, ob es für Sättigung eine besonderer Toleranz geben soll. Ansonsten könnte Farbwinkel, Helligkeit und RGB-Abweichung jeweils gewichtet in den Fehler eingehen.

ScottManDeath
2004-09-23, 17:43:46
Diese Diskrepanz mit den Gewichtungsfakoren ist mir auch aufgefallen ;)
Für RGB <-> HSV nehme ich den Code, die anderen Gewichtungsfaktoren nehme ich wenn ich z.B. im Pixelshader mal fix die Helligkeit brauche.

Xmas
2004-09-23, 20:05:45
Es gibt keine allgemeingültigen Gewichtungsfaktoren, die hängen vom verwendeten Monitor ab. Diese Faktoren (0.30, 0.59, 0.11) sind AFAIK NTSC-Standard.

Haarmann
2004-09-26, 11:26:49
aths

Nimm die RGB Werte und nutz sie als fixed Point.

aths
2004-09-26, 14:27:57
aths

Nimm die RGB Werte und nutz sie als fixed Point.Wie hilft das beim Problem weiter, wenn man das HSL-Format braucht?

Trap
2004-09-26, 15:41:03
Wenn du die Umrechnung mit Festkomma implementierst dürfte sie schneller sein.

aths
2004-09-26, 18:33:40
Wenn du die Umrechnung mit Festkomma implementierst dürfte sie schneller sein.... und ungenauer. Bei Multiplikationen könnte man vom Wertebereich her Probleme kriegen. Ich werd aber mal sehen, ob sich da was optimieren lässt.