Wie vermeidet man farbige Streifen in Farbverläufen?

13

Das ist also mehr wissenschaftliche Visualisierung als Grafikdesign, aber ich denke, die Theorie ist dieselbe. In Farbkarten, die zur Visualisierung von Daten verwendet werden, ragen häufig Farbbänder hervor, wenn sie nicht angezeigt werden sollten. Ich glaube, sie sind eine Form von Mach-Bands ?

Zum Beispiel habe ich diese bipolare Farbkarte verwendet und sie erzeugt Bilder wie diese:

Geben Sie hier die Bildbeschreibung ein

Es ist fast wie ein Ring aus Neonorange um 0,2 und ein ähnlicher Ring für Blau um -0,2. Hier ist eine grafische Darstellung der RGB-Komponenten und eine Berechnung der relativen Luminanz in Schwarz:

Geben Sie hier die Bildbeschreibung ein

Ich habe es manuell optimiert, um zu versuchen, die Bands loszuwerden, und es ist mir etwas gelungen, aber ich verstehe die Theorie dahinter nicht wirklich:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Es ist besser, aber ich sehe immer noch Bands darin.

Für ein anderes Beispiel, für die heiße Farbkarte, dachte ich, ich müsste vielleicht das Luminanzdiagramm linearisieren, um Streifenbildung zu verhindern, aber es hat nicht wirklich funktioniert:

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Die gelben und orangefarbenen Bänder sind immer noch da, sie sind nur bewegt und ein wenig verschmiert. Diskontinuitäten im Luminanzdiagramm sind also nicht die Ursache des Problems.

Wie wechsle ich reibungslos durch Farben ohne Streifenbildung? Gibt es Regeln für das Erstellen glatter Kurven durch den Lab-Farbraum oder so? ( Edit: Ooh, ich habe ein Beispiel dafür gefunden : "Die Farbskala wird mit dem L a berechnet b * -Farbraums . Sie folgt einer gleichmäßigen Rampe entlang der L * -Richtung und folgt einem halbkreisförmigen Pfad in a * -b * Flugzeug.")

Update: Hier ist eine Darstellung dieser Farbkarte im RGB-Würfel, die die scharfen Winkel zeigt, über die Benutzer 568458 spricht:

Geben Sie hier die Bildbeschreibung ein

Endolith
quelle
1
Beachten Sie, dass ich einen Kommentar zu Wahrnehmungsbändern abgegeben habe (siehe unten), aber dies war, bevor ich mir die Frage wirklich angesehen habe. Ich sehe, dass Sie darüber sprechen, wie zwei bestimmte Farbbereiche hervorstechen.
Horatio
1
Schönes Diagramm! Genau das meine ich mit scharfen Ecken. Ich habe mir einen Farbwürfel wie diesen oder diesen vorgestellt . Ich habe meiner Antwort eine grobe, aber hoffentlich nützliche Illustration der Art von Dingen hinzugefügt, die ich meine. (Natürlich gibt es auch das zweite Paar scharfer Ecken an den Punkten, an denen der rote Pfad Grün hinzufügt, um Weiß zu erreichen, und an denen der blaue Pfad Rot hinzufügt, um Weiß zu erreichen)
user56reinstatemonica8

Antworten:

6

Vergessen Sie nicht, dass RGB-Werte ausgegeben werden müssen, um sie auf einem Bildschirm anzuzeigen, auch wenn Sie mit LAB-Farbwerten arbeiten. Irgendwann muss es den roten, grünen und blauen Pixeln eines Bildschirms mitteilen, was zu tun ist.

Betrachten Sie es in RGB-Begriffen, und die Ursache der Bands ist eigentlich ziemlich einfach.

