RGB16 komprimierung oder doch YUV?

  • Ich habe mal wieder ein paar Fragen. Dieses Mal geht es um den rgb16 Farbraum.

    1.Zunächst erstmal zum Basisverständnis:
    a) Oftmals findet man hinter rgb16 die Zahlenangabe 565. Ich nehme an, dass es sich dabei um die Bitverteilung auf die einzelnen Farbkanäle handelt. Da unser Auge für grün empfindlicher ist, umfasst dieser Anteil also die 6 Bit. Hoffe, ich habe das soweit richtig verstanden.
    b) Von divx und xvid kennen wir die Möglichkeit sehr helle und sehr dunkle Bereiche aufgrund der geingeren Empfindlichkeit unserer Augen stärker zu komprimieren. Wird bei der Skalierung von 8 Bit auf 5 bzw. 6 Bit dieser Punkt berücksichtigt, oder erfolgt die Runterrechnung linear?
    c) Inwieweit erachtet ihr eine nichtlineare konvertierung des Farbraums für sinnvoll?

    2.Meine Zweite Frage zielt direkt auf den Vergleich mit YUV ab:
    Mir ist durchaus klar, wo die Vorteile für den YUV-Farbraum liegen. Analoges Rauschen liegt hauptsächlich auf den Farbkanälen. Der Farbraum ist spezifiziert für unser Sehempfinden und das Downsampling des Farbraums bringt eine Einsparung der Bitrate.
    Allerdings sehe ich rein komprimierungstechnisch zurzeit mehr Nachteile gegenüber zum Beispiel dem rgb16 Farbraum. Die neuen digitalen Verarbeitungsmöglichkeiten ermöglichen eine bessere Informationserhaltung. Die Auflösungen und die Qualität werden immer höher. Farbrauschen wird immer geringer durch die besseren Übertragungsmöglichkeiten und die Röhrentechnik wird langsam aber sicher von den neuen Techniken verdrängt.
    Aufgrund dessen sehe ich in der planaren Dreiteilung mehr Nach- als Vorteile. Weitestgehend sind einzelnen Kanäle miteinander verbunden, daher Flächen und Kanten des Lumakanals finden sich auch in den Chromakanälen wieder. Bei hohen Auflösungen werden also viel mehr Matrixinformationen benötigt aufgrund der Dreiteilung. Bei niedrigen Auflösungen und Bitraten kommt es aufgrund des Downsamplings immer wieder zu unschönen Chromaartefakten.

    Sicherlich hat sich jemand in diesem Forum schon etwas mehr Gedanken um dieses Thema gemacht und kann mich eventuell in meiner Überlegung korrigieren. Ich freue mich über jeden Beitrag.

    MOmonster

  • Ok, hier nochmal kurzer Überblick:

    1a) Ist rgb16 so eingeteilt: Rot - 5 Bit, Grün - 6 Bit, Blau - 5 Bit?

    1b) Ist die Konvertierung von rgb24 zu rgb16 linear (gleichmäßige Verteilung) oder unseren Sehempfinden angepasst?

    1c) Erachtet ihr eine nicht-lineare Konvertireung als sinnvoll?

    2. Bei heute meist sehr guten Ausgangsmaterial (hohe Auflösung, maginales Rauschen, gute Qualität), wäre es nicht sinnvoller z.B. mit rgb zu arbeiten als mit yuv zu kodieren und dadurch eine Teilung in die einzelnen Kanäle hervorzurufen?

    Es geht dabei um den hypothetischen Fall einen neuen Codec zu entwickeln, der DCT oder zum Beispiel Wavelet basiert sein kann und auch für große Auflösungen geschaffen ist, also eine gute Komprimierung bewirken soll.
    Sollte man in diesen Fall, so wie es bei h264 ja noch gemacht wurde, wirklich auf yuv setzen?
    Ich habe mir ein paar Gedanken dazu gemacht und bezweifle das.

  • zu 1. a.)
    Im 565er Modell: Ja :)
    siehe: http://www.vb-fun.de/cgi-bin/loadfr…dx7_DD005.shtml

    zu 1.b.) i.d.R. wird die Verteilung linear vorgenommen. Es spricht aber nichts dagegen eine Bibliothek zu schreiben bzw. zu benutzen die hierbei menschliche Wahrnehmung in Rechnugn nimmt. Dies Würde natürlich etweilige Metriken zur Qualitätsprüfung eventuell aus der Bahn werfen.

    zu 1.c.) Wenn sie ordentlich gemacht ist, d.h. auch wirklich auf guten und zutreffenden Psychovisuellen Modellen basiert, schon.

    zu 2.: Yup, wenn die Quelle es hergibt wäre RGB sinniger.
    Das Problem wird i.d.R. bei RGB sein, dass bei vielen Anwendungen die Quelle schon nicht RGB sondern ein YUV Derivat ist. ;)

    Gerade bei hohen Auflösungen bringt natürlich jede Einsparung in der Farbdarstellung einiges. ;)

    Cu Selur

    Ps.: Wirklich interessant fände ich es aber vorallem, wenn endlich mal etwas in der Monitorentwicklung gemacht wird, so dass auch alle in der Realität vorkommenden Farben von Monitoren&Co dargestellt werden können. :)

  • Zitat von Selur

    Ps.: Wirklich interessant fände ich es aber vorallem, wenn endlich mal etwas in der Monitorentwicklung gemacht wird, so dass auch alle in der Realität vorkommenden Farben von Monitoren&Co dargestellt werden können. :)


    Danke für die schnelle Antwort Selur. Das habe ich mir schon irgendwie gedacht.
    Ja das wäre wirklich mal eine notwendige Entwicklung. Denn müsste man nachher aber vielleicht auch noch komplett den Farbraum anpassen. Ich sage einfach mal Regenbogen, auch wenn theoretisch rgb alles abdecken soll.

    Cu, MOmonster.;D

  • Ich habe zwar bis geradeeben nichts von rgb16 gehört gehabt, aber:

    1a) Wenn dem so wäre, dann sieht das vermutlich nicht sehr schön aus, denn 5 bit sind gerade mal 32 verschiedene Zustände. Hast du irgendwelche Programme, die RGB16 beherrschen?

    1b) Vermutlich schon, da das sehr einfach zu implementieren wäre. Abgesehen davon ist insgesamt rgb16 unschön zu programmieren.(RGB24 auch)

    1c) Es gibt Farbräume, die speziell auf Empfindlichkeit getrimmt sind, z.B. YOZ. Sind aber wenig verbreitet.

    2. Abgesehen davon, dass yuv sehr verbreitet ist, und es relativ schwer ist, nicht chroma-subsampled Material zu finden (für Otto-Normal-User), denke ich nicht, dass das sinnvoll ist.

    Wenn du mal ein Bild mit einem Bildbearbeitungsprogramm (oder avisynth) in YUV und in RGB Kanäle zerlegst, und dir dann ein Histogramm anzeigen lässt, dann siehst du bei RGB, dass die verschiedenen Werte in allen Ebenen fast gleichverteilt sind, während bei den U und V Kanälen deutlich weniger breit gestreut sein sollten (ich habs jetzt nicht nachgeprüft). Das nennt man Energieverdichtung (oder so ähnlich, energy compactation auf englisch), und ist eine wichtige Eigenschaft für die kompression. Die DCT Basis oder Wavelets fassen die energie des Bilds auch auf wenigen Werten zusammen, die anderen sind nicht so wichtig und können stärker quantisiert werden.

    yuv ist genauso eine gleichwertige Basis des Farbraums wie rgb (sogar besser, rgb deckt nicht den ganzen für den Menschen sichtbaren bereich ab), und sie hat den Vorteil, diesen relativ einfachen Psychovisuellen Trick zu machen, und die Farbkomponenten subsampeln oder stärker quantisieren. Man muss aber nicht. H.264 bietet die Möglichkeit nicht gesubsampeltes YUV zu verarbeiten, und das ist von der Qualität her (abgesehen von irgendwelchen Farbraumwandlungen) absolut gleichwertig mit RGB24.

    Warum denkst du, dass RGB geeigneter ist?

    Es gibt eine Theorie, die besagt, dass das Universum sofort verschwinden und etwas noch Unerklärlicheres und Bizarres an seine Stelle treten wird, sobald jemand herausfindet, wofür es gut ist und warum es existiert.

    Es gibt eine andere Theorie, die besagt, dass das bereits geschehen ist.

  • Es geht mir dabei gar nicht so sehr darum, wie der Farbraum an sich zusammengesetzt wird, es geht mir einfach darum die Dreiteilung zu umgehen. Natürlich bringt das Subsampling Vorteile (aber auch Nachteile), jedoch muss ich jeden Kanal einzeln komprimieren.
    Nicht nur das eine geringere Auflösung des Subsamplings nicht unbedingt immer gleich Bitrate einspart, weil ja alle vorhadenen Details trotzdem kodiert werden müssen (halbe Auflösung bedeutet nicht gleich halbe Bitrate), letztendlich muss ich jeden Kanal in seine eigenen Matrixen aufteilen. Und in einem Kanal muss sich die Gleichverteilung von rgb ja so oder so wiederfinden.
    Mir gehts es dabei hauptsächlich darum, dass man bei der Aufteilung in die einzelnen Farbkanäle viele dinge, wie zum Beispiel Kanten oder lineare Farbverläufe mehrfach kodiert, bzw den Farbkanal letztendlich nur breitmanscht um Bitrate zu sparen.
    Ich glaube, dass bei sehr guten Ausgangsmaterial die Kodierung einer einzelnen Ebene wesentliche Vorteile bringen kann.

    RGB16 wäre jetzt einfach der Kompromiss. Es hätte auch yuv 444 sein können (die Kanäle sollen nicht getrennt kodiert werden), aber in rgb16 kann man natürlich die psychovisuelle Farbreduktion nutzen.

    Als ich das letzte mal bei einem Kumpel ein rgb16 Image gesehen habe, das sich nur bei genauen hingucken von rgb24 unterscheiden lies, kam mir diese Idee.

    Zitat

    sogar besser, rgb deckt nicht den ganzen für den Menschen sichtbaren bereich ab


    Das wusste ich gar nicht. Ich dachte yuv 444 ist in der Theorie gleichwertig zu rgb24 zumal es ja eine leichte Formel zu berechnung von yuv aus rgb24 gibt.?

    Edit: Dass h264 nicht zwingend subsampling vorraussetzt wusste ich gar nicht. Danke für die Information.

  • Es geht nur darum das Yuv aufgrund der planaren Aufteilung in die jeweiligen Farbkanäle dafür komplett ungeeignet ist. Letztendlich kann es jeder andere Farbraum, am besten natürlich an das menschlische Sehempfinden angepasst, sein, solange er nur nicht die zwingende Aufteilung in einzelne Farbkanäle zum Beispiel aufgrund von Subsampling erfordert.

  • Ich versteh nicht so ganz, was du meinst. Du wirfst glaubich ein paar Begriffe durcheinander

    Ein Farbraum ist ein 3 dimensionaler Vektorraum, du brauchst eine Basis aus 3 Basisvektoren, um jede Farbe darstellen zu können als Linearkombination. Ob das R,G,B oder etwas gedreht Y,U,V ist, ist im Prinzip völlig unerheblich.

    Aber du hast immer 3 Komponenten. Planare Farbformate unterscheiden sich nur in der Art der Speicherung von interleaved Formaten (hier werden die komponenten eines Pixels hintereinander geschrieben (rgbrgb...), bei planaren werden sie sortiert (rrrrrrr.... bbbbbbbb....... ggggg.....).

    RGB24 und rgb 16 unterscheiden sich nur in der Genauigkeit, mit der die eigentlich kontinuierlichen komponenten abgespeichert werden (also bei 8 bit 256 verschiedene werte, bei 5 bit nur noch 32). Bei rgb16 hast du genauso 3 Ebenen (nämlich die rot, die grün und die blau ebene), und diese sind sich noch viel ähnlicher und weisen viel stärker die selbe struktur auf, wie die y, u und v ebene.

    Wenn du diese Aufteilung aufgibst, und "nur eine ebene kodierst", musst du irgendwelche beliebeigen Farben durchnummerieren und bist dann bei einer palettenbasierten Farbdarstellung. Das ist dann aber m.E. nur sehr schwer zu optimieren. Das ginge in Richtung Vektor Quantisierung. Mir fällt da auch spontan kein Effekt ein, der sich für eine psychovisuelle Anpassung eignet.

    Was schwebt dir da so prinzipiell vor?

    Es gibt eine Theorie, die besagt, dass das Universum sofort verschwinden und etwas noch Unerklärlicheres und Bizarres an seine Stelle treten wird, sobald jemand herausfindet, wofür es gut ist und warum es existiert.

    Es gibt eine andere Theorie, die besagt, dass das bereits geschehen ist.

  • Auch auf die Gefahr hin, mich als ahnungslos zu outen:

    Du schreibst immer "Aufteilung in einzelne Farbkanäle" - was meinst Du damit?
    Die meisten üblichen Farbräume sind 3-dimensional. Egal ob RGB oder YUV oder ...
    Die Umrechnung dazwischen geschieht (sofern wenigstens in Theorie fehlerfrei) durch bijektive Achsentransformation.

    Ich entschuldige mich schonmal im Voraus, falls das am Thema vorbeigeht, aber als Mathematiker kann ich grade nicht folgen worauf Du raus willst.

    edit:
    Hach, ich seh schon: Zu langsam und zu mathematisch...

    Grüße!
    Trekkie2

  • Dass die Farbräume, ob nun rgb oder yuv, dreidimensional sind, ist mir natürlich klar. Aber es spricht doch auch nichts gegen Matrixen, die wiederum dreidimensionale Matrixen enthalten.

    Vielleicht mache ich das mal mit einem kleinen Beispiel deutlich:
    Nehmen wie mal ein Bild an, dass auf einer gelben Fläche eine blauen Kreis zeigt, mehr nicht. Das Beispiel ist zwar etwas übertrieben, macht aber den Sachverhalt deutlich. Bei vy12 würden jetzt drei ebenen entstehen. Luma in voller Größe und Chroma in halber Größe jedes Element des Übergangs vom blauen Kreis in die gelbe Ebene muss jetzt einzeln erstellt werden. Die Flächen entstehen durch Matrixduplikate.
    In diesem zugegeben simplen Beispiel ist der Komprimierungsaufwand trotzdem ziemlich groß, weil jede Farbebene ihre eigenen Vektoren und Matrixen benötigt.
    Wenn man jetzt aber den Dreidimensionalen Farbraum nur in einer Ebene verarbeitet also Matrixen höheren gerades verwendet, werden dabei deulich weniger Information in Form von Vektoren usw. nötig.

    Oder um es noch deutlicher zu machen können wir auch eine Ebene nehmen, die total linear von hellgelb ins dunkelgrün geht. Zurzeit müsste man denn für jeden Kanal einzeln diese Linearität durch Vektoren und unterschiedliche Matrixen festlegen. Mit einer höherdimensionierten Matrix bräuchte man im Endeffekt deutlich weniger Informationen um diesen Sachverhalt darzustellen.

    Ich gehe halt davon aus, das im tatsächlichen Bild (nicht als dreidimensionaler Farbraum) alle Farbverläufe bzw. Veränderungen miteinander verkettet sind. Dieser Sachverhalt sollte für ein Codec, der versucht ein Bild mit Hilfe der vorkommenden Linearitäten zu komprimieren einen erheblichen Vorteil bringen. Ob der Vorteil auch für die DCT genutzt werden kann, mag wohl bezweifelt werden, da die Spezialisten wohl sonst nicht auch in h264 weiterhin diese planare Einteilung vornehmen würden.

    Es ist also grundsätzlich egal welcher Farbraum, ob nun drei- oder sogar noch höherdimensional, wichtig ist dabei nur, dass eine einzige Matrixebene zum komprimieren verwendet wird, wodurch Subsampling natürlich ausgeschlossen wird.

  • Der Plural von Matrix ist Matrizen ;)

    Ich versteh nicht ganz, wie du ein Bild durch Matrizen und Untermatrizen repräsentieren willst. Und was machen diese Vektoren? Sind das Bewegungsvektoren? (Dann gilt der Einwand nicht, denn üblicherweise teilen sich Luma und Chroma Blöcke den selben Motion Vektor)

    Zitat


    Ich gehe halt davon aus, das im tatsächlichen Bild (nicht als dreidimensionaler Farbraum) alle Farbverläufe bzw. Veränderungen miteinander verkettet sind. Dieser Sachverhalt sollte für ein Codec, der versucht ein Bild mit Hilfe der vorkommenden Linearitäten zu komprimieren einen erheblichen Vorteil bringen. Ob der Vorteil auch für die DCT genutzt werden kann mag wohl bezweifelt werden, da die Spezialisten wohl sonst nicht auch in h264 weiterhin diese planare Einteilung vornehmen würden.

    Sowas in der Art hab ich mal gelesen. Da wurde das Bild Zeilenweise hintereinandergeschrieben, sodass man eine lange Folge von Werten hatte (die haben das iirc nur mit Graustufen gemacht), und dann diese Folge abschnittsweise durch Geraden angenähert, und die Daten der Geraden gepeichert. Von der Kompressionsrate etwas schlechter als JPEG, m.E. angenehmer anzuschauen, und auch sonst interessante Eigenschaften, weil man z.B. recht einfach resizen kann, oder Objekte mit scharfen Kanten gut erkennen kann. Meinst du sowas?

    Hier der Link: http://www.cs.cmu.edu/~chuck/nsipg/nsi.html

    Es gibt eine Theorie, die besagt, dass das Universum sofort verschwinden und etwas noch Unerklärlicheres und Bizarres an seine Stelle treten wird, sobald jemand herausfindet, wofür es gut ist und warum es existiert.

    Es gibt eine andere Theorie, die besagt, dass das bereits geschehen ist.

  • Ja, das kommt meiner Idee schon etwas näher. Danke für den Link. Jedoch habe ich zusätzlich noch über eine Idealisierung der Objekte und eine räumliche Linearbeschreibung nachgedacht, was eine deutlich bessere Komprimierung zu Folge haben sollte. Das sich die Ebenen die Bewegungsvektoren teilen, dass wusste ich nicht, muss halt noch einiges in dem Zusammenhang lernen. Aber auch innerhalb eines Bildes müssen gleiche Matrizen doch durch irgendwelche Verweise deutlich gemacht werden. Wenn die Farbkanäle auch diese Informationen teilen können, denn würde meine Überlegung in Bezug auf DCT tatsächlich gar nichts bringen.

    Um nochmal auf rgb16 zurück zu kommen. Ein Codec der durch Idealisierung und Linearisierung eine Komprimierung erreicht, wäre nicht so stark von der Farbtiefe abhängig, da er durch Interpolation innerhalb eines umfangreicheren Farbraums wieder schöne Farbverläufe produzieren kann, zumal rgb16 wirklich nicht sooo schlecht aussieht, man muss wirklich schon genauer hinsehen.

    In meiner Überlegung bringt das Subsampling halt recht wenig, da aufgrund der Idealisierung (die zu umfangreich ist um sie jetzt näher zu erläutern) Details sehr viel wichtiger sind als die Auflösung.
    Zudem scheint der wichtigere Faktor sowieso die stärkere Quantisierung der Chromakanäle zu sein. Gerade bei hohen Detailgrad scheint das Subsampling immer irgendwelche negativen Effekte zu haben. Viel zu häufig kommt rainbowing usw. vor.

    Achja, danke für die Berichtigung. Im ganzen Semester waren Matrizen der Schwerpunkt. Vielleicht habe ich es ja aus Frust falsch geschrieben.;D

  • Zitat

    Aber auch innerhalb eines Bildes müssen gleiche Matrizen doch durch irgendwelche Verweise deutlich gemacht werden. Wenn die Farbkanäle auch diese Informationen teilen können, denn würde meine Überlegung in Bezug auf DCT tatsächlich gar nichts bringen.

    Also bei H.264 gibt es so was ähnliches, aber da werden ganze Blöcke durch Randpixel von banchbarten Blöcken vorhergesagt, und dann nur die Differenz zur Realität transformiert und quantisiert und gespeichert. Und das ist iirc auch für alle ebenen zusammen.

    Vielleicht kannst du ja deine Ideen skizzieren. Ich hab auch schon mal intensiver über diese Adaptive Sample Geschichte nachgedacht, würde mich interessieren, was du dir ausgedacht hast.

    Es gibt eine Theorie, die besagt, dass das Universum sofort verschwinden und etwas noch Unerklärlicheres und Bizarres an seine Stelle treten wird, sobald jemand herausfindet, wofür es gut ist und warum es existiert.

    Es gibt eine andere Theorie, die besagt, dass das bereits geschehen ist.

  • Im Moment dringe ich immer tiefer in die Videoprogrammierung unter C ein um solche Ideen auch irgendwann umsetzen zu können.
    Ich werde die Überlegung mal anreißen und später vielleicht auch mal Skizzen dazu anfertigen.

    Der Codec wäre sehr komplex. Er würde progressiv und ausschließlich adaptiv arbeiten. Trotzdem sollte er scharfe Kanten sehr gut erhalten.

    Im ersten Schritt werden Kannten und Extremwerte (höchste/geringste Werte einer Ebene) aus dem Bild gesucht. Diese zu kodierenden Linien bilden den Rahmen für das Bild. Die Komprimierung soll hier durch Erkennung von idealistischen Formen (Rundungen, Linien) erfolgen und mithilfe von Vektoren werden die Elemente denn positioniert.

    Jetzt ist das Bild in lauter Bereiche eingeteilt. Die Felder werden durch simple Interpolation zwischen den Randwerten und den Extremwerten der Flächen aufgefüllt. -> Bei vielen Zeichentricks könnte man jetzt bereits aufhören.
    Bis zu diesen Punkt bringt die Planarteilung meiner Meinung nach mehr negative Punkte.

    Im dritten Schritt gibt es denn nicht mehr so viele Vorteile nur mit einer Ebene zu arbeiten. Hier werden Objekte für die Interpolierten Felder gespeichert, die den Unterschied der eigentlichen Struktur zum glattinterpolierten Feld enthalten. Dieser Objekte sollten viel häufiger wiederverwendet werden als irgendwelche Matrizen, da sie nur den Oberflächenunterschied enthalten.

    Der Codec wäre recht complex, auch wenn ich h264 für noch komplexer halte. Der schwierige Part wäre wohl die Idealisieung, die aber den wichtigsten Teil des Codecs ausmachen würde.

    Es ist wirklich nur angerissen, gibt aber hoffentlich einen ungefähren Einblick in meine Vorstellung.

  • Zitat

    Der schwierige Part wäre wohl die Idealisieung, die aber den wichtigsten Teil des Codecs ausmachen würde.


    Glaubst Du, Du bekommst da was brauchbares hin?
    (Meine Gedanken schweifen da in Richtung Objektbased coding ab, was ich zwar für ne gute Idee aber als extrem schwierig erachte.)

    Cu Selur

  • Zitat von Selur

    (Meine Gedanken schweifen da in Richtung Objektbased coding ab, was ich zwar für ne gute Idee aber als extrem schwierig erachte.)

    Hast du da ein paar gute Links (vorrangig deutschsprachig)?

    Sorry fürs OT.

    "Diejenigen, die grundlegende Freiheiten aufgeben würden, um geringe vorübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit."
    Benjamin Franklin (1706-1790)

    Meine Erfahrungen in der Open Source-Welt: blog.bugie.de

  • In der Videoprogrammierung stecke ich noch ziemlich in den Anfängen, allerdings ist diese genannte Idee hier schon sehr durchdacht (habe wirklich nur ein Bruchteil davon angerissen) und sollte auch realisierbar sein.
    Je größer das Problem um so mehr werde ich davon angespornt, aber sollte ich es tatsächlich in Angriff nehmen, wird es wohl noch ne ganze Zeit auf sich warten lassen.

    Also für realisierbar halte ich es auf jeden Fall, für extrem schwierig allerdings auch.:grübeln:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!