Die JPEG-Kodierung kann man nicht ändern, sonst ist das ganze kein JPEG mehr.@Frank: An welcher Stelle würdest Du denn was am Jpg-Verfahren verbessern?
Nein.Was Kachelübergreifendes? Oder in schwachen Kacheln anders gewichten?
Die derzeitigen Implementierungen von JPEG laufen alle mit 8 bit Genauigkeit mit mehrfachen Runden auf 8 bit. Die freie Referenzimplementierung läuft so (kann man sich ja ansehen), aber selbst Photoshop scheint genau das gleiche zu machen, denn es treten genau die gleichen Fehler an den gleichen Stellen auf.
Fehler machen sowohl die JPEG-Kodierer wie die JPEG-Dekodierer. Das macht das Problem nahezu unlösbar, weil beide fehlergefixt werden müßten.
Kodierer (Input sei 16 bit):
- Abschneiden von 16 bit je Farbe auf 8 bit pro Farbe
- Umrechnen von RGB auf YUV, Runden der Ergebnisse auf 8 bit
- Unterabtastung von YUV auf YUV420, Runden der Farb-Ergebnisse auf 8 bit
- DCT-Transformation, Runden der Ergebnisse auf 8 bit
- Jetzt kommt die eigentliche Quantisierung, die eigentlich die einzige verlustbehaftete Operation sein sollte, bei hohen Qualitätseinstellungen entstehen hier aber die geringsten Verluste!
- ... weitere verlustlose Binäroperationen
Dekoder:
- ... verlustlose Binäroperationen
- 8 bit DCT-Koeffizienten werden zurücktransformiert und meist wieder auf 8 bit gerundet.
- Tiefpaßfilterungder Farben, danach Rundung auf 8 bit
- Umrechnung von YUV in RGB, danach Rundung auf 8 bit
- Ausgabe des Bildes als RGB/8.
Diese dauernde Runden macht die Fehler deutlich größer als notwendig.
Videoverarbeitung in Fernsehgeräten arbeitet deswegen auch mit mindestens 10 bit Genauigkeit, meist mit 11 bit Genauigkeit.
Eine druchgängige 8 bit-Verarbeitungen mit dauerndem Runden läßt einem im günstigsten Fall bei 6,5 bit Endgenauigkeit ankommen, obwohl JPEG an sich bis 10 bit Genauigkeit zuläßt (vollständiger Coder/Decoder-Prozeß).