Décodant un bloc JPEG Huffman (tableau)

voix
13

Le bloc suivant est emboîté par des marqueurs de blocs de Huffman

-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 est la longueur de la table comme un nombre entier et ne sont pas compris dans le bloc ici

selon la norme JPEG, la première adresse fait aparently il une table AC à destination 0 (0x10)

et aparently à partir de là il est une table huffman.

Alors, comment est-il décodé?

Créé 14/10/2009 à 02:54
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
21

Les 16 octets suivants après le 0x10 vous dire combien de codes de chaque longueur. Dans votre exemple, il existe des codes de longueur 0 1 bit, une longueur de code de 2 bits, 2 codes de longueur de 3 bits, 4 codes de longueur de 4 bits, de 3 codes de longueur de 5 bits, et ainsi de suite.

Ceux-ci sont ensuite suivis par les valeurs qui sont codées par ces codes, dans l'ordre. Encore une fois de votre exemple:

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

Vous pouvez ensuite construire un arbre binaire de haut en bas, attribuer les symboles dans l'ordre. Dans cet exemple, vous obtenez:

Symbol | Code 
-------+------
0x01   | 00
0x02   | 010
0x11   | 011
0x00   | 1000
0x03   | 1001
0x04   | 1010
0x21   | 1011
...etc
Créé 14/10/2009 à 09:13
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more