Ist es möglich, JPEG in ein verlustfreies Format zu konvertieren und ohne Qualitätsverlust zurück zu konvertieren?

1736
RadarNyan

Angenommen, ich habe eine verlustfreie Version eines Bildes, das zuvor im JPEG-Format komprimiert wurde (wenn Sie beispielsweise ein JPEG-Bild in mspaint öffnen und als BMP speichern, weiß ich, dass einige Metadaten in diesem Prozess verloren gehen würden, aber das ist nicht meine Sorge)

Ich würde gerne wissen, ob dies möglich ist und wie es zurück in das JPEG-Format konvertiert werden kann, ohne dass die Bildqualität beeinträchtigt wird. Das bedeutet, dass jedes Pixel genau gleich ist.

BEARBEITEN: Ich verstehe voll und ganz, dass das Konvertieren eines JPEG-Bildes in ein verlustfreies Format keine zusätzliche Qualität bringt. Ich frage das aus folgenden Gründen: Ich habe eine PNG-Datei, die aus einer SWF-Datei extrahiert wurde. Ursprünglich (in der SWF-Datei) war das Objekt ein JPEG-Bild + Alpha-Kanal, dessen Dateigröße im Vergleich zu meiner PNG-Datei viel kleiner ist. Ich möchte das Originalformat (JPEG + Alphakanal), habe jedoch keine Kopien der ursprünglichen SWF-Datei mehr (und ich konnte auch keine online finden), sodass ich den Extraktionsvorgang nicht wiederholen kann.

2
Geht es eigentlich nur um Ihr Verständnis oder möchten Sie dies tun (und wenn ja, warum)? Dave vor 6 Jahren 0
Ich habe immer noch kein Problem - aber als Faustregel gilt: Jede (weitere) verlustbehaftete Kodierung verringert die Qualität ** - es ist nur ein Best-Case-Szenario, das nicht ohne viel Aufwand erreicht werden kann (manuell in Ordnung) -Tuning-Parameter, "beste" Werkzeuge verwenden, ...), um bei verlustbehafteter Komprimierung die gleiche Qualität zu erhalten. Und da JPEG nicht viel Feinabstimmung bietet ... Die Antwort lautet also: ** nein **. Es ist jedoch möglich, dass der weitere Qualitätsverlust nicht sichtbar wird - aber das müssen Sie ausprobieren, da dies wirklich von den verwendeten Formaten (Encodern), dem fraglichen Bild und dem Anwendungsfall abhängt. flolilolilo vor 6 Jahren 1

4 Antworten auf die Frage

3
harrymc

JPEG ist ein verlustbehaftetes Format und es gibt keinen Weg daran vorbei. Selbst bei einer Komprimierungsqualität von 100 beträgt die Komprimierungsrate immer noch 2,6: 1 ( Wikipedia JPEG ).

Es wurden einige Varianten für verlustfreies JPEG vorgeschlagen, wie z. B. JPEG 2000, aber sie haben sich nicht durchgesetzt und ihre Unterstützung ist sehr schlecht.

Sie sollten besser in ein verlustfreies Format wie PNG konvertieren, das immer noch komprimiert wird, jedoch ohne Verlust.

Normalerweise ja, obwohl im jpg -> png -> jpg-Prozess theoretisch möglich sein sollte, dass der png -> jpg-Prozess dieselbe Kompressionsmethode anwendet wie das ursprüngliche jpg. In der Praxis ist dies jedoch absichtlich fast unmöglich. Wenn auch nur geringfügige Änderungen vorgenommen wurden, führt dies fast immer dazu, dass die 2. JPG-Komprimierung die JPG-Artefakte aus der 1. Komprimierung zu komprimieren versucht, die nicht mehr richtig ausgerichtet sind. BeowulfNode42 vor 6 Jahren 1
3
Liam

Sie fragen im Wesentlichen, ob der Dekodierungsprozess für ein JPEG-Bild umgekehrt werden kann. Dies ist eine ganz andere Absicht als bei einem herkömmlichen JPEG-Encoder, und mir ist keine Software bekannt, die dies ermöglicht. Mathematisch ist dies möglich *, solange für das Bild nach der Kodierung keine Transformation oder andere Modifikation angewendet wurde, aber programmatisch, wie schwierig könnte es sein?

