2011-02-08 11 views
6

Ho sentito che Jpeg usa il codice di Hufman. Cos'è il codice Huffman?Tecnica di codifica Jpeg

+3

Questa è la codifica di Huffman **. Se l'hai cercato su google, la prima risposta ti indirizzerà alla [pagina di Wikipedia] (http://en.wikipedia.org/wiki/Huffman_coding). – darioo

risposta

8

La codifica di Huffman è un metodo che accetta simboli (ad esempio byte, coefficienti DCT, ecc.) E li codifica con codici di lunghezza variabile assegnati in base alle probabilità statistiche. Un simbolo usato frequentemente sarà codificato con un codice che occupa solo un paio di bit, mentre i simboli che vengono usati raramente sono rappresentati da simboli che richiedono più bit da codificare.

Un file JPEG contiene fino a 4 tabelle huffman che definiscono il mapping tra questi codici a lunghezza variabile (che richiedono da 1 a 16 bit) ei valori del codice (che è un byte di 8 bit). Generalmente queste tabelle comportano il conteggio della frequenza con cui ogni simbolo (parola di codice DCT) appare in un'immagine e alloca le stringhe di bit di conseguenza. Ma la maggior parte degli encoder JPEG usa semplicemente le tabelle di Huffman presentate nello standard JPEG. Alcuni codificatori consentono di ottimizzare queste tabelle, il che significa che viene creato un albero binario ottimale che consente di generare una tabella huffman più efficiente.

Dai un'occhiata alla http://www.cs.duke.edu/csed/poop/huff/info/ per una spiegazione molto più profondo

+1

Grazie mille, un'altra domanda, quali sono i coefficienti DCT che hai citato? –

7

Giusto per completare la risposta data da david99world: codifica

Huffman è solo una fase finale di compressione JPEG. L'importante compressione proviene dalla matrice di quantizzazione applicata al DCT. Cos'è questo? Bene, la trasformazione DCT è solo un modo per mostrare le informazioni sull'immagine per frequenze. Invece di avere una matrice con i valori dei pixel in questo modo:

enter image description here

si avrà una matrice con coefficienti DCT, che mostra le informazioni di frequenza, concentrando la maggior parte informazioni nell'angolo superiore sinistro:

enter image description here

Ora che si hanno i coefficienti DCT, ecco la fase di compressione reale, che è la divisione di tutti i valori mediante una matrice di quantizzazione basata sulla visione dell'occhio umano. Questa matrice renderà zero quei coefficienti contenenti informazioni non rilevanti per l'occhio umano e lascerà quasi gli stessi quelli importanti.

enter image description here

Perché questo passo importante per la compressione? Poiché ora che hai molti zeri, la codifica di Huffman raggruppa grandi quantità di zeri in parole in codice di dimensioni ridotte, quindi stai salvando la memoria di archiviazione.

enter image description here

Si può cercare di programma in Matlab tutta algoritmo e lo capirete meglio. Si noti che se si applica la matrice Q più volte, si avrà più compressione (più zeri), ma anche un'immagine di qualità inferiore.

Spero che questo chiarisca le cose per voi.