Wie kann ich beim Erstellen eines JPEG das Auftreten von Artefakten minimieren?

10

Es gibt zwei Hauptfaktoren, die beim Erstellen von JPEG-Bildern zu digitalen Artefakten führen: Aliasing und Komprimierung.

Beispiel:

Das Konvertieren eines PNG mit Zeichen in ein JPEG oder das Platzieren von Vektorbildern über einem Foto führt zu einer Pixelung an den Rändern. Das Antialiasing erzeugt im Allgemeinen eine Art Unschärfe um sie herum. Wenn das Bild jedoch verlustbehaftet komprimiert wird , gehen auch Teile der Details verloren, sodass die Unschärfe und die Pixelung möglicherweise weniger auffällig werden.

Ist das das Richtige? Das heißt, da eine verlustfreie Komprimierung ein sehr detailliertes Bild erzeugt, sind die durch Aliasing resultierenden Artefakte deutlicher erkennbar, sodass durch Verwendung der richtigen Komprimierung ein Gleichgewicht gefunden werden kann, obwohl die Bildqualität beeinträchtigt wird.

Bearbeiten

Ich habe gerade dieses JPEG in mspaint (3.46KB) gespeichert:

Verlustfrei

Hier ist das gleiche JPEG mit maximaler Komprimierung (niedrigste Qualität, 0,5 KB):

Verlustig

Hier ist noch das gleiche JPEG mit 50% Komprimierung (beachten Sie den Größenunterschied von 1,29 KB):

Half-no-Optionen

Dieselbe 50% ige Komprimierung, jedoch als "progressives JPG" gespeichert, die ursprünglichen EXIF- und XMP-Daten beibehalten und "versucht, mit der ursprünglichen JPG-Qualität zu speichern" (Sie können feststellen, dass keine grauen Pixel vorhanden sind, 2,96 KB):

Halbe Optionen

Und schließlich das gleiche wie zuvor mit deaktiviertem Chroma-Subsampling (gleiche Dateigröße, 2,96 KB):

Half-no-Chroma

Armfuß
quelle
1
Nur neugierig, was ist Ihr Grund, JPG zu wollen, ist es die kleinere Dateigröße? Wenn es Ihrer spezifischen Situation hilft, wissen Sie etwas über dxt-Komprimierung oder Distanzfeldtexturen?
Alan Wolfe
1
Mir ist unklar, was Ihre Frage ist. Möchten Sie wissen, ob es gut ist, mit JPEG zu komprimieren? Möchten Sie wissen, welche Arten von Bildern mit JPEG gut komprimiert werden können? Oder verwenden Sie bereits JPEG und möchten wissen, wie Sie Ihre Bilder erstellen, um die durch JPEG verursachten Artefakte zu minimieren?
Mokosha
@AlanWolfe Ich habe einige Fälle erlebt, in denen ich nur JPEG verwenden konnte (hauptsächlich in Web-Apps), und deshalb musste es in JPEG sein. Vielen Dank, aber ich war weder mit der dxt-Komprimierung noch mit Distanzfeldtexturen vertraut. Nach dem, was ich in Wikipedia gesehen habe , unterscheiden sich die dxt-Algorithmen von den in JPEG verwendeten. Meinen Sie damit, dass sie zum Erstellen von JPEGs verwendet werden können?
Armfoot
@Moshoka danke, es hängt mehr mit Ihrer letzten Frage zusammen: Wie kann die "visuelle Wirkung" von Artefakten in JPEG-Bildern minimiert werden?
Armfoot
Denken Sie daran, dass der mozjpegKompressor einen besonderen Trick hat, um bei solchen Bildern weniger Verzerrungen zu erzeugen. (und es ist im Allgemeinen effizienter als übliche JPEG-Autoren.) Haben Sie es versucht?
Anzeigename

Antworten:

9

Die JPEG-Komprimierung umfasst drei Hauptschritte:

  1. Chroma-Unterabtastung . Das Bild wird von RGB in den YCbCr-Farbraum konvertiert, in dem die Luma oder Helligkeit (Y) getrennt von den Chroma- oder Farbkomponenten Cb und Cr gespeichert wird . Die Y-Komponente wird bei voller Auflösung gehalten, aber Cb und Cr werden heruntergetastet, typischerweise auf die halbe Auflösung auf jeder Achse. Dies nutzt die Tatsache aus, dass das menschliche visuelle System empfindlicher auf feine Details der Helligkeit als auf Farbe reagiert.

  2. Frequenzquantisierung. Die Y-, Cb- und Cr-Bilder werden in eine Frequenzdarstellung umgewandelt, indem sie in 8 × 8-Blöcke aufgeteilt und die diskrete Cosinustransformation (eine Variante der Fourier-Transformation) auf jeden Block angewendet werden. Das Ergebnis ist eine Zahlenmatrix, die die Amplituden verschiedener Raumfrequenzen im Block beschreibt. Diese Zahlen können dann quantisiert werden (auf eine ausgewählte Anzahl von Genauigkeitsbits gerundet). Unterschiedliche Quantisierungsstufen werden für unterschiedliche Frequenzen verwendet, wobei die relativ geringe Empfindlichkeit unseres visuellen Systems für hohe Frequenzen ausgenutzt wird. Hier kommt die Qualitätseinstellung des JPEG-Encoders ins Spiel: Niedrigere Qualitäten verwenden eine gröbere Quantisierung.

  3. Entropiecodierung . Die quantisierten DCT-Werte werden durch einen Entropiecodierer geleitet, der den Bitstrom verlustfrei komprimiert, indem weniger Bits verwendet werden, um die allgemeineren Werte darzustellen, ähnlich einer Zip-Datei.

Die Schritte 1 und 2 sind verlustbehaftet und jedes erzeugt seine eigene Art von Artefakten (obwohl es einige Überlappungen gibt). Die Chroma-Unterabtastung neigt dazu, scharfe Kanten zwischen Regionen unterschiedlicher Farben zu verwischen. Dies ist besonders in der Vektorgrafik sichtbar, wo bunte Formen bösartige Zacken an ihren Rändern aufnehmen. Die Frequenzquantisierung verwischt im Allgemeinen feine Details und erzeugt auch blockförmige Artefakte bei Einstellungen geringer Qualität, da die DCT blockweise durchgeführt wird. Es ist besonders im Text sichtbar.

Aus diesem Grund wird JPEG normalerweise nicht für Bilder verwendet, die Vektorgrafiken oder Text enthalten. Die Komprimierungsalgorithmen sind für diese Fälle schlecht geeignet, obwohl sie für Fotos und andere Bilder mit komplexer Textur und nicht zu scharfen Kanten gut geeignet sind.

Nathan Reed
quelle
Vielen Dank für Ihre ausführliche Erklärung Nathan +1. Ich verstehe, dass die Komprimierungsalgorithmen ihre Grenzen für JPEG haben, aber ich wollte nur herausfinden, ob es ein ausgewogenes Verhältnis zwischen Komprimierungsgrad und anderen Optionen (beim Speichern) gibt, die die Artefakte weniger auffällig machen können. Ich habe meine Frage mit Beispielen bearbeitet.
Armfoot