2009-10-14 9 views
13

El siguiente bloque está anidado por los marcadores de bloque HuffmanDecodificación de un bloque JPEG Huffman (tabla)

-HUFF---------------------------------------------------------------------0084- 
    10 0 1 2 4 3 4 6 5 6 8 a 9 4 2 3 
    0 1 2 11 0 3 4 21 5 12 31 6 41 51 61 13 
    22 71 81 91 a1 14 32 b1 d1 f0 15 23 35 42 b2 c1 
    7 16 24 33 52 72 73 e1 25 34 43 53 62 74 82 94 
    a2 f1 26 44 54 63 64 92 93 c2 d2 55 56 84 b3 45 
    83 46 a3 e2 
------------------------------------------------------------------------------- 

0084 es la longitud de la tabla como un número entero y no está incluido en el bloque de aquí

según para el estándar JPEG, la primera dirección al parecer la convierte en una tabla de CA en el destino 0 (0x10)

y aparentemente a partir de ahí es una tabla huffman.

Entonces, ¿cómo se decodifica?

Respuesta

20

Los siguientes 16 bytes después del 0x10 te dice cuántos códigos de cada longitud. En su ejemplo, hay 0 códigos de longitud 1 bit, 1 código de longitud 2 bits, 2 códigos de longitud de 3 bits, 4 códigos de longitud de 4 bits, 3 códigos de longitud de 5 bits, y así sucesivamente.

Estos son seguidos por los valores codificados por esos códigos, en orden. Una vez más de su ejemplo:

Code length | Number | Symbol(s) 
------------+--------+---------- 
1 bit  | 0  | 
2 bits  | 1  | 0x01 
3 bits  | 2  | 0x02 0x11 
4 bits  | 4  | 0x00 0x03 0x04 0x21 
5 bits  | 3  | 0x05 0x12 0x31 
... etc 

A continuación, construir un árbol binario de arriba hacia abajo, la asignación de los símbolos en orden. En este ejemplo, obtienes:

Symbol | Code 
-------+------ 
0x01 | 00 
0x02 | 010 
0x11 | 011 
0x00 | 1000 
0x03 | 1001 
0x04 | 1010 
0x21 | 1011 
...etc 
+0

muchas gracias, hombre esto me ha ayudado a entender mucho :) – Supernovah

Cuestiones relacionadas