2009-10-14 2 views
13

Следующий блок вложен маркерами блок ХаффманаДекодирование блока JPEG Хаффмана (таблица)

-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 длина таблицы в виде целого числа, а не входит в блок здесь

согласно к стандарту JPEG, первый адрес, соответственно, делает его таблицей AC в пункте назначения 0 (0x10)

и, соответственно, оттуда это стол huffman.

Итак, как оно декодируется?

ответ

20

Следующие 16 байт после 0x10 сообщают вам, сколько кодов каждой длины. В вашем примере есть 0 кодов длиной 1 бит, 1 код длиной 2 бита, 2 кода длиной 3 бита, 4 кода длиной 4 бита, 3 кода длиной 5 бит и т. Д.

Затем следуют значения, которые кодируются этими кодами в порядке. Опять же из вашего примера:

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 

Вы затем построить бинарное дерево сверху вниз, назначая символы в порядке. В этом примере вы получаете:

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

спасибо большое, что это помогло в моем понимании много :) – Supernovah

Смежные вопросы