NÉN DỮ LIỆU
• Đại lượng đo thông tin
– Lượng thông tin trong tín hiệu có thể không bằng lượng dữ liệu của nó mà quan hệ mật thiết với xác suất xuất hiện của nó.
• Tự-thông tin (lượng tin)
– Thông tin được mang bởi một biến cố A có xác suất xuất hiện P[A] là:
– Thông tin không (lượng tin =0):
• Mặt trời mọc đằng đông.
– Lượng tin ít
• Máy điện thoại di động trong tương lai đều có khả năng multimedia
[ ] [ ]
2 2
log 1 log
IA P A
= P A = − IA
P[A]
1 0
NÉN DỮ LIỆU NÉN DỮ LIỆU
• Entropy
– Lượng tin trung bình của nguồn tin, một cách gần đúng, là số bit trung bình của thông tin yêu cầu để biểu diễn các ký hiệu của nguồn tin.
– Với nguồn N ký hiệu Xi thì entropy được định nghĩa như sau:
• H(S)≥0; đối với mã hoá nhị phân, H(S) thể hiện mã hoá với số bít/ký hiệu tối thiểu.
• Ví dụ:
Trong một ảnh phân bố đều ở thang xám (256 mức): pi=1/256, số bit mã hoá cho mức xám là log2256=8bits. Entropy của ảnh này là
H(S)=Σpilog2(1/pi)=8bits/ký hiệu.
Vậy, trong trường hợp phân bố đều này, mã hoá độ dài cố định sẽ đạt được số bit tối thiểu. Trong trường hợp tổng quan thì mã hóa độ dài cố định sẽ
[ ] 2 [ ]
1
( ) N i log i
i
H S P X P X
=
= −∑
NÉN DỮ LIỆU NÉN DỮ LIỆU
• Mã hoá độ dài cố định FLC (Fixed-Length Code)
– Đặc điểm:
• Sử dụng số bit cố định để biểu diễn mọi ký hiệu của nguồn.
• Đơn giản trong quá trình mã hoá/giải mã.
– Ví dụ
• Mã ASCII (American Standard Code for Information Interchange) sử dụng 8 bits để mã hoá các ký tự.
– Truyền chuỗi: DTVT: 68 84 86 84: 01101000 10000100 10000110 10000100
– Nhược điểm:
• Không hiệu quả
NÉN DỮ LIỆU NÉN DỮ LIỆU
• Mã hoá độ dài thay đổi VLC (Variable-Length Code)
– Đặc điểm
• Sử dụng số bit khác nhau để biểu diễn các ký tự khác nhau.
• Các ký tự có xác suất xuất hiện cao được phân bố bởi từ mã ngắn và ngược lại.
• Hiệu quả trong việc biểu diễn hơn, nén tốt hơn.
– Ví dụ:
• Mã Morse.
• Shannon-Fano.
• Huffman.
• Mã hoá loạt dài (RLC).
NÉN DỮ LIỆU NÉN DỮ LIỆU
• Thuật toán Shannon-Fano
• Ví dụ mô tả thuật toán:
• Mã hoá theo thuật toán Shannon-Fano:
- Sắp xếp các ký tự theo thứ tự giảm dần của tần suất xuất hiện.
- Tính xác suất.
- Đệ quy làm hai phần, mỗi phần có tổng xác suất gần bằng nhau. Mã hoá phần trên bằng bit 0 (hoặc bit 1), phần dưới bằng bit 1 (hoặc bit 0).
- Vẽ sơ đồ cây.
- Tính Entropy, số bits mã hoá trung bình và số bit mã hoá thông thường.
Ký hiệu A B C D E
Số lần xuất hiện 15 7 6 5 6
NÉN DỮ LIỆU NÉN DỮ LIỆU
• Entropy của nguồn:
• Số bits sử dụng trung bình:
(tổng bits / số lần xuất hiện)
/symbol
• Số bít mã hoá thông thường:
log5=3bits/symbol
G cố
A B C
E D
0
0 1
1
1 0 1 0
2
1 15 7 6 6 5
( ) log .1.38 .2.48 2.7 2.7 2.96
39 39 39 39 39
( ) 2.19.
E i
i A i
H S p
p H s
=
= = + + + +
=
∑
30 14 12 18 15
2.28 its R = + + + +39 ; b
Ký hiệu Đếm Pi Log2(1/pi) Mã Tổng bits
A 15 15/39 1.38 0 0 30
B 7 7/39 2.48 0 1 14
C 6 6/39 2.7 1 0 12
E 6 6/39 2.7 1 1 0 18
D 5 5/39 2.96 1 1 1 15
NÉN DỮ LIỆU NÉN DỮ LIỆU
• Mã hoá Huffman
– Nguyên tắc:
Dựa vào mô hình thống kê của dữ liệu gốc, ký tự có xác suất càng cao thì mã hoá với từ mã càng ngắn.
– Thuật toán:
- Tính tần suất xuất hiện trong dữ liệu gốc, sắp xếp theo thú tự giảm dần.
- Xét từ dưới lên trên, bắt đầu từ hai ký tự có xác suất bé nhất, quy đinh mỗi nhánh là 0 (hoặc 1) hợp lại với nhau thành nút có xác suất bằng tổng hai xác suất hợp thành.
- Lặp lại cho đến hết.
NÉN DỮ LIỆU NÉN DỮ LIỆU
– Xét ví dụ trên
– Số bít trung bình: 87/39=2.23 /SYMBOL(<2.28) – Hiệu quả hơn Shannon – Fano.
Ký hiệu Xác suất Mã Tổng bit
A 15/39 1 15
B 7/39 000 21
C 6/39 001 18
E 6/39 010 18
D 5/39 011 15
0 1 0
1 0
1 11/39
13/39 0 1
24/39
NÉN DỮ LIỆU NÉN DỮ LIỆU
• Mã hoá loạt dài RLC (Run-Length Coding)
– Nguyên lý
• Mã hoá loạt ký hiệu bằng chiều dài và ký hiệu của loạt đó.
– Đặc điểm
• Mã hoá không tổn hao
• Mã hoá liên ký tự.
• Hiệu quả với một số nguồn tín hiệu, nhất là sau phép chuyển đổi.
– Ví dụ
• 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 15: (11,13)3 (9,13)15
• mã: (11,3) (9,15)
Bit thô
Run-length side
Cần 4 bits mã hoá Cần 2 bits mã hoá
NÉN DỮ LIỆU NÉN DỮ LIỆU
• Mã hoá Lempel-Zip-Welch:
– Nén từ điển được Jacob Lampel và Abraham Ziv đề xuất năm 1977, phát triển thành họ LZ, LZ77, LZ78.
– Năm 1984, Terry Welch cải tiến thành LZW.
– Nguyên tắc: Dựa vào việc xây dựng một từ điển lưu các chuỗi ký tự có tần suất cao và thay thế bằng một từ mã mới.
– LZW tổ chức từ điển tốt hơn nên nâng cao tỷ lệ nén.
– Ví dụ: Xét từ điển có độ lớn bằng 4096 giá trị từ mã, vậy độ dài lớn nhất của từ mã là 12 bits (212=4096).
– Xét chuỗi vào ABCBCABCABCD.
0 0
… …
255 255
256 256 | Clear Code
257 257 | End of Information 258 Chuỗi mới
… …
4095 Chuỗi mới
256: Mã xoá CC để khắc phục tình trạng mẫu lặp lớn hơn 4096, nếu mẫu lặp lớn hơn 4096 thì gởi CC để xây dựng từ điển cho phần tiếp theo.
EoI: Báo hiệu hết một phần nén.
NÉN DỮ LIỆU NÉN DỮ LIỆU
• Thuật toán:
- w = NIL;
- trong khi đọc được ký tự thứ k trong chuỗi:
- nếu wk đã tồn tại trong từ điển thì w = wk
- còn không thì thêm wk vào trong từ điển, mó hoỏ ngừ ra cho w; w = k;
- k=k+1;
• Chuỗi ra: 65 66 67 259 258 67 262 68
• Đầu vào 12ktx8bits=96 bits.
• Đầu ra : 5ktx8+3ktx9=67bits.
count w k wk Output index Symbol
0 Nil A A
1 A B AB 65 258 AB
2 B C BC 66 259 BC
3 C B CB 67 260 CB
4 B C BC
5 BC A BCA 259 261 BCA
6 A B AB
7 AB C ABC 258 262 ABC
8 C A CA 67 263 CA
9 A B AB
10 AB C ABC
11 ABC D ABCD 262 264 ABCD
12 D nil D 68
NÉN DỮ LIỆU NÉN DỮ LIỆU
• Lưu đồ
Start w=nil count=0 k=str[count]
k=nil?
wk in dict?
w=wk Output(w)
index++
Symbol=dict[index]= wk.
Output(w).
w=k End
Y
N
Y
N
NÉN DỮ LIỆU NÉN DỮ LIỆU
• Mã chuyển đổi đơn giản (Simple Transform Coding)
• Ví dụ: Mã hóa chuyển đổi đơn giản cho block 2x2pixel đơn sắc với các bước như sau:
1. Lấy pixel ở góc trên, bên trái làm giá trị gốc cho block (pixel A).
2. Tính 3 chuyển đổi khác nhau là sự khác biệt giữa các pixel tương ứng và pixel A (B-A, C-A, D-A).
3. Lưu giá trị gốc và 3 chuyển đổi của các pixel.
NÉN DỮ LIỆU NÉN DỮ LIỆU
• Ta dễ dàng xác định chuyển đổi thuận
– X0=A.
– X1=B-A.
– X2=C-A.
– X3=D-A.
• Và chuyển đổi ngược:
– An=X0.
– Bn=X1+X0.
– Cn=X2+X0.
– Dn=X3+X0
NÉN DỮ LIỆU NÉN DỮ LIỆU
• Giảm dư thừa dữ liệu bởi phép chuyển đổi
– Độ dư thừa được chuyển đổi thành giá trị Xi.
– Nén dữ liệu nhờ sử dụng ít bit để biểu diễn sự khác biệt (lượng tử).
• Ví dụ: Nếu mã hóa đều sử dụng 8 bit để mã hóa cho pixel, ta cần tổng cộng 8x4=32 bits để mã hóa cho 4 pixel.
• Đối với mã hóa chuyển đổi, pixel gốc vẫn dùng 8 bit. Các giá trị chuyển đổi còn lại sử dụng 4 bit để mã hóa. Như vậy, tổng bit dùng là 20bits, số bit mã hóa cho 1 pixel trung bình là 5 bít.
NÉN DỮ LIỆU NÉN DỮ LIỆU
• Nhược điểm:
• Quá đơn giản.
• Cần tổ chức các block lớn (tiêu biểu là 8x8pixel).
• Khi mã hóa với sai biệt lớn sẽ là lý do mất mát