Ich weiß, dass ein 24-Bit-Bild jeweils 8 Bit für R, G und B reserviert. Ist es nur für den RGB-Farbraum. Wie sind die Bits im YCbCr-Farbraum für ein 24-Bit-JPEG-Bild verteilt?
Ich weiß, dass ein 24-Bit-Bild jeweils 8 Bit für R, G und B reserviert. Ist es nur für den RGB-Farbraum. Wie sind die Bits im YCbCr-Farbraum für ein 24-Bit-JPEG-Bild verteilt?
Antworten:
Es gibt einige Formate für YCbCr. Im Allgemeinen reagiert das Auge empfindlicher auf Änderungen der Luminanz (Y, Helligkeit) als auf Änderungen der Farbintensität (Cb, Cr, Farbe). Somit ist es möglich, einige Chroma-Informationen zu löschen, während die Bildqualität erhalten bleibt.
Somit ist das "teuerste" Format 4: 4: 4, wobei für jede Luma (Y) -Komponente 1 Rotdifferenz (Cr) und eine Blaudifferenz (Cb) -Komponente vorhanden sind.
Dann gibt es nach dem von mir erwähnten Prinzip 4: 2: 2, wobei für jede 2 Y-Komponente 1 Cb und 1 Cr vorhanden sind. Und es geht noch weiter zu 4: 1: 1 und 4: 2: 0 usw. Mehr Infos hier .
Ein JPEG kann mit 8 Bits pro R-, G- und B-Kanal beginnen, aber wenn es im JPEG gespeichert wird, wird es sehr unterschiedlich gespeichert, wobei es keine echte "Bittiefe" gibt, sondern Werte als Frequenzkoeffizienten mit einer bestimmten Genauigkeit gespeichert werden.
In JPEG ist die Quantisierungsrate relevanter , die beeinflusst, wie viel Information während der Quantisierungsphase der Komprimierung weggeworfen wird und wie genau jeder Koeffizient ist. Diese Quantisierungsrate wird durch die Einstellung "Qualität" festgelegt, wenn Sie ein JPEG in Photoshop speichern. Es hängt jedoch nicht mit der Bittiefe zusammen, wie in einem Rasterbild, und man könnte sogar sagen, dass ein JPEG-Bild im JPEG-Format keine Bittiefe hat, obwohl JPEG-Encoder / -Decoder mit einem 24-Bit beginnen / enden Rasterbild.
Der andere wichtige Faktor, der beim Speichern eines JPEG relevant ist, ist der Chroma-Sub-Sampling-Typ . In einem JPEG haben Sie die Möglichkeit, die horizontale oder sowohl die horizontale als auch die vertikale Auflösung der Farbkanäle (Pr und Pb) relativ zum Luminanzkanal (Helligkeit) zu halbieren. Beim Dekomprimieren werden die Farbkanäle interpoliert und bei den meisten fotografischen Motiven macht dies keinen großen Unterschied.
Hier ist eine grobe Zusammenfassung, wie ein Bild in ein JPEG umgewandelt wird.
RGB-Werte werden in Y-, Pb- und Pr-Werte konvertiert. Der YPbPr-Farbraum eignet sich besser für eine effiziente Komprimierung, da die Luminanzinformationen, die die meisten Details enthalten, nur in einem Kanal gespeichert werden. Diese Konvertierung ist eine einfache arithmetische Operation, die perfekt umkehrbar ist, abgesehen von Rundungsfehlern.
Wenn Sie ein Chroma-Subsampling verwenden (dh einen anderen Modus als den 4: 4: 4-Modus verwenden), wird nur die vertikale und / oder horizontale Auflösung der Pb- und Pr-Kanäle halbiert. Somit haben diese Kanäle andere Pixelabmessungen als der Luminanzkanal. Dies führt zu einem dauerhaften Auflösungsverlust in den Farbkanälen.
Für jeden Kanal wird das Bild in Blöcke von 8 mal 8 Pixeln aufgeteilt, was 64 lineare Werte für jeden solchen Block in jedem Kanal ergibt. Wenn ein Kanal in keiner der beiden Dimensionen ein Vielfaches von 8 Pixeln ist, werden die Kantenpixel wiederholt (und beim Dekomprimieren verworfen - daher ist die JPEG-Komprimierung bei Dimensionen, die ein Vielfaches von 8 Pixeln sind, immer effizienter, oder 16, wenn Sie den Faktor berücksichtigen in Chroma Subsampling).
Die 64 Werte in jedem Block werden einer Transformation vom Raumbereich in den Frequenzbereich unterzogen, in diesem Fall als diskrete Cosinustransformation bezeichnet. Am Ende erhalten Sie 64 Koeffizienten, die jeweils die Amplitude einer bestimmten Frequenzkarte über dem von diesem Block eingenommenen Bereich darstellen. Der erste Wert ist die niedrigste Frequenz, die effektiv der Durchschnittswert aller Pixel ist, bis zu den letzten Werten, die die höchste Frequenzkomponente des Blocks beschreiben. Die früheren Werte weichen alle viel stärker ab und sind für das Aussehen des endgültigen Bildes wichtiger als die späteren Werte in einem Block. Dieser Vorgang ist perfekt umkehrbar, solange Sie genügend Präzision verwenden.
Dann gibt es den Quantisierungsschritt, bei dem jeder der 64 Koeffizienten, die Sie im vorherigen Schritt erreicht haben, durch eine Zahl (als Quantisierungsfaktor bezeichnet) geteilt wird und der Rest weggeworfen wird. Hier wird die Präzision der Samples am meisten beeinflusst, aber hier erzielen Sie die enormen Platzersparnisse durch JPEG im Vergleich zur verlustfreien Komprimierung. Da sich seit der vorherigen Transformation alles im Frequenzbereich befindet, trägt dieser Genauigkeitsverlust am besten dazu bei, die wahrgenommene Bildqualität zu erhalten, als dies vor dieser Transformation lediglich durch Verringern der Bittiefe / Genauigkeit der Pixel der Fall wäre. Die Umkehrung dieses Verfahrens besteht einfach darin, mit derselben Zahl zu multiplizieren, durch die Sie die Koeffizienten geteilt haben. Da Sie jedoch die Reste weggeworfen haben, erhalten Sie natürlich eine geringere Genauigkeit der Koeffizienten. Dies führt zu einem dauerhaften Qualitätsverlust.
Nach dieser Quantisierung ist es typisch, dass viele der späteren, weniger signifikanten Koeffizienten Null sind, sodass diese weggeworfen werden. Dann codiert eine (verlustfreie) Codierungsroutine variabler Länge alle verbleibenden Koeffizienten auf effiziente Weise, obwohl jeder eine andere Anzahl von Bits verwenden kann.
Es ist unmöglich zu sagen, dass ein bestimmter Quantisierungsfaktor einer bestimmten Bittiefe entspricht, da die Quantisierung keine Streifenbildung ergibt, wie wenn Sie die Bittiefe reduzieren, sondern einen allgemeinen Wahrnehmungsverlust im Detail ergibt, beginnend an den Stellen, an denen Sie ihn bemerken würden weniger, weil es für seine Frequenz eine so niedrige Amplitude hat.
Die Darstellung der Chroma (Cb Cr) in getrennten Kanälen von der Luma (Y) wirkt sich ebenfalls positiv auf die Kompression aus. Die meisten sichtbaren Informationen befinden sich im Luma-Kanal. Menschliche Augen tolerieren sowohl eine geringere räumliche Auflösung als auch eine aggressivere Quantisierung in den Chroma-Kanälen. Ein aggressiv komprimiertes Bild kann also etwa 10% des Dateibereichs für Chroma und den Rest für Luma beanspruchen und trotzdem anständig aussehen.
Am Ende des Tages ist es immer noch verlustbehaftete Komprimierung.
Ungefähr 8 Bit für jeden Kanal, aber es gibt verschiedene leicht unterschiedliche Möglichkeiten, dies zu tun. Die Details finden Sie im Wikipedia-Artikel über YCbCr .