Moin!
Ich sagte _alle_, das ist natürlich falsch. Zwar gilt dies für (fast) alle zip, rar, ... Archive, jedoch sind die vorgestellten Algorithmus völlig unvollständig. Es gibt tausende von Algorithmen, jeder hat einen gewissen "Anwendungsbereich", wo er optimale Kompression erreicht. Kleine Auszüge:
GIF => eigentlich nix anderes als Lempel-Ziv
JPEG => Diskrete Cosinus Transformation
Sorry, wenn ich dich korrigieren muß, aber das wirklich komprimierende an JPEG ist nicht die DCT, sondern RLE.
Mit DCT werden (im Fall von JPEG 8x8 Pixel große) Bildblöcke von der Pixeldarstellung in Ortsfrequenzen gewandelt und als Frequenzspektrum betrachtet. Wie hat man sich Ortsfrequenzen vorzustellen? Was eine Frequenz ist, sollte klar sein: Eine Schwingung. Wenn man nun ein Bild hat, dann hat eine einzelne Pixelzeile hintereinander folgend jeweils eine unterschiedliche Helligkeit. Malt man sich den Helligkeitsverlauf als Kurve auf ein Blatt Papier, sieht man die Ortsfrequenz. :)
Mit der DCT wird der zweidimensionale Pixelblock in einen zweidimensionalen Ortsfrequenskomponentenblock überführt. Außerdem werden gewisse hohe Frequenzen je nach Kompressionsgrad mehr oder weniger unterdrückt, indem man die Frequenzanteile durch einen gewissen Faktor größer 1 dividiert (bei der Dekodierung wird mit diesem Faktor multipliziert, um es rückgängig zu machen). Durch die Division entstehen vor allem bei den hohen Frequenzanteilen viele Werte kleiner als 1 bzw. fast 0 - die werden dann auf 0 gerundet. Und da sich viele Nullen wunderbar mit RLE komprimieren lassen, ist JPEG so schön klein.
Ok, der Verlust bei JPEG besteht in der Rundung, die Komprimierung aber ist die verlustfreie RLE. Der schlaue Trick bei JPEG ist eben, durch geschickte Transformation aus einem schwer komprimierbaren Bild möglichst ein leicht komprimierbares zu machen. Mit der DCT gelingt das, weil auch bei sehr verschiedenen Pixeln in einem Block nicht immer alle Frequenzen ausgenutzt werden oder nur sehr geringen Einfluß haben.
- Sven Rautenberg
Diese Signatur gilt nur am Freitag.