Das erste Problem ist der Farbraum - JPEG verwendet unterabgetastete Farben (die Farbe wird über eine Gruppe von Pixeln abgetastet) yCbCr, während eine Bitmap RGB ist. Unvermeidliche Verluste beim Umwandeln zwischen diesen Farbräumen (und auch bei jeder Gammaeinstellung) führen zu Rauschen. Das zweite zu lösende Problem besteht darin, dass JPEG die Bilddaten als Makroblöcke (Teilbilder mit N × N Größe) aufzeichnet, die aus dem Ausgabebild des Decoders abgeleitet werden müssen. Eine ausführlichere Erläuterung des JPEG-Formats und des Kodierungsprozesses finden Sie hier http://www.guillermito2.net/stegano/jsteg/

'dekodieren' eines JPEGs:

Um eine Annäherung an die ursprünglichen JPEG-Daten zu erstellen, müssen wir die Unterabtastung, Größe und Ausrichtung von Makroblöcken und DCT-Koeffizienten (Discrete Cosine Transform) ermitteln, die zu ihrer Kodierung verwendet wurden. Der Rest ist identisch mit einem normalen JPEG-Kodierungsprozess. Eine naive Implementierung, die mir in den Sinn kommt, ist "fundiertes Raten und Prüfen": Nehmen Sie an, dass einige gängige JPEG-Implementierungen zum Erstellen des Bildes verwendet wurden, und versuchen Sie, sie anzuwenden, bis eine gefunden wird, die "JPEG-ähnliche" Ergebnisse der DCT (normalerweise Nullen) aufweist hohe Frequenzen).

Danach die Koeffizienten auf minimalen Fehler im Vergleich zum Original (dh Bitmap des komprimierten Bildes) abstimmen. Dieser Prozess führt immer noch zu einem Kompromiss zwischen Fehler und Dateigröße, sollte jedoch aus praktischen Gründen nahe genug sein.

Quelle : Bisherige Überprüfung der DNx- und ProRes-Videocodecs, bei denen für jeden einzelnen Frame eine JPEG-artige Codierung angewendet wird (Software, die decodierte Frames umkehrt, wäre ein sehr interessantes und möglicherweise nützliches Nebenprojekt gewesen).

* Es gibt eine Reihe von Eingabedaten, die beim Durchlaufen des Original-JPEG-Decoders zu einer identischen Ausgabe führen. Es ist jedoch äußerst unwahrscheinlich, dass eine Rekonstruktion eine byteweise Kopie (Ignorieren von Metadaten) der Originaldatei ist, da während der Decodierung Informationen verloren gingen verarbeiten.

0
Marc.2377

Wenn Sie ein JPEG-Bild mit einem beliebigen Editor öffnen und als BMP speichern, erhalten Sie keine höhere Qualität als die bereits in Ihrer .jpgDatei vorhandene. Das wäre, als würde man eine MP3-Datei mit niedriger Bitrate (z. B. 128 KBit / s) in ein viel besseres Format konvertieren flac, in der Hoffnung, dass die Qualität auf magische Weise wiederhergestellt wird. Es wird nicht

Informationen gingen beim ersten Speichern des Bildes in jpg verloren, wie harrymc gesagt hat; Es gibt keine Möglichkeit, diese Informationen aus dieser JPG-Datei zurückzuholen.

Eine verlustbehaftete Kompression ist "zerstörerisch" oder auch als "irreversibel" bekannt. Siehe https://en.wikipedia.org/wiki/Lossy_compression .

0
PiedPiper

Bei der Konvertierung in ein JPEG-Format waren Informationen fast sicher verloren. Beim Konvertieren dieser Datei in ein BMP werden die im JPEG-Format gespeicherten Informationen erhalten. Wenn Sie das BMP jedoch wieder in ein JPEG-Format konvertieren, verlieren Sie möglicherweise noch mehr Informationen