Biến thể vào Run-length Encoding

Một phần của tài liệu Tìm hiểu các thuât toán nén dữ liệu và xây dựng chương trình ứng dụng (Trang 46 - 55)

Dữ liệu hình ảnh thường chạy dài mã hóa trong một quá trình tuần tự xử lý các dữ liệu hình ảnh như là một dòng 1D, chứ không phải là một bản đồ 2D của dữ liệu.

Một biến thể RLE hiếm khi gặp phải là một thuật toán mã hóa độ tổn hao. Trong thuật toán RLE dữ liệu loại bỏ trong quá trình mã hóa thường là bằng cách quy về một hoặc hai bit ít quan trọng nhất trong mỗi điểm ảnh, có thể làm tăng tỷ lệ nén mà không ảnh hưởng xấu đến sự xuất hiện của hình ảnh rất phức tạp. Biến thể RLE này hoạt động tốt chỉ với hình ảnh thực tế có chứa nhiều biến thể tinh tế trong các giá trị điểm ảnh.

Hãy chắc chắn rằng bộ mã hóa RLE của bạn luôn luôn dừng lại ở cuối mỗi dòng quét dữ liệu bitmap đã được mã hóa. Có rất nhiều lợi ích để làm như vậy. Mã hóa chỉ là một dòng máy quét đơn giản tại một thời điểm có nghĩa là chỉ có một kích thước bộ đệm tối thiểu. Mã hóa chỉ một dòng đơn

giản tại một thời điểm cũng ngăn chặn một vấn đề được gọi là cross-mã hóa .

Chéo mã hóa là sự kết hợp của dòng quét xảy ra khi quá trình mã hóa mất sự khác biệt giữa các dòng quét gốc. Chéo mã hóa đôi khi lúc thực hiện có thể thêm một vài byte dữ liệu nén nhưng quá trình giải mã rất phức tạp, thêm chi phí thời gian. Đối với các định dạng tập tin bitmap, kỹ thuật này đánh bại mục đích của việc tổ chức một hình ảnh bitmap bằng dòng quét ở nơi đầu tiên.

47

Khi một bộ mã hóa là mã hóa một hình ảnh, một dấu hiệu cuối cùng của quét mạng được đặt trong mã hóa dữ liệu để thông báo cho các phần mềm giải mã rằng sự kết thúc của dòng quét đã đạt. Dấu hiệu này thường là một gói duy nhất, xác định rõ ràng trong các đặc điểm kỹ thuật RLE, không thể nhầm lẫn với bất kỳ gói dữ liệu khác. Dấu hiệu cuối cùng của quét thường chỉ độ dài một byte, do đó không đóng góp bất lợi với kích thước của dữ liệu được mã hóa.

Mã hóa dòng quét cá nhân có lợi thế khi một ứng dụng cần sử dụng chỉ là một phần của một hình ảnh. Hãy nói rằng một hình ảnh bao gồm 512 dòng quét và chúng ta cần để hiển thị dòng 100 - 110. Nếu chúng ta không biết nơi mà các dòng quét bắt đầu và kết thúc trong các dữ liệu hình ảnh được mã hóa, ứng dụng sẽ phải giải mã các dòng từ 1 đến 100 của hình ảnh trước khi tìm ra mười dòng. Tất nhiên, nếu quá trình chuyển đổi giữa các dòng quét được đánh dấu bằng một số loại dễ dàng nhận biết, các ứng dụng có thể chỉ cần đọc qua các dữ liệu được mã hóa.

Một tùy chọn khác cho vị trí điểm khởi đầu của bất kỳ dòng quét đặc biệt nào trong một khối dữ liệu mã hóa là xây dựng một bảng quét trực tuyến. Một bảng quét thường chứa một yếu tố cho mỗi dòng quét và mỗi phần tử chứa giá trị bù đắp của dòng quét tương ứng của nó. Để tìm các gói RLE đầu quét dòng 10, tất cả các bộ giải mã cần phải tìm đến giá trị vị trí bù đắp được lưu trữ trong các yếu tố thứ mười của bảng tra cứu quét trực tuyến. Một bảng quét cũng có thể giữ số lượng byte được sử dụng để mã hóa mỗi dòng quét. Sử dụng phương pháp này để tìm các gói RLE đầu quét dòng 10, bộ giải mã của bạn sẽ gắn với nhau. Gói đầu tiên cho dòng quét 10 sẽ bắt đầu từ byte này bù đắp từ đầu của dữ liệu hình ảnh RLE mã hóa.

48

Chương trình RLE sử dụng để mã hóa hình ảnh bitmap, thường được chia thành các lớp theo kiểu của các yếu tố nguyên tử (có nghĩa là cơ bản nhất) mà họ mã hóa. Thông thường, một phương pháp phải phân tích các dòng dữ liệu không nén để xác định xem có sử dụng một điểm ảnh chạy chữ hay không.

Có hai nhược điểm tiềm năng của phương pháp này:

 Kích thước tối thiểu được tăng từ ba đến bốn ký tự. Điều này có thể ảnh hưởng đến hiệu quả nén với một số loại dữ liệu.

 Nếu các dòng dữ liệu unencoded chứa một giá trị ký tự bằng giá trị cờ, nó phải được nén vào một gói mã hóa 3-byte. Điều này ngăn cản các

giá trị cờ sai lầm xảy ra trong dòng dữ liệu nén.

3.2.3.2. Gói Replication dọc

Một số chương trình RLE sử dụng các gói mã hóa để tăng hiệu quả

nén. Một trong những hữu ích của các gói là gói Replication dọc . Gói tin này

không lưu trữ dữ liệu quét dòng thực sự, thay vào đó nó chỉ cho thấy một sự lặp lại của các dòng quét trước. Dưới đây là một ví dụ về cách làm việc này.

Giả sử bạn có một hình ảnh có chứa một dòng quét 640 byte rộng và tất cả các điểm ảnh trong dòng quét là cùng một màu sắc. Nó sẽ đòi hỏi 10 byte để chạy dài mã hóa nó, giả định rằng lên đến 128 byte có thể được mã hóa cho mỗi gói và mỗi gói là hai byte. Chúng ta hãy cũng giả định rằng 100 dòng quét đầu tiên của hình ảnh này là tất cả các màu sắc tương tự. Tại 10 byte trên mỗi dòng quét, có thể sẽ sản xuất 1.000 byte chạy dài dữ liệu được mã hóa. Nếu chúng ta thay vì sử dụng một gói nhân rộng theo chiều dọc là chỉ có một byte trong kích thước (có thể là một gói chạy dài với một số chạy từ 0), chúng ta sẽ chỉ đơn giản là chạy dài mã hóa các dòng quét đầu tiên (10 byte)

49

và làm theo nó với 99 dọc gói dữ liệu sao chép (99 byte). Kết quả là dữ liệu mã hóa sau đó sẽ chỉ có 109 byte.

Nếu gói dữ liệu sao chép thẳng đứng chứa một byte đếm số quét dòng lặp lại, chúng ta chỉ cần một gói với một giá trị số của 99. Các kết quả 10 byte quét dòng gói dữ liệu và hai byte của gói nhân rộng theo chiều dọc sẽ mã hóa 100 dòng quét đầu tiên của hình ảnh, chứa 64.000 byte.

50

CHƯƠNG 4

HÌNH ẢNH MINH HỌA

CÁC CHƯƠNG TRÌNH SỬ DỤNG THUẬT TOÁN HUFFMAN VÀ RUN-LENGTH

52

54

KẾT LUẬN VÀ ĐỊNH HƯỚNG PHÁT TRIỂN

1. Kết luận

Với phần mô phỏng thuật toán nén dữ liệu Huffman và Run – length, em đã phần nào đúc kết được ưu và nhược điểm của hai thuật toán này qua việc so sánh thuật toán nén của nó. Em cũng đã tìm hiểu, thống kê được một số thuật toán nén khác với các dữ liệu khác nhau như file văn bản, file audio, video,… Sau đây là những mặt đã làm được và những mặt hạn chế của khoá luận này:

 Những mặt đã làm được:

- Mô phỏng thành công 2 loại mã nén Huffman và Run – Length - So sánh 2 mã nén này và đưa ra được kết luận

- Tìm hiểu và nghiên cứu các thuật toán nén khác - Nén thành công những file có kích thước lớn

- Nén thành công các loại dữ liệu khác nhau như văn bản, audio, video,… thậm chí có thể nén được folder

 Những mặt còn hạn chế:

Chưa thực hiện được việc so sánh một cách tổng quát và trực quan của tất cả các loại mã nén hiện nay, dẫn đến việc chưa đưa ra được kết luận loại mã nén nào là tối ưu và mã nén nào là thông dụng nhất hiện nay

2. Hướng phát triển

Với những mặt đã làm được, em sẽ tiếp tục cải tiến và nâng cấp để có thể nén dữ liệu được nhanh hơn, giao diện đẹp mắt hơn, dễ sử dụng hơn và thực tế hơn. Còn với những mặt hạn chế, em sẽ tiếp tục hoàn thành để có thể so sánh tổng quát và trực quan các loại mã nén và sẽ tìm được mã nén nào là thông dụng hiện nay.

55

TÀI LIỆU THAM KHẢO

[1]. Nguyễn Lê Anh, Nguyễn Văn Xuất, Phạm Thế Long – Giáo trình lý thuyết mã hóa

[2]. Mark Nelson and Jean-loup Gailly – The Data Compression Book 2nd edition

[3]. Vũ Đức Thi – Thuật toán trong tin học, NXB KHKT [4]. Các nguồn từ Internet

Một phần của tài liệu Tìm hiểu các thuât toán nén dữ liệu và xây dựng chương trình ứng dụng (Trang 46 - 55)

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

(55 trang)