Nehmen Sie einen Farbwähler und sehen Sie sich die Farbverläufe an. Sie werden feststellen, dass sich die Bänder um die Punkte befinden, an denen sich die Art des Farbverlaufs ändert:

  • Im roten Bereich geht es darum, das R im RGB sanft zu erhöhen und G zu addieren, um gelb zu werden - um # FF0000 bis # FF2500
  • Im Blau ist es ungefähr dort, wo es vom sanften Erhöhen des B im RGB zum Hinzufügen von G zum Cyan wechselt - um # 0000FF bis # 0025FF

Und ebenso bei den unteren Plots, bei denen Gelb zu Weiß hinzugefügt wird: Es handelt sich im Wesentlichen um drei miteinander verbundene Verläufe. Am Beispiel des roten Farbverlaufs:

  • es ist # 000000 bis # FF0000 (Erhöhung der Helligkeit in HSB-Begriffen, Erhöhung des Rotkanals in RGB)
  • # FF0000 bis # FFFF00 (wechselnde dann Hue in HSB Begriffe, Grün Kanal in RGB erhöht wird )
  • dann # FFFF00 bis #FFFFFF (Änderung der Sättigung in HSB-Begriffen, Erhöhung des blauen Kanals in RGB)

Geben Sie hier die Bildbeschreibung ein

Es wird also immer eine sichtbare Verknüpfung geben, wenn diese so eingerichtet ist. In der Regel ist es am besten, einen Gradienten einfach zu halten und ein Merkmal ständig zu variieren , wenn Genauigkeit und Linearität das Hauptziel sind (es sei denn, Sie möchten Streifenbildung, z. B. bei einigen Arten von Gehirnscans).


Das heißt , wenn Sie entschlossen sind, durch das breitere Spektrum zu laufen (es sieht gut aus), würde ich entweder den zweiten Kanal hinzufügen, bevor der erste abgeschlossen ist, einen Brückenabschnitt zwischen den Gradienten bilden oder einen haben leichte umgekehrte S-Form-Kurve zu der Rate, mit der der zweite Kanal hinzugefügt wird (wahrscheinlich beides).

Also statt:

  • 000000 bis # FF0000, 100% schwarz bis 100% rot

  • FF0000 bis # FFFF00, 100% rot bis 100% gelb

  • FFFF00 bis #FFFFFF, 100% gelb bis 100% weiß

... es könnte sein (nur Vermutungen von meinem Kopf, müssen angepasst werden):

  • 000000 bis # E90000, 100% schwarz bis leuchtend rot

  • E90000 bis # FF2500, (KURZE BRÜCKE) leuchtend rot (dunkel) bis hellrot (leicht orange)

  • FF2500 bis # FFE900, leuchtend rot (leicht orange) bis hellgelb (leicht orange)

  • FFE900 bis # FFFF25, (KURZE BRÜCKE) hellgelb (leicht orange) bis hellgelb (hell)

  • FFFF25 bis #FFFFFF, hellgelb (hell) bis 100% weiß

... dann passen Sie die Kurven jedes Abschnitts nach Geschmack an :-)


Bearbeiten: Hier ist eine Demonstration des Vorschlags "Ecken abschneiden". Es ist nicht perfekt - es ist ziemlich unraffiniert, nur etwas, das ich mit dem Illustrator-Mischwerkzeug in wenigen Minuten per Auge zusammengestellt habe (nicht gemischte Objekte unten, um die Farbpunkte anzuzeigen). Jedes Segment des Verlaufs zwischen den einzelnen Farbpunkten ist zu 100% linear, während Sie wahrscheinlich etwas abgerundeteres wünschen - und wenn Sie genau hinschauen, können Sie Bänder erkennen.

Die Ergebnisse variieren natürlich zwischen den Monitoren: Auf meinem 'guten' Monitor ist es glatt; Auf dem "schlechten" Monitor, den ich zur Überprüfung der Ausfallsicherheit von Webbildern verwende (bei denen die Originalbänder nicht sehr deutlich sichtbar sind), erscheinen Orangen immer gedämpft, sodass die roten und gelben Bereiche heller erscheinen als die orangefarbenen Verbindungen, wodurch das Rot überbetont wird und gelbe Bereiche - aber Sie können immer noch sehen, dass der "Rand" der ursprünglichen Bänder weitgehend verschwunden ist.

In beiden Fällen können Sie im Vergleich zu den ursprünglichen Verläufen den Unterschied deutlich erkennen. (Was die Mathematik dahinter betrifft - keine Ahnung, ich bin kein Mathematiker, aber hoffentlich hilft dies, das Problem und die Lösung zu identifizieren)

Geben Sie hier die Bildbeschreibung ein

Der andere Vorteil ist, dass Sie den klareren Übergang von Schwarz> einem Kanal mehr verwenden können.


Oder die gleiche Idee auf einem RGB-Farbwürfel (verzeihen Sie die Grobheit, sie soll demonstrativ und nicht genau sein ...):

Geben Sie hier die Bildbeschreibung ein

Dies zeigt wahrscheinlich deutlicher, was ich meinte, als ich sagte, dass der Beispielgradient verbessert werden kann, indem die Übergänge von Hauptsegmenten zu Eckenschneidesegmenten eher glatt als eckig gemacht werden.

user56reinstatemonica8
quelle
so tldr; Vermeiden Sie Werte von 255 für R-, G-, B-Kanäle (?)
Horatio
2
@horatio nicht wirklich nein, eher wie tldr; Vermeiden Sie scharfe Ecken zwischen Abschnitten eines Verlaufs
user56reinstatemonica8
Es hängt alles vom Farbraum ab, der für die Ausgabe verwendet wird. Wenn Sie einen Farbverlauf hätten, der beispielsweise von reinem Weiß über reines Magenta zu reinem Violett (100% Magenta und Cyan) zu reinem Schwarz ( hergestellt aus 100% C, m, k)
user56reinstatemonica8
Eher wie "Vermeiden Sie scharfe Ecken, während Sie sich durch den HSB-Raum bewegen"? Aber wenn ich versuche , kubische Interpolation oder etwas zu tun, ich werde am Ende außerhalb des HSB Raumes, die dann Clips , die Werte und ohnehin schlechte Dinge verursacht. In meinem zweiten Beispiel mache ich das, was Sie zum Hinzufügen von Überbrückungsabschnitten empfehlen, aber es funktioniert nicht perfekt. Es sieht immer noch aus wie ein gelber Fleck in einem rot-orangefarbenen Fleck mit einem Heiligenschein, anstatt eines sanft variierenden Farbwechsels.
Endolith
1
Hier ist ein Versuch, stattdessen eine Bezierkurve zu verwenden: flic.kr/p/e1bcFf flic.kr/p/e15wik
Endolith
1

Vielleicht könnte Ihnen das helfen, es funktioniert für mich, aber ich kenne keinen manuellen Weg, um dies zu erreichen.

http://nomorebanding.com/

Raul Varela
quelle
Das ist nicht die gleiche Art von Streifenbildung, und Dithering ist in diesem Zusammenhang sowieso nicht möglich. Ich denke, ich spreche mehr über Wahrnehmungsbänder in einem glatten Farbverlauf, während es in Ihrem Link um Streifenbildung aufgrund der Quantisierung der Farben geht.
Endolith
1
Die Wahrnehmungsbänder stammen aus der Farbquantisierung. Es ist ein Problem mit der 8-Bit-Darstellung pro Pixel. Ich weiß nichts über das Plug-In, aber die Verwendung von 16 bpp RGB bei der Erzeugung von Verläufen und das anschließende Downsampling auf 8 bpp führt zu weitaus besseren Ergebnissen mit weitaus weniger Streifenbildung als die Erstellung in 8 bpp.
Horatio
@horatio: Nein, die Bänder stammen von der Kurve und nehmen scharfe Ecken ein, wenn sie sich durch den wahrnehmbaren Farbraum bewegen. In meinem Beispiel ist es speziell die Farbintensität, die an diesen Ecken einen Höhepunkt erreicht.
Endolith