Colors - Eine Library für ... Farben

Yet another lib. Diesmal geht es um Farben.

DIe Library ist (bisher) recht übersichtlich. Eigentlich enthält sie nur eine ColorMap1D, mit der man einen double-Wert zwischen 0.0 und 1.0 auf irgendeine Farbe abbilden kann, und eine IndexedColorMap1D, die eine vorgegebene Farbpalette beschreibt.

Ich weiß, dass man bei Farben ziemlich weit gehen kann. Sowas wie GitHub - igd-geo/pcolor: perceptually uniform colour calculation in java, based on the CIECAM02 model and M.R. Luo's CAM-UCS geht ans eingemachte, und gibt einen Eindruck, wie shyce-kompliziert Farben tatsächlich sind. Die Namen der interfaces enden mit ...1D, weil… ja, 2D gibt’s auch noch (siehe GitHub - igd-iva/colormap-explorer: A tool for exploring 2D colormaps oder mein tolles, tolles Poster :roll_eyes: ).

Aber diese Library ist „pragmatisch“, in dem Sinne, dass sie nicht viel mehr abdecken soll, als das, was ich z.B. auch mal in

beschrieben habe: Ein paar Farben reinwerfen, irgendwie Interpolieren, und eine Farbpalette rausbekommen. Außerdem habe ich inzwischen 3 oder 4 Projekte, wo ich irgendeine Form von „Color Map“ jedes mal mit Copy+Paste reingewurschtelt habe. Das sollte jetzt überflüssig werden. Stattdessen gibt’s jetzt

<dependency>
    <groupId>de.javagl</groupId>
    <artifactId>colors</artifactId>
    <version>0.0.1</version>
</dependency>

Das einzige, was über die Interfaces hinaus geht, ist vielleicht, dass dort auch die ColorB…-Paletten drinstecken.

(Ich weiß nicht, ob man den Namen „ColorB…“ erwähnen darf - der Lizenztext ist da ein bißchen komisch…)

Das ist eine Anwendung, die man starten kann, und wo man eine Farbpalette auswählen kann, um dann unten sowohl den Code zu bekommen, mit dem man sich diese Palette als IndexedColorMap1D aus der Lib ziehen kann, als auch einen Array in dem die Farben drin sind, falls man sie mal braucht.

Das ist Version 0.0.1, also alles vorläufig, und eigentlich nur für den internen Gebrauch, aber vielleicht interessiert’s ja jemanden.

Mich interessiert das, auch weil ich mich selbst schon einmal daran versucht habe. Die meisten Informationen enden dazu beim Thema der einfachen Gammakorrektur und kehren alles was über ein Schwarz-Weiß Bild hinaus geht schön unter den Teppich.

Ich suche des längeren (passiv) eine Bibliothek die mir “menschlich wahrgenommene” Farben in physikalische Farben umrechnet - in RGB.
Menschlich logisch: 50[%] Rot + 50[%] Grün + 0[%] Blau = 100[%] Orange
Tatsächlicher elektrischer Strom: 100[%] Orange = 75(%) Rot | 43(%) Grün | 2(%) Blau
[%] wahrgenommene Helligkeit
(%) elektrischer Strom

Die Werte sind erfunden, aber nicht frei erfunden.

Bisher implementiere ich eine einfache 1D Look-Up-Table aber das Ergebnis im RGB Bereich ist mies. Kannst du und deine App - oder der Sourcecode davon - helfen?

Kehr’ um, solange du noch kannst!!! :astonished:

Naja :wink: mal im Ernst: Das ganze ist richtig, richtig, richtig kompliziert.

Diese Lib ist wirklich sehr trivial, und enthält (bisher) nichts, was mit all dem zu tun hat, was sich die Leute da zum Thema Farbmetriken schon alles ausgedacht haben. Die Library lebt vollkommen in der trivialen RGB-Welt, und schert sich nicht um (andere) Farbräume, Gammakorrekturen, Farbmodelle oder Wahrnehmung. Das ist auch ganz klar nicht ihr Ziel. Ich will da nur ein paar RGB-Farbpaletten zusammenklöppeln.

Aber ich weiß, wie kompliziert Farben sind - wenn auch nur im klassichen Sinne von „Ich weiß, dass ich nichts weiß“. Schon sowas simples wie eine „Distanz“ zwischen zwei Farben auszurechnen ist schwierig bis unmöglich. Dazu hatte ich hier schonmal was geschrieben:

Da ist auch ein Disclaimer in der Einleitung. Und dort habe ich auch schon das erwähnt, was aus fachlicher sicht der Einstiegspunkt zum Thema Farbwahrnehmung sein könnte:

(Die scheinbare Willkür, mit der da Farbwerte mit -0.07868 multipliziert werden oder 0.73 in irgendeinem Exponenten steht erscheint einfach nur haarsträubend… :dizzy_face: )

Aus eher technischer/implementierungssicht: Wenn ich irgendwas mit „Farbwahrnehmung“ machen müßte, würde ich bei dem hier anfangen:

Das basiert auf einer Open-Source-Library namens „Painterly“, wo CIECAM02 mal implementiert wurde (leider ist die Original-Lib nicht mehr so leicht zu finden).

Alles klar. Ist auch nicht so wichtig, es ist “gut genug”.