Tải bản đầy đủ (.pptx) (25 trang)

Giáo trình Xử lý ảnh- Chapter 10 - Compression.

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (318.58 KB, 25 trang )

NHẬP MÔN XỬ LÝ ẢNH
CHƯƠNG 10: NÉN ẢNH
Biên soạn: TS Ngô Hữu Phúc
1Tham khảo bài giảng ĐH Vanderbilt
Giới thiệu

Để có ảnh chất lượng cao (độ nét cao, màu trung thực) thì dung lượng file ảnh
cũng tăng (đáng kể).

Ví dụ file ảnh kích thước (640 x 480), sử dụng 24 bit màu sẽ có kích thước: 640 x 480 x 3 =
921600 Byte = 900KB. Kích thước lớn sẽ tốn không gian lưu trữ và thời gian truyền.

Để giải quyết vấn đề này người dùng các phương pháp nén đối với file ảnh. Có hai
dạng nén:

Nén bảo toàn (không làm mất thông tin) và

nén không bảo toàn.

Phương pháp thứ hai thường dùng trong truyền hình và một số cấu trúc ảnh.

Trong bài này chúng ta chỉ nghiên cứu các phương pháp nén bảo toàn:

Mã loạt – Run Length Coding (RLC),

mã Huffman,

mã LZW.
2Tham khảo bài giảng ĐH Vanderbilt
Phương pháp nén RLC - Mã loạt
Giả sử chúng ta có dãy dữ liệu: aaaaaabbbbbbbbbbccccaaaaacaa


Nhận xét:
Có thể thay thế dãy trên bởi dãy: 6a10b4c5a1c2a trong đó 6 là số các ký tự a xuất
hiện liên tiếp, 10 là số ký tự b xuất hiện liên tiếp, 4 là số ký tự c xuất hiện liên tiếp...
Như vậy nếu số các ký tự liên tiếp giống nhau nhiều thì phương pháp này sẽ cho
phép nén với hiệu xuất cao.
Đối với dữ liệu ảnh, những phần tử trong một chuỗi dữ liệu liên tiếp thường giống
nhau. Như vậy, thay vì phải lưu trữ lần lượt mọi điểm của chuỗi (dư thừa) ta xét từng
dòng dữ liệu và gom những điểm kề cận giống nhau thành từng nhóm theo tư tưởng
trên.
3Tham khảo bài giảng ĐH Vanderbilt
Phương pháp nén RLC - Mã loạt
Nén RLC là chuyển một dòng x1x2 …xn về dãy k các bộ (l1, d1), (l2,
d2), …, (lk, dk) với:
li: là chiều dài (số phần tử) của loạt thứ i
di: dữ liệu (k. tự) của loạt thứ i
Chú ý:
Nếu k=1 (dữ liệu trên cả dòng là giống nhau) ta có tỷ lệ nén là: n/2
(nén hiệu quả).
Nếu k=n (2 byte liên tiếp khác nhau từng đôi một) ta có tỷ lệ nén là:
n/2n (làm tăng dữ liệu).
Với n ký tự đầu vào → độ dài loạt tối đa là n (khi cả n ký tự vào là
giống nhau) khi đó chúng ta cần m= log2n bit để biểu diễn li.
Tham khảo bài giảng ĐH Vanderbilt4
Phương pháp nén RLC - Mã loạt
Nhận xét:

Sử dụng m= bao nhiêu (?), và khi độ dài loạt
>2m thì xử lý thế nào?.

Khi 2 byte liên tiếp khác nhau từng đôi 1 thì

không những không nén được mà thuật toán
còn làm tăng kích thước file lên. Vậy người ta
đã xử lý vấn đề này như thế nào?
Tham khảo bài giảng ĐH Vanderbilt5
Phương pháp nén RLC - Mã loạt
Lưu ý khi cài đặt (Implementation) thuật toán.

Thường dùng m=8 bit để biểu diễn li.

Dùng bit thấp trong li làm cờ (Flag) - xác định
byte đó là dữ liệu di hay độ dài loạt li (bit cờ
bằng 1→ độ dài loạt, ngược lại → dữ liệu).
Tham khảo bài giảng ĐH Vanderbilt6
Phương pháp nén RLC - Mã loạt
Cách dùng bit cờ:
Người ta có thể dùng 1 bit đầu hoặc 2 bit đầu làm cờ.

Dùng 1 bít đầu:

Còn lại 7 bít (0-127) thể hiện độ dài loạt → tối đa độ dài loạt có thể là 127.

Khi đó các dữ liệu ảnh di riêng lẻ phải có giá trị từ 0000 0000 (0) đến 0111 1111 (127) mới có
thể lưu được trong 1 byte,

các di có giá trị từ 1000 0000 (128) đến 1111 1111 (255) vẫn phải lưu trữ trong 2 byte dạng (li,
di) và trường hợp này li =1.

Dùng 2 bít đầu:

Còn lại 6 bít (0- 63) thể hiện độ dài loạt → tối đa độ dài loạt có thể là 63.


Khi đó các dữ liệu ảnh di riêng lẻ phải có giá trị từ 0000 0000 (0) đến 1011 1111 (191) mới có
thể lưu được trong 1 byte,

các di có giá trị từ 1100 0000 (192) đến 1111 1111 (255) vẫn phải lưu trữ trong 2 byte dạng (li,
di) và trường hợp này li =1.
Tham khảo bài giảng ĐH Vanderbilt7
Phương pháp nén RLC - Mã loạt
Nhận xét:

Dùng 1 bit cờ → Độ dài loạt lớn hơn, số byte riêng lẻ có thể
lưu trữ độc lập giảm (127).

Dùng 2 bit cờ → Độ dài loạt nhỏ hơn, số byte riêng lẻ có
thể lưu trữ độc lập tăng (191).

Tiếp tục như vậy ta thấy rằng số bít dùng làm cờ càng nhiều
thì khả năng lưu trữ độ dài loạt nhỏ, tuy nhiên khi đó dữ liệu
riêng lé có thể lưu trữ độc lập tăng.
1. Thông thường người ta dùng 2 bit làm cờ.
2. Phương pháp RLC được sử dụng trong các ảnh PCX, BMP.
Tham khảo bài giảng ĐH Vanderbilt8
Phương pháp nén (mã) Huffman

Xét ví dụ : Giả sử một văn bản chỉ chứa 2 ký
tự a và b, theo bảng mã ASCII, mỗi ký tự được
mã hóa bằng 1 byte do đó nếu văn bản này có
n ký tự → cần 8*n bít để lưu.

Giải pháp: Nếu dùng 1 bít để mã hóa, ví dụ 1 -

a, 0 - b, khi đó văn bản chỉ cần n bít để lưu trữ
(giảm được 7/8 dung lượng lưu trữ). Như vậy,
tuỳ vào văn bản, nếu chúng ta thay đổi cách
mã có thể nén được dữ liệu.
Tham khảo bài giảng ĐH Vanderbilt9
Phương pháp nén (mã) Huffman

Tư tưởng của phương pháp Huffman là:

Dùng độ dài thay đổi để mã hóa cho các ký tự,

ký tự nào xuất hiện nhiều dùng mã ít bít (ngắn),

ký tự nào xuất hiện ít dùng mã nhiều bít (dài).

Thông thường độ dài trung bình giảm → nén được thông tin.

Phương pháp mã hóa Huffman:

xây dựng một cây nhị phân (cây mã Huffman) có các nút lá là các ký tự có trong văn
bản, và

tập tin mã hóa sẽ chứa các “đường đi” đến các nút lá (ký tự) của cây nhị phân đó.

Việc giải mã được thực hiện như sau:

Đọc tuần tự các bit có trong tập tin đã được mã hóa, mỗi bít sẽ cho ta biết hướng đi trên
cây cho đến khi gặp được một nút lá thì sẽ phát sinh ký tự tương ứng,

lặp lại quá trình trên cho đến khi hết tập tin.

Tham khảo bài giảng ĐH Vanderbilt10

×