Forum: PC-Programmierung n-Farben mit größtem Untschied


von DrD (Gast)


Angehängte Dateien:

Lesenswert?

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
from Tkinter import *
2
import math
3
4
master = Tk()
5
6
max=16777216
7
count=30
8
schrittweite=max/count
9
print schrittweite
10
11
x=0
12
y=0
13
for index in range(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
24
    bfarbe="#%06x" % schritt                     #Algorithmus 1
25
    vfarbe = "#%02x%02x%02x" % (255-r, 255-g, 255-b)           
26
    Label(master, text=bfarbe, fg=vfarbe, bg=bfarbe).grid(column=x, row=y)    
27
    x+=1
28
    if x>=math.sqrt(count):
29
        y+=1
30
        x=0
31
32
master.mainloop()

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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 :-)

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Eventuell ist eine der Standard-Farbpaletten von Windoof oder Mac 
bereits passend gefüllt? Würde mich auch mal interessieren.

von Eddy C. (chrisi)


Lesenswert?

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.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

...ü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

von Martin (Gast)


Lesenswert?

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.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

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.

von Reinhard Kern (Gast)


Lesenswert?

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

von Frank (Gast)


Lesenswert?

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 ...

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

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.

von Reinhard Kern (Gast)


Lesenswert?

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

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

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!

von Robert L. (lrlr)


Lesenswert?

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 ;-)

von DrD (Gast)


Lesenswert?

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.

von Hans M. (hansilein)


Lesenswert?

Na dann erkenn' doch den Ausreisser algorithmisch und markier ihn in 
rot.

von Reinhard Kern (Gast)


Lesenswert?

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

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

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.

von HalfBit (Gast)


Lesenswert?

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

von Robert L. (lrlr)


Lesenswert?

>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

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

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.

von HalfBit (Gast)


Lesenswert?

Robert L. schrieb:
> und was ist mit S und V
>
> beides 100%

ja. Beispiel: 
http://upload.wikimedia.org/wikipedia/de/6/6a/Photovoltaik.jpg
Solche Plots mit HSL finde ich ganz intuitiv und einfach.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

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 ...

von Salewski, Stefan (Gast)


Lesenswert?


von Salewski, Stefan (Gast)


Lesenswert?

>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?

von Salewski, Stefan (Gast)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
Lade...