Ich habe gehört, dass Jpeg den Hufman-Code verwendet. Was ist der Huffman-Code?
Antworten
Zu viele Anzeigen?Die Huffman-Kodierung ist eine Methode, bei der Symbole (z. B. Bytes, DCT-Koeffizienten usw.) mit Codes variabler Länge kodiert werden, die nach statistischen Wahrscheinlichkeiten zugewiesen werden. Ein häufig verwendetes Symbol wird mit einem Code kodiert, der nur ein paar Bits benötigt, während Symbole, die selten verwendet werden, durch Symbole dargestellt werden, die mehr Bits zur Kodierung benötigen.
Eine JPEG-Datei enthält bis zu 4 Huffman-Tabellen, die die Zuordnung zwischen diesen Codes variabler Länge (zwischen 1 und 16 Bit) und den Codewerten (ein 8-Bit-Byte) festlegen. Bei der Erstellung dieser Tabellen wird in der Regel gezählt, wie häufig jedes Symbol (DCT-Codewort) in einem Bild vorkommt, und die Bit-Strings werden entsprechend zugewiesen. Die meisten JPEG-Encoder verwenden jedoch einfach die im JPEG-Standard enthaltenen Huffman-Tabellen. Bei einigen Encodern können diese Tabellen optimiert werden, d. h. es wird ein optimaler Binärbaum erstellt, mit dem eine effizientere Huffman-Tabelle erzeugt werden kann.
Werfen Sie einen Blick auf http://www.cs.duke.edu/csed/poop/huff/info/ für eine viel tiefere Erklärung
Nur um die Antwort von david99world zu vervollständigen:
Die Huffman-Kodierung ist nur der letzte Schritt der JPEG-Kompression. Die wichtige Komprimierung erfolgt durch die Quantisierungsmatrix auf die DCT angewandt. Was ist das? Nun, die DCT-Transformation ist einfach eine Möglichkeit, Bildinformationen durch Frequenzen darzustellen. Anstatt eine Matrix mit Pixelwerten wie diese zu haben:
erhalten Sie eine Matrix mit DCT-Koeffizienten, die Frequenzinformationen enthält, wobei die meisten Informationen in der linken oberen Ecke konzentriert sind:
Jetzt, da die DCT-Koeffizienten vorliegen, kommt der eigentliche Komprimierungsschritt, nämlich die Division aller Werte durch eine Quantisierungsmatrix, die auf dem menschlichen Sehvermögen basiert. Diese Matrix macht die Koeffizienten, die für das menschliche Auge nicht relevante Informationen enthalten, zu Nullen und lässt die wichtigen Koeffizienten fast unverändert.
Warum ist dieser Schritt für die Kompression wichtig? Weil Sie jetzt eine Menge Nullen haben, Huffman-Kodierung gruppiert große Mengen von Nullen in kleinen Codewörtern, so dass Sie Speicherplatz sparen.
Sie können versuchen, den gesamten Algorithmus in Matlab zu programmieren, dann werden Sie ihn besser verstehen. Beachten Sie, dass eine mehrfache Anwendung der Q-Matrix zu einer stärkeren Komprimierung (mehr Nullen), aber auch zu einer schlechteren Bildqualität führt.
Ich hoffe, das macht die Sache für Sie klarer.