2-Komponenten-Farbmodell


7

RGB ist das natürliche Farbmodell für OpenGL. Es gibt aber viele andere Farbmodelle. Zum Beispiel CMY (K) für Drucker, YUV für JPEG, die kleinen Cousins ​​YCbCr und YCoCg, HSL & HSV aus den 70er Jahren und so weiter. Alle diese Modelle haben eine gemeinsame Eigenschaft: Sie basieren auf drei Komponenten.

Daher lautet meine Frage: Gibt es ein 2-Komponenten-Farbmodell? Ich bin überrascht, keine zu finden. Ich hatte erwartet, dass etwas in der Richtung von Farbton + Licht existieren könnte. Ich denke, es kann nicht so "vollständig" sein wie ein echtes 3-Komponenten-Farbmodell, aber eine ausreichend feine Annäherung ist gut für meinen Anwendungsfall.

Das Endziel besteht darin, die beiden Komponenten in einer einzigen BC5-Textur zu speichern (GL_COMPRESSED_RED_GREEN_RGTC2 in OpenGL). Die dritte Komponente erfordert einen zweiten Abruf in eine zweite Textur, was die Leistung beeinträchtigt.


" Das Endziel besteht darin, die beiden Komponenten in einer einzigen BC5-Textur (GL_COMPRESSED_RED_GREEN_RGTC2 in OpenGL) zu speichern. " Ein RG_RGTC1 (und das ist der richtige Enumerator) benötigt 128 Bit pro Pixel. Eine S3TC-komprimierte RGB-Textur mit DXT1 benötigt 64 Bit pro Pixel. Es macht keinen Sinn, ein größeres Komprimierungsschema für etwas zu verwenden, selbst wenn es funktionieren würde. Bestehende S3TC-Kompressoren sind so gut wie sie sind, und BC6 ist auch viel besser, ohne größer zu sein. Es hat also keinen Sinn.
Nicol Bolas

Ist GL_COMPRESSED_RED_GREEN_RGTC2 eine ARB_only-Erweiterung?
Cyan

1
Nein, es gibt keinen solchen Enumerator. Es gibt GL_COMPRESSED_RED_GREEN_RGTC2_EXT. Wie das EXT-Suffix andeutet, stammt dies jedoch von EXT_texture_compression_rgtc. Was du nicht benutzen solltest. Und ich habe einen Fehler gemacht; Der richtige Enumerator war RG_RGTC2nicht RGTC1.
Nicol Bolas

Antworten:


13

Menschen haben ein trichromatisches Farbsehen , daher ist der Raum der Farben, den wir sehen können, grundsätzlich dreidimensional.

(Nun, für die meisten von uns ist es das. Farbenblinde Menschen haben möglicherweise nur dichromatisches oder monochromatisches Sehen, und es gibt möglicherweise eine kleine Anzahl von Menschen , die (kaum) eine zusätzliche Dimension unterscheiden können. Auch technisch gesehen haben sogar normale Menschen eine vierte Art von Fotorektor - die Stäbe - aber diese sind nur bei schlechten Lichtverhältnissen aktiv, bei denen das normale Farbsehen zu versagen beginnt, und es wird nicht angenommen, dass sie in signifikanter Weise dazu beitragen.)

Sie können die Position einer Farbe in diesem dreidimensionalen Raum auf verschiedene Arten codieren, wodurch wir verschiedene Farbdarstellungen wie RGB, YUV, HSL, Lab, XYZ usw. erhalten. Allen diesen Farbräumen ist jedoch gemeinsam, dass sie mindestens drei Koordinaten benötigen, um alle Farben darstellen zu können, die Menschen sehen können.

(Der Grund CMYK verwendet vier Koordinaten kommt auf die Grenzen der Drucktechnik nach unten, und zwar der Tatsache , dass es schwer ist , nur ein gutes schwarz zu erhalten , indem farbige Tinten gemischt wird . Der zusätzliche Kanal ist streng genommen überflüssig zu den anderen drei, aber aussetzt es zur Grafiksoftware ermöglicht eine detailliertere Steuerung des Druckprozesses.)

Wenn Sie nur eine Teilmenge der Farben codieren möchten, können Sie eine zweidimensionale Oberfläche innerhalb des dreidimensionalen Farbraums auswählen und Ihre Farben als ihre Position auf dieser Oberfläche codieren. Eine einfache Möglichkeit, dies zu tun, besteht darin, eine der vorhandenen dreidimensionalen Farbcodierungen zu verwenden und eine der Koordinaten auf einen konstanten Wert festzulegen (oder auf einen Wert, der sich in Abhängigkeit von den anderen Koordinaten ändert). Wenn Sie beispielsweise möchten, dass alle Ihre Farben maximal gesättigt sind, können Sie die HSV- oder HSL-Farbräume verwenden und den S-Kanal auf 100% festlegen, sodass die beiden anderen Kanäle erhalten bleiben.


3

Ich weiß, dass dies eine alte und bereits beantwortete Frage ist, aber ich habe eine andere Meinung als @Ilmari Karonen.

"Menschen haben ein trichromatisches Farbsehen, daher ist der Raum der Farben, den wir sehen können, grundsätzlich dreidimensional."

Wenn Sie das menschliche Sehen mit dem digitalen Farbmodell vergleichen, ist unser Sehen dem L-RGB am nächsten, daher handelt es sich um ein 4-Komponenten-Farbmodell (es ist sehr schwierig, Farbe tatsächlich zu definieren). Dies liegt daran, dass wir zwei Arten von Zellen haben: Stäbchen und Zapfen . Es ist wahr, dass wir, wenn wir nur Zapfen betrachten, ein ähnliches Modell wie RGB haben, da es drei Arten von Zapfen gibt, empfindlich gegenüber Wellenlängen, die wir blau, grün und rot nennen. Wir haben aber auch Stäbchen, die sehr empfindlich auf grüne Wellenlängen reagieren, und unser Gehirn interpretiert dies nicht als grün, sondern als hell / dunkel. Zapfen sind aktiver, wenn es mehr Licht gibt, Stäbe übernehmen im Dunkeln, aber beide arbeiten zusammen (Sie können sie nicht abschalten). Dies ist einer der Gründe, warum einige Kamerachips 4 Komponenten auf einem Pixel haben (blau, rot, 2x grün). Die anderen und bedeutenderen Gründe sind natürlich die spektrale Empfindlichkeit, die um die Wellenlänge des "grünen" Lichts herum ansteigt:

Spektrale Empfindlichkeit

Und auch die Tatsache, dass Sie quadratische Pixel haben, die Sie in 4 Subpixel schneiden ...

Digitale Farbmodelle können wahrscheinlich "alle Farben erfassen, die Menschen sehen können". Verschiedene Wissenschaftler geben Ihnen unterschiedliche Antworten. Der 24-Bit-Farbraum ist jedoch mehr als ausreichend. Und wir können ohnehin keine engen Farben nebeneinander unterscheiden.

Computerbildschirme wurden immer als RGB-Modell für das menschliche Sehen betrachtet, um ein möglichst natürliches Bild zu erhalten. CRT-Bildschirme haben drei Phosphorpunkte, LCD-Panels drei Subpixel. Einige Bildschirme haben 4 (mit extra gelb, denke ich).

Daher ist das Dreikomponenten-RBG-Modell am natürlichsten und am einfachsten zu verwenden, und andere Modelle sind nur Codierungen dieses Modells, um Unterabtastung und andere Manipulationen zu ermöglichen. Zum Beispiel funktioniert die Unterabtastung in YCbCr, weil das menschliche Sehen empfindlicher auf Hell / Dunkel-Kontrast reagiert als auf Farbveränderungen (wieder haben wir hell / Dunkel-empfindliche Zellen und auch das menschliche Gehirn funktioniert so).

Meiner Meinung nach würde ein besseres 3-Komponenten-24-Bit-Farbmodell Grün mit 10 Bit und Blau und Rot mit den verbleibenden 14 Bit codieren, dann würde ein besseres Fernsehgerät größere grüne Subpixel als Rot und Blau verwenden ...

Der Grund, warum es kein 2-Komponenten-Farbmodell gibt, liegt darin, dass es nicht benötigt wird. Sie können ein beliebiges Farbmodell für 2 Komponenten "Helligkeit und Farbton + Sättigung kombiniert" erstellen. Erstellen Sie dann eine 8-Bit-Palette für den kombinierten Kanal Farbton + Sättigung. Mit 256 Helligkeitswerten haben Sie ein ziemlich gutes Modell. Aber es wird ziemlich nutzlos, schwer zu manipulieren und unnatürlich sein und Sie müssen eine ziemlich komplexe Formel RGB-> Ihr Modell-> RGB bereitstellen.

Anstatt zu versuchen, Bits mit einem 2-Komponenten-Modell zu speichern, verwenden wir nur ein 3-Komponenten-Modell mit Unterabtastung.

Beachten Sie, dass die alte 256-Palette als 1-Komponenten-Modell betrachtet werden kann. Wenn Sie den Palettenspeicher auf 16 Bit erhöhen, erhalten Sie das 1-Komponenten-Modell der 65536-Palette und so weiter.

Fazit

Es spielt keine Rolle, wie viele Komponenten Ihr Modell hat! Das Wichtigste ist, dass Sie natürlich RGB mit unserer aktuellen Technologie erfassen und RGB mit der aktuellen Technologie reproduzieren. Dies fühlt sich für das menschliche Auge natürlich an. Was auch immer Sie zwischen Aufnahme und Wiedergabe tun, liegt ganz bei Ihnen. Wir haben gerade Farbmodelle erfunden, die einfach zu manipulieren, zu codieren oder irgendwie nützlich sind.


Vielen Dank für diese sehr vollständige Antwort. Dies gab mir ein paar weitere Ideen zum Ausprobieren :)
Cyan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.