2009-10-14 32 views
13

Khối sau được lồng bởi dấu khối HuffmanGiải mã một khối JPEG Huffman (bảng)

-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 là chiều dài của bảng là một số nguyên và không được bao gồm trong khối đây

theo với tiêu chuẩn JPEG, địa chỉ đầu tiên làm cho nó trở thành một bảng AC ở đích 0 (0x10)

và từ đó trở đi nó là một bảng huffman.

Vì vậy, nó được giải mã như thế nào?

Trả lời

20

16 byte tiếp theo sau 0x10 cho bạn biết số lượng mã của mỗi độ dài. Trong ví dụ của bạn, có 0 mã có độ dài 1 bit, 1 mã có độ dài 2 bit, 2 mã có độ dài 3 bit, 4 mã có độ dài 4 bit, 3 mã có chiều dài 5 bit, v.v.

Sau đó, các giá trị này được mã hóa bởi các mã đó theo thứ tự. Một lần nữa từ ví dụ của bạn:

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 

Sau đó, bạn tạo một cây nhị phân từ trên xuống, gán biểu tượng theo thứ tự. Trong ví dụ này, bạn nhận được:

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

cảm ơn rất nhiều người đã giúp tôi hiểu rất nhiều :) – Supernovah

Các vấn đề liên quan