Mã RLE (Run Length Encoding)

Một phần của tài liệu Tìm hiểu mã loạt dài cho ảnh nhị phân và chương trình ứng dụng (Trang 43)

Đây là một phương pháp nén ảnh phổ biến hiện nay. Nguyên tắc của mã RLE rất đơn giản là thay thế một chuỗi kí tự lặp lại bằng một kí tự duy nhất của chuỗi lặp lại cùng với một biến đếm số lần kí tự đó được lặp lại.

a) Thuật toán mã hoá

Trong văn bản nguồn có thể có một số kí tự giống nhau, thuật toán sẽ nhóm lại thành một nhóm 2 thành phần (L, C). Trong đó: L là số các từ kế cận giống nhau, C là kí tự được lặp lại.

Thuật toán nén RLE như sau: Input: Tệp tin nguồn f

Output: Tệp tin nén fn

Các biến: C1, C2 là hai kí tự, L là một số nguyên Bước 1: + Mở tệp tin f ( để đọc)

+ Mở tệp tin nén fn (để ghi) Bước 2: + Đặt L=1

+ Đọc kí tự trong bản mã gán vào C1

Bước 3: Khi nào C1 không phải là ký tự cuối cùng trong tệp f thì thực hiện:

b1. Đọc kí tự tiếp theo trong bản mã gán vào C2 b2. Kiểm tra, nếu C1 = C2 thì

+ Tăng L=L+1

+ Quay lên thực hiện tiếp b1 Ngược lại thì:

+ Ghi cặp (L, C1) ra tệp nén fn.

+ Quay lên thực hiện tiếp Bước 3: Ngược lại, nếu (C1 là ký tự cuối cùng trong tệp f mã) thì thực hiện Bước 4:

Bước 4: Kết thúc. b) Ví dụ

39

Có môt văn bản sau: aaaabbbaabbbbbccccccccdabcbaaabbbbcccd.

Theo phương pháp mã RLE thì văn bản này được mã hoá như sau:

4a3b2a5b8c1d1a1b1c1b3a4b3c1d.

c) Thuật toán giải nén RLE như sau: Input: Tệp tin nguồn nén fn

Output: Tệp tin giải nén fg

Bước 1: + Mở tệp tin nén fn (để đọc) + Mở tệp tin giải nén fg (để ghi) Bước 2:

Khi nào cặp (L,C) không phải là ký tự cuối cùng trong tệp fn thì thực hiện:

b1. Đọc cặp (L,C) trong tệp nén fn

b2. + For i=1 to L do ghi ký tự C ra tệp giải nén fg + Quay lên thực hiện tiếp Bước 2:

Ngược lại, (L, C là cặp ký tự cuối cùng trong tệp nén fc) thì thực hiện Bước 3:

Bước 3: Kết thúc d) Ví dụ:

Có bản mã 4a3b2a5b8c1d1a1b1c1b3a4b3c1d thì quá trình giải mã như

sau: Đọc được cặp mã đầu tiên là 4a thì ta viết aaaa.

Tiếp theo là cặp mã 3b thì ta viết ra tiếp bbb. Cứ lặp lại như vậy cho đến khi đọc hết các cặp mã ta được văn bản ban đầu là:

aaaabbbaabbbbbccccccccdabcbaaabbbbcccd.

Nhận xét: Thuật toán trên có hạn chế là nếu kí tự không lặp lại thì lại tốn ít nhất 2B (1B số, 1B kí tự) để mô tả một kí tự 1B. Lúc này thuật toán không “ nén” mà là “bung”.

40

Chương 3: CHƯƠNG TRÌNH DEMO

Một phần của tài liệu Tìm hiểu mã loạt dài cho ảnh nhị phân và chương trình ứng dụng (Trang 43)

Tải bản đầy đủ (PDF)

(57 trang)