Hallo,
ich habe ein Diagramm, in dem viele Kurven angezeigt werden und möchte
nun n-Farben mit dem am größten wahrnehmbaren Unterschied herausfinden.
Wie kann ich das am Besten machen? Unten ist ein Python-Script, dass das
Problem mathematisch löst. Leider klappt das in der Realität nicht
wirklich. Die Farben sind sich zu ähnlich (s. Anhang).
Nach etwas googeln habe ich etwas von einem Lab-Farbraum und Delta E
gelesen. Gibt es da evtl. noch einen leichteren Weg?
1
fromTkinterimport*
2
importmath
3
4
master=Tk()
5
6
max=16777216
7
count=30
8
schrittweite=max/count
9
printschrittweite
10
11
x=0
12
y=0
13
forindexinrange(0,count):
14
schritt=index*schrittweite
15
r=schritt%256
16
temp=schritt/256
17
temp=round(temp,0)
18
g=temp%256
19
temp=temp/256
20
temp=round(temp,0)
21
b=temp%256
22
23
#bfarbe = "#%02x%02x%02x" % (r, g, b) #Algorithmus 2
An L*a*b* führt wohl kein Weg vorbei: Du brauchst einen Farbraum, in dem
gleiche (euklidische) Abstände gleichen wahrgenommenen Farbunterschieden
entsprechen.
Dann willst du n Kugeln so platzieren, daß
• ihre Mittelpunkte in L*a*b* liegen
• die Kugeln sich nicht überschneiden
• alle Kugeln gleichen Radius R haben
• R möglichst groß ist
Viel Spaß beim Suchen nach dieser Kugelpackung :-)
Der Ansatz mit Farbraum und Kugeln klingt ja schon mal nicht schlecht.
Allerdings ist der Hintergrund der Anfrage ja ein ganz praktischer.
Daher würde ich folgenden praktischeren Ansatz testen:
Als Farbraum würde ich RGB wählen. Den Stellen wir uns als Würfel vor.
Je nach Anzahl der Farben, die ich brauche, beginne ich nun, die Ecken
dieses Würfels zu besetzen. Falls ich mehr Farben benötige, teile ich
den Raum durch Einziehen von Ebenen. Heraus kommen neue Schnittpunkte,
welche die nächsten Farben darstellen. Drei neue Ebenen jeweils in der
Mitte plaziert unterteilen den Raum in acht Würfel, welche 27 Farben
ergeben. Für mehr Farben die Unterteilung weiter verfeinern.
...übrigend sind nicht n Farben zu verteilen, sondern mindestens n+1:
• Farbe n+1 für den Hintergrund. Diese Farbe ist fix im Farbraum,
belegt zB ein Gebiet um den Weißpunkt
• Neben einer reservieten Farbe für den Hintergrung gibt es evtl. noch
weitere, etwa Schwarz für Koordinatensystem und Bemaßung.
Gibt es ein Bild wie so ein Plot aussehen soll?
Was sind "viele Kurven"? 10? 100? 1000?
Mit RGB wird man nicht weit kommen, aber einen ähnlichen Ansatz kann man
für L*a*b* machen: Der Raum ist ja beschränkte Teilmenge des R³. Man
wählt also eine Zerlegung in Teilintervalle (Würfel) und testet für
jeden Würfel, ob sein Mittelpunkt (der Symmetriepunkt) in L*a*b liegt.
Wenn nicht, verfeinert man die Würfelung
Wenn man den ganzen L*a*b Farbraum als Grundlage für die Palette nimmt,
wird das nicht so richtig funktionieren, weil sich, je nach
Display-Technologie, nur ein Teil der Farben des Farbraumes realisieren
läßt.
Guter Punkt!
Soll das Diagramm dann auch ausgedruckt werden? Dann hätten wir das
nächste Problem, denn diese Drucker arbeiten praktisch alle in
CMJK-Farbsystem und s/w wollen wir auch nicht vergessen! Außerdem
bevorzugen unterschiedliche Leute verschiedene Hintergrundfarben!
Ich würde wirklich erstmal bei Win und Mac auf die Suche gehen. Das ist
sicherlich schon genug Vorarbeit mal gemacht worden! Momentan fällt mir
die Buntstifte-Farbpalette auf dem Mac ein. LAB-Farbraum ist dort auch
auswählbar.
Hallo,
in den meisten Bildbearbeitungsprogrammen ist zur Farbauswahl wahlweise
eine Kreisdarstellung verfügbar, wobei die Farben im Kreis angeordnet
sind - den Kreis kannst du ja in n Abschnitte unterteilen. Befriedigend
wird das wohl nie, weil das Ganze recht subjetiv ist, und weil es auch
eigentlich keine Abstandsfunktion für Farbe gibt - meiner Ansicht nach
lässt sich die Frage, ob sich Rot nun mehr von Blau oder von Grün
unterscheidet, garnicht beantworten.
Gruss Reinhard
Ich würde doch besser den Cie-LAB-Farbraum nehmen, wenn es auf die
Wahrnehmung ankommt - denn der berücksichtigt bereits die
physiologischen Parameter des menschlichen Sehens, was bei RGB so nicht
der Fall ist.
Mathematisch führt das über XYZ zu Cie-LAB, wobei bei den
Koeffizientenmatritzen der Weisspunkt (Farbtemperatur) zu brücksichtigen
ist.
Darüber hinaus ist ein Unterfangen, welches verlässlich auf Wahrnehmung
beruht, ohnehin nur mit einem kalibrierten und profilierten Bildschirm
sinnvoll.
In dessen so festgestelltem und beschriebenen Farbraum werden dann die
anzuzeigenden Farben hineingemappt. Dazu wiederum gibt es die Strategien
farbmetrisch relativ und absolut sowie perzeptiv und Sättigung. Ich
würde in diesem Falle perzeptiv bevorzugen, da wird immer der Farbraum
voll ausgenutzt ...
Interessant, wie unterschiedlich das persönliche Wissen so ist. Wenn ich
mir die letzten zwei Postings so ansehe.
Natürlich gibt es maximale "Abstandsfunktionen"! Eine ist das
allbekannte s/w-Bild, eine andere CMYK. Aber so auf die Schnelle kann
ich keine Funktion angeben. Ich habe zwar mit Kalibrierung von
Drucksystemen zu tun gehabt, aber so tief war ich dann doch nicht drin.
Mir fiel bei den Firmen allerdings auf, daß das Wissen dort sehr bedeckt
gehalten wird.
Schau mal bei Pantone. Eine der Skalen ist eventuell so getrimmt. In
Photoshop reingucken.
Oder einfach mal einen Grafiker oder Drucker fragen. Die lernen das
schließlich.
Abdul K. schrieb:> Natürlich gibt es maximale "Abstandsfunktionen"! Eine ist das> allbekannte s/w-Bild
Was in aller Welt soll ein Schwarz/Weiss-Bild über den Abstand von
Farben aussagen? Es gibt unendlich viele Farben, die den gleichen
Grauwert erzeugen, und die üblichen Umrechnungsformeln geben nichts
anderes wieder als die übliche spektrale Empfindlichkeit von
Filmmaterial - was vollkommen willkürlich ist, schliesslich gibt es in
der Natur garkein Schwarzweiss.
Aber das Maul aufreissen über mangelnde Kenntnisse anderer.
> Ich habe zwar mit Kalibrierung von> Drucksystemen zu tun gehabt, aber so tief war ich dann doch nicht drin.> Mir fiel bei den Firmen allerdings auf, daß das Wissen dort sehr bedeckt> gehalten wird.
Es genügt nicht, dass einem nichts gesagt wird - man muss auch unfähig
sein, es zu verstehen.
Gruss Reinhard
Was hast du eigentlich gegen mich?
Schwarz-Weiß ist schlicht der maximale Kontrast einer einstrahligen
Bildröhre. Das mag kurios klingen. Vielleicht erinnert sich noch einer
an die amberen teuren Monitore vor 30 Jahren. Ein s/w Laserdrucker wäre
ein weiteres Beispiel.
"Farben" gibt es auch in der Natur nicht. Sie entstehen erst im Gehirn
durch Verarbeitung der Sinnesreize der Zäpfchen. Diese wiederum haben
jeweils unterschiedliche Empfindlichkeitskurven und die sind auch noch
von anderen Dingen abhängig, u.a. Helligkeit, Erregungszustand,
hormonellen Schwankungen, Geschlecht (Frauen haben meist mehr Auflösung
von Rot-Tönen (Der Grund soll die häufige Mischgenetik sein, da zwei
X-Chromosomen vorhanden), und vermutlich noch mehr. Reptilien und ihre
Ableger haben z.B. 4 Zäpfchen. So sehen Greifvögel die Pißspur von
Mäusen und brauchen dann nur noch warten.
Dann gibts noch die Stäbchen, die Hell-Dunkel wahrnehmen. Am Außenrand
der Netzhaut sind nochmal andere Sensoren, die auf das vegetative
Nervensystem einwirken und Fluchtreflexe auslösen.
Ja ja, keine Ahnung. Behalte es einfach für dich! Wenn du Defizite hast,
dann lese einfach <in anderen Quellen; ich bin dir ja zu doof>! Die
anderen deinigen Defizite kann man allerdings durch Bildung kaum ändern.
So, und nun geh dich beschweren!
nachdem der TO weggestorben ist, werden wir wohl nie erfahren was
(vorallem wieviele Farben, und worauf ausgegeben)
dass man sich bei der Berechnung nur auf den zur Verfügung stehenden
Farbraum (bei s/w Laserdrucker eben nur grau-stufen, am Bildschirm einen
eingeschränkten Farbraum..) beschränken muss sollte in zwischen klar
sein
warum die frage jetzt so schwer zu beantworten ist, liegt vermutlich
daran,dass es überhaupt nicht sinnvoll ist, mehr als zb. 10 Farben zu
verwenden
(da sich der Mensch dann aufgrund der ANZAHL einfach schon extrem schwer
tut irgenwas sinnvolles abzulesen)
(deshalb eher Filtermöglichkeiten einbauen, die immer nur bestimmte
kurven anzeigen)
deshalb wird sich auch kaum jemand damit beschäftigen
aber wie weiter oben steht, muss man vermutlich möglichst viele kugeln
in den Farbraum bringen (sodass der Mittelpunkt noch im Farbraum ist)
(bei s/grau/w ist es etwas einfacher ;-)
Da sind ja doch noch einige Antworten gekommen.
Wegen Krankheit konnte ich leider nicht früher in den Thread sehen.
Zu den Rahmenbedingungen:
- ca. 30 Farben
- Anzeige am Monitor
Alle Kurven gleichzeitig anzuzeigen hat den Sinn, dass man "Ausreißer"
schnell erkennen und zuordnen soll. Normalerweise liegen die Kurven sehr
nah beieinander. In einem Fehlerfall liegt der jeweilige Punkt auf der
X-Achse und durch die Vektorisierung und der gut zu unterscheidenden
Farbe soll dieser Fehlerfall schnell zuzuordnen sein.
Um tatsächliche Werte ablesen zu können, ist die Anzeige aller Kurven
natürlich unsinnig.
Ich werde mal den Ansatz der Kugeln verfolgen.
Danke übrigens für den Hinweis der Hintergrundfarbe. Die habe ich nicht
berücksichtigt.
Hans Mayer schrieb:> Was hast du eigentlich gegen mich?
Wieso fragst du das? Du hast dich doch abfällig über meine Kenntnisse
geäussert. Das wäre selbst dann unfein, wenn deine Schwarzweisstheorie
einen sinnvollen Beitrag geleistet hätte für die ursprüngliche
Fragestellung.
Gruss Reinhard
Kurze Form: Weil du dich in deinem Verhalten mir gegenüber wiederholst.
Scheinst dünnhäutig zu sein. Ungeeignet für Foren.
Lange Form:
Das war nicht abfällig. Es war einfach ein gutes Beispiel wie
unterschiedlich die Vorkenntnisse im Durchschnitt sind. Du bist dabei
eben das Negativbeispiel, ein anderer war positiv besetzt.
Mir fällt das grundsätzlich im Bereich GUI der diversen Programme auf.
Es gibt da noch weitere Punkte. Würde aber hier zu weit führen.
Wie war das mit der Psychologie. Ach ja, man soll die Leute persönlich
ansprechen: Also, deine Kenntnisse sind auf diesem Gebiet mangelhaft und
du kannst dir gutes Tun, wenn du auf diesem Gebiet belesener wirst.
Wenn du persönlich anderer Meinung bist, dann kanns du das gern kundtun
<was bereits geschah>. Es ist deine Sache.
Eine ganz einfache gleichverteile Farbverteilung liefert auch HSV/HSL.
Teile den Wert für H (aus [0, 360]) in N gleiche Abschnitte. Das wäre
eine "angenäherte" Lösung zum CIE-LCh-Farbraum, aber sehr einfach zu
Programmieren. http://de.wikipedia.org/wiki/HSV-Farbraum
>Teile den Wert für H (aus [0, 360])
und was ist mit S und V
beides 100%
dann wäre in deinem Beispiel nicht mal irgenwas in der nähe von Weiß
oder Schwarz im Ergenis vertreten, ..
IMHO ist die lösung die selbe wie oben schon mehrfach steht:
möglichst viele Kugeln, deren mittelpunkt im Kegel liegen muss:
http://de.wikipedia.org/w/index.php?title=Datei:HSV_cone.jpg&filetimestamp=20050904031115
Unterschiedliche Helligkeitswerte sind irritierend. Also ich würde daher
auch die Oberfläche bzw. eine Ebene bevorzugen, auf der dann die Farben
gleichförmig geteilt am Rand, benutzt werden.
Farben, die durch gleichmäßig verteilte RGB- oder HSV-Zahlenwerte
repräsentiert werden, werden vom menschlichen Sehapparat noch lange
nicht als gleichäßig entfernt wahrgenommen.
DAS leistet wirklich nur der Cie-LAB-Farbraum - Stichwort
"Gleichabständigkeit". Den relativ hohen mathematischen Aufwand leistet
man sich doch nicht aus Langeweile ...
>und das dort erwähnte PDF
aber Vorsicht, die RGB Zahlenwerte in Tabelle 2 sind teils etwas
seltsam, etwa Farbe Nummer 7, für mich Pink, mit R,G,B = 0, 83, 0.
Tippfehler?