JPEG. Kompressionsalgorithmus

Und wieder hallo! Ich habe diesen Artikel gefunden, der bereits im Mai 2019 geschrieben wurde. Dies ist die Fortsetzung einer Reihe von Artikeln ĂŒber WAVE und JPEG. ersteDiese Veröffentlichung wird Informationen ĂŒber den Bildcodierungsalgorithmus und das Format selbst enthalten.

Eine Prise Geschichte

Ein Esslöffel Wikipedia-Artikel:

JPEG (Joint Photographic Experts Group) ist eines der gÀngigen Rastergrafikformate, das zur Speicherung von Fotobildern und Àhnlichen Bildern verwendet wird.

Dieser Standard wurde 1991 von der gemeinsamen Gruppe von Fotografieexperten entwickelt, um eine effiziente Bildkompression zu ermöglichen.

Welchen Weg nehmen Bilder vom Rohformat bis JPEG

Einige glauben, dass JPEG-Bilder komprimierte Rohdaten mit Huffman-Codierung sind, aber das ist nicht der Fall. Vor der kompakten Speicherung durchlaufen die Daten einen langen Prozess.

Zuerst wird das Farbmodell von RGB auf YCbCr geĂ€ndert. DafĂŒr gibt es sogar einen speziellen Algorithmus — hier. Y bleibt unverĂ€ndert, da es fĂŒr die Helligkeit verantwortlich ist, und seine VerĂ€nderung wird deutlich wahrgenommen.

Das Erste, was mit dem Bild gemacht wird, ist das „Subsampling“ (Subsampling). Es ist einfach zu verstehen: Ein 2x2-Pixelarray wird verwendet, dann werden die Cb- und Cr-Werte — die Mittelwerte jeder der YCbCr-Komponenten dieser 4 Pixel — genommen. So gewinnen wir 6 Byte, anstatt 4 Y, 4 Cb, 4 Cr erhalten wir 4 Y und identische Cb- und Cr-Werte fĂŒr jeden von ihnen (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 — 6 = 6). Selbst bei einer 2×2-Kompensation klingt eine verlustbehaftete Kompression mit einem KompressionsverhĂ€ltnis von 2:1 solide. Dies wird auf das gesamte Bild angewendet. Und so haben wir die GrĂ¶ĂŸe um die HĂ€lfte reduziert. Diese Methode können wir aufgrund unseres Farbsehens nutzen. Ein Mensch wird problemlos einen Unterschied in der Helligkeit wahrnehmen, nicht aber in der Farbe, wenn sie durchschnittlich in einem kleinen Block von Pixeln ist. Auch das Subsampling kann in einer Linie durchgefĂŒhrt werden, 4 Pixel horizontal und vertikal. Die erste Methode wird hĂ€ufiger verwendet. Wenn die BildqualitĂ€t wichtig ist, wird kein Subsampling durchgefĂŒhrt.
Eine anschauliche Darstellung von Subsampling (Habr erlaubte kein EinfĂŒgen des GIFs) — https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Der Hauptteil der Vorbereitung

DCT

Jetzt kommt der schwierigste und notwendigste Teil. Das gesamte Bild wird in Blöcke von 8x8 unterteilt (es wird Padding verwendet, wenn die Auflösung nicht ein Vielfaches der Blockseite ist).

Jetzt wird auf jeden Block angewandt DCT (diskrete Kosinustransformation). In diesem Teil des Bildes wird alles ÜberflĂŒssige entfernt. Mithilfe der DCT muss festgestellt werden, ob dieser Block (8×8) einen monotonen Teil des Bildes beschreibt: Himmel, WĂ€nde; oder ob er eine komplexe Struktur enthĂ€lt (Haare, Symbole usw.). Es ist logisch, dass 64 Ă€hnlich gefĂ€rbte Pixel nur mit einem beschrieben werden können, da die BlockgrĂ¶ĂŸe bereits bekannt ist. Das ist die Kompression: 64 zu 1.

Die DCT verwandelt den Block in ein Spektrum, und dort, wo die Werte abrupt wechseln, wird der Koeffizient positiv, und je schĂ€rfer der Übergang, desto höher ist das Ergebnis. Dort, wo der Koeffizient höher ist, sind auf dem Bild deutliche ÜbergĂ€nge in Farbe und Helligkeit dargestellt, wo er niedriger ist, sind schwache (sanfte) Änderungen der YCbCr-Komponenten im Block.

Quantisierung

Hier werden bereits die Kompressionseinstellungen angewendet. Jeder der Koeffizienten in jeder der 8×8 Matrizen wird durch eine bestimmte Zahl geteilt. Wenn Sie die BildqualitĂ€t nach all seinen Modifikationen nicht weiter reduzieren möchten, sollte der Teiler eins sein. Wenn Ihnen wichtiger ist, der Speicher, den dieses Foto belegt, dann wird der Teiler grĂ¶ĂŸer als 1 sein, und das Ergebnis wird gerundet. So kommt es oft vor, dass nach der Rundung viele Nullen entstehen.

Die Quantisierung erfolgt, um die Möglichkeit einer weiteren Kompression zu schaffen. So sieht das am Beispiel der Quantisierung der Funktion y = sin(x) aus:

JPEG. Kompressionsalgorithmus

Kompression

Zuerst gehen wir zigzagartig durch die Matrix:

JPEG. Kompressionsalgorithmus

Wir erhalten ein eindimensionales Array mit Zahlen. Wir sehen, dass es viele Nullen darin gibt, diese können entfernt werden. DafĂŒr schreiben wir anstelle einer Folge von vielen Nullen 1 Null und danach die Zahl, die die Menge in der Folge angibt. So kann die gesamte ArraygrĂ¶ĂŸe auf 1/3 reduziert werden. Und anschließend wird dieses Array einfach mit der Huffman-Methode komprimiert und bereits in die Datei eingefĂŒgt.

Verwendung

Überall. Wie PNG wird JPEG in Kameras, Betriebssystemen (als Unternehmenslogos, Anwendungssymbole, Thumbnails) und in allen möglichen Bereichen eingesetzt, wo eine effiziente Speicherung von Bildern erforderlich ist.

Ausgabe

Aktuell sind Kenntnisse ĂŒber JPEG nur zu Bildungszwecken wertvoll, denn es ist bereits ĂŒberall integriert und von großen Gruppen von Menschen optimiert worden, aber das Wissen bleibt dennoch ansprechend.

Quellen

Artikel ĂŒber YCbCr auf Wikipedia
Artikel ĂŒber JPEG auf Wikipedia
Ein wenig ĂŒber die DCT aus dem Post auf Pikabu
Artikel ĂŒber DCT auf Wikipedia

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster