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

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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Giáo trình Xử lý ảnh

NHẬP MÔN XỬ LÝ ẢNH CHƯƠNG 10: NÉN ẢNH Biên soạn: TS Ngô Hữu Phúc Tham khảo bài giảng ĐH Vanderbilt 1 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 Tham khảo bài giảng ĐH Vanderbilt 2 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 Tham khảo bài giảng ĐH Vanderbilt 3 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 Vanderbilt 4 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 Vanderbilt 5 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 Vanderbilt 6 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 Vanderbilt 7 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 Vanderbilt 8 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 Vanderbilt 9 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 Vanderbilt 10 Phương pháp nén (mã) Huffman Thuật toán mã: • Duyệt trên toàn bộ file dữ liệu cần nén để xác định các ký tự cùng với số lần xuất hiện của ký tự đó trong file và đưa vào danh sách L • Trong L chọn ra 2 “ký tự” lm1, lm2 có số lần xuất hiện nhỏ nhất để hình thành 2 nút của cây nhị phân • Ghép 2 ký tự vừa chọn thành 1 ký tự mới với số lần xuất hiện bằng tổng số lần xuất hiện của 2 ký tự lm1, lm2 và đưa vào L; • đồng thời xóa 2 ký tự lm1, lm2 khỏi L • Lặp lại cho đến khi L chỉ còn duy nhất 1 “ký tự” T Tham khảo bài giảng ĐH Vanderbilt 11 Phương pháp nén (mã) Huffman Thuật toán mã (tiếp) • Bắt đầu từ T tạo 2 nhánh tới 2 con của nó, tiếp tục thực hiện như vậy đối với các con của T và • tiếp tục cho đến khi tất cả các nút lá của cây đều là các ký tự đơn • Khi đó ta sẽ được một cây nhị phân gọi là cây mã Huffman • Xác định đường đi đến nút lá theo qui tắc: khi rẽ trái điền giá trị 0, khi rẽ phải điền giá trị 1 (hoặc ngược lại) • Đường dẫn đến nút là chính là mã cần dùng cho ký tự tại nút lá • Duyệt tuần tự các ký tự, ghi mã tương ứng của ký tự ra file đích Tham khảo bài giảng ĐH Vanderbilt 12 Phương pháp nén (mã) Huffman Ví dụ: • Giả sử chuỗi cần mã hóa có nội dung như sau: ABRACADABRA • Duyệt file, tính số lần xuất hiện các ký tự A:5, B:2, C:1, D:1, R:2 • Xây dựng cây mã Huffman (như hình vẽ) Tham khảo bài giảng ĐH Vanderbilt 13 Phương pháp nén (mã) Huffman Ví dụ (tiếp): • Xác định mã Huffman cho các ký tự: A: 0 B: 100 C: 1010 D: 1011 R: 11 (Bảng mã kí tự) • Nội dung xâu mã: • 01001101010010110100110 • Chú ý: File mã hoá ngoài nội dung của file cần lưu trữ cả bảng mã (hay cây mã Huffman) Tham khảo bài giảng ĐH Vanderbilt 14 Phương pháp nén (mã) Huffman Thuật toán giải mã: • Đọc và khởi tạo bảng mã cho các ký tự, khởi tạo cây mã Huffman C :1 D:1 B :2 R: 2 A:5 • Đọc lần lượt từng bít trong tập tin đã được mã hóa và duyệt trên cây nhị phân cho đến khi gặp nút lá, lấy ký tự tương ứng ở nút lá đưa vào file kết quả • Ví dụ minh họa: Giải nén tập tin mã hóa 01001101010010110100110 với bảng mã trên Tham khảo bài giảng ĐH Vanderbilt 15 Phương pháp LZW • Khái niệm nén từ điển được Jacob Lampel và Abraham Ziv đưa ra lần đầu tiên vào năm 1977 Sau đó phát triển thành một họ giải thuật nén từ điển LZ Năm 1984 Terry Welch đã cải tiến thuật giải LZ thành một họ giải thuật mới hiệu quả hơn và đặt tên là LZW • Phương pháp LZW dựa trên việc xây dựng từ điển cho các “chuỗi ký tự” đã từng xuất hiện trong văn bản, những “chuỗi ký tự” xuất hiện sau đó sẽ được thay thế bằng mã của nó trong bảng từ điển • Giải thuật LZW được sử dụng cho tất cả các loại file nhị phân Nó thường được dùng để nén các loại văn bản, ảnh đen trắng, ảnh màu … và • chuẩn nén cho các dạng ảnh GIF, TIFF… Mức độ hiệu quả của LZW không phụ thuộc vào số bít màu của ảnh Tham khảo bài giảng ĐH Vanderbilt 16 Phương pháp LZW Phương pháp nén LZW • Phương pháp LZW hoạt động theo nguyên tắc là tạo ra một từ điển động theo dữ liệu của file ảnh • Từ điển là tập hợp những cặp Khoá và nghĩa của nó Trong đó khoá được sắp xếp theo thứ tự nhất định, nghĩa là một chuỗi con trong dữ liệu ảnh • Từ điển được xây dựng đồng thời với quá trình đọc dữ liệu Sự có mặt của một chuỗi con trong từ điển khẳng định rằng chuỗi đó đã từng xuất hiện trong phần dữ liệu đã đọc • Thuật toán liên tục tra cứu và cập nhật từ điển sau mỗi lần đọc một ký tự ở dữ liệu đầu vào • Do kích thước bộ nhớ không phải là vô hạn và để đảm bảo tốc độ tìm kiếm, người ta thường dùng từ điển với kích thước 4096 (212) phần tử Tham khảo bài giảng ĐH Vanderbilt 17 Phương pháp LZW • Cấu trúc từ điển có dạng như sau: Tham khảo bài giảng ĐH Vanderbilt 18 Phương pháp LZW • 256 từ mã đầu tiên có khoá từ 0 255 chứa 256 ký tự của bảng mã ASCII) • Từ mã thứ 256 chứa một mã đặc biệt là “m xóa” (CC - Clear Code) Mục đích việc dùng mã xóa nhằm khắc phục tình trạng số mẫu lặp trong ảnh lớn hơn 4096 Khi đó một ảnh được quan niệm là nhiều mảnh ảnh, và từ điển là một bộ từ điển gồm nhiều từ điển con Cứ hết một mảnh ảnh người ta lại gửi một mã xóa để báo hiệu kết thúc mảnh ảnh cũ, bắt đầu mảnh ảnh mới đồng thời khởi tạo lại từ điển cho mảnh ảnh mới • Từ mã thứ 257 chứa mã kết thúc thông tin (EOI - End Of Information) Một file ảnh có thể chứa nhiều ảnh (ví dụ ảnh GIF), khi đó mỗi ảnh sẽ được mã hóa riêng và mã EOI dùng để xác định điểm kết thúc thông tin của 1 ảnh • Các từ mã tiếp theo (từ 258 trở đi) chứa các mẫu lặp lại trong ảnh Các từ mã này được sinh ra trong quá trình mã hoá Tham khảo bài giảng ĐH Vanderbilt 19 Phương pháp LZW • Ví dụ: Cho chuỗi đầu vào là “ABCBCABCABCD” (Mã ASCII của A - 65; B - 66; C - 67; D - 68) • Từ điểm được khởi tạo đến khoá 257, và tiếp tục được xây dựng trong quá trình mã hoá chuỗi vào như sau: • Chuỗi mã hoá sẽ là: 65 - 66 - 67 - 259 - 258 - 67 - 262 - 68 Tham khảo bài giảng ĐH Vanderbilt 20 ... (tiếp): • Xác định mã Huffman cho ký tự: A: B: 100 C: 101 0 D: 101 1 R: 11 (Bảng mã kí tự) • Nội dung xâu mã: • 0100 1101 0100 10 1101 00 110 • Chú ý: File mã hố nội dung file cần lưu trữ bảng... lá, lấy ký tự tương ứng nút đưa vào file kết • Ví dụ minh họa: Giải nén tập tin mã hóa 0100 1101 0100 10 1101 00 110 với bảng mã Tham khảo giảng ĐH Vanderbilt 15 Phương pháp LZW • Khái niệm nén... 68) • Từ điểm khởi tạo đến khoá 257, tiếp tục xây dựng q trình mã hố chuỗi vào sau: • Chuỗi mã hố là: 65 - 66 - 67 - 259 - 258 - 67 - 262 - 68 Tham khảo giảng ĐH Vanderbilt 20

Ngày đăng: 14/11/2012, 14:36

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan