Đồ án Tìm hiểu một số phương pháp nén ảnh

Ngày nay, cùng với sựphát triển không ngừng của khoa học và công nghệthì máy tính đóng vai trò ngày càng quan trọng và không thểthiếu trong cuộc sống xã hội loài người. Việc trao đổi thông tin của con người trong tất cảcác ngành, các lĩnh vực của đời sống ngày càng trởnên cần thiết cùng với sựra đời và phát triển của mạng Internet. Xửlý ảnh là một ngành khoa học còn tương đối mới mẻso với nhiều ngành khoa học khác nhưng nó đang được tập trung nghiên cứu và phát triển vì những ứng dụng thực tiễn của nó trong nhiều ngành , lĩnh vực khác nhau. Trong đó “Nén ảnh” là một phần của xửlý ảnh có ứng dụng to lớn trong truyền thông và trong lưu trữ, đã có rất nhiều phương pháp nén ảnh được ra đời và không ngừng được cải tiến đểngày càng hoàn thiện đem lại hiệu quảnén cao và cho chất lượng ảnh tốt nhất. Trong đồán tốt nghiệp “TÌM HIỂU MỘT SỐPHƯƠNG PHÁP NÉN ẢNH” được sựhướng dẫn của PGS .TS . Ngô Quốc Tạo em đã đi sâu nghiên cứu một sốphương pháp nén ảnh phổbiến như: mã loạt dài RLE, HUFFMAN, LZW, JPEG và phương pháp nén ảnh JPEG2000 dựa trên biến đổi Wavelet với những đặc tính vượt trội so với các chuẩn nén trước đó đem lại hiệu quảnén cao , cho ảnh nén chất lượng tốt và nhiều những ưu điểm khác mà các chuẩn nén trước đó không thểcó. Nội dung đồán tốt nghiệp bao gồm các phần chính như: chương một giới thiệu tổng quan vềxửlý ảnh, mục đích chương này là giới thiệu một số khái niệm cần biết về ảnh sốvà xửlý ảnh số. Chương hai sẽgiới thiệu một sốphương pháp nén ảnh và cách phân loại các phương pháp nén ảnh. Chương ba sẽgiới thiệu vềchương trình thửnghiệm và kết quả đạt đựơc Đồán tốt nghiệp Tìm hiểu một sốphương pháp nén ảnh Sinh viên thực hiện : TạMinh Thắng CT 702 Trang : 2 của chương trình. Cuối cùng sẽlà phần kết luận đánh giá kết quảnghiên cứu thu được và hướng phát triển của đềtài.

pdf71 trang | Chia sẻ: oanhnt | Lượt xem: 2070 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đồ án Tìm hiểu một số phương pháp nén ảnh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 1 MỞ ĐẦU Ngày nay, cùng với sự phát triển không ngừng của khoa học và công nghệ thì máy tính đóng vai trò ngày càng quan trọng và không thể thiếu trong cuộc sống xã hội loài người. Việc trao đổi thông tin của con người trong tất cả các ngành, các lĩnh vực của đời sống ngày càng trở nên cần thiết cùng với sự ra đời và phát triển của mạng Internet. Xử lý ảnh là một ngành khoa học còn tương đối mới mẻ so với nhiều ngành khoa học khác nhưng nó đang được tập trung nghiên cứu và phát triển vì những ứng dụng thực tiễn của nó trong nhiều ngành , lĩnh vực khác nhau. Trong đó “Nén ảnh” là một phần của xử lý ảnh có ứng dụng to lớn trong truyền thông và trong lưu trữ, đã có rất nhiều phương pháp nén ảnh được ra đời và không ngừng được cải tiến để ngày càng hoàn thiện đem lại hiệu quả nén cao và cho chất lượng ảnh tốt nhất. Trong đồ án tốt nghiệp “TÌM HIỂU MỘT SỐ PHƯƠNG PHÁP NÉN ẢNH” được sự hướng dẫn của PGS .TS . Ngô Quốc Tạo em đã đi sâu nghiên cứu một số phương pháp nén ảnh phổ biến như : mã loạt dài RLE, HUFFMAN, LZW, JPEG và phương pháp nén ảnh JPEG2000 dựa trên biến đổi Wavelet với những đặc tính vượt trội so với các chuẩn nén trước đó đem lại hiệu quả nén cao , cho ảnh nén chất lượng tốt và nhiều những ưu điểm khác mà các chuẩn nén trước đó không thể có. Nội dung đồ án tốt nghiệp bao gồm các phần chính như : chương một giới thiệu tổng quan về xử lý ảnh, mục đích chương này là giới thiệu một số khái niệm cần biết về ảnh số và xử lý ảnh số. Chương hai sẽ giới thiệu một số phương pháp nén ảnh và cách phân loại các phương pháp nén ảnh. Chương ba sẽ giới thiệu về chương trình thử nghiệm và kết quả đạt đựơc Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 2 của chương trình. Cuối cùng sẽ là phần kết luận đánh giá kết quả nghiên cứu thu được và hướng phát triển của đề tài. CHƯƠNG I: GIỚI THIỆU TỔNG QUAN VỀ NÉN ẢNH I.1.Giới thiệu về ảnh số và xử lý ảnh số: I.1.1.Ảnh số: Ảnh có thể biểu diễn dưới dạng tín hiệu tương tự hoặc tín hiệu số. Trong biểu diễn số của các ảnh đa mức xám, một ảnh được biểu diễn dưới dạng một ma trận hai chiều. Mỗi phần tử của ma trận biểu diễn cho mức xám hay cường độ của ảnh tại vị trí đó. Mỗi phần tử trong ma trận được gọi là một phần tử ảnh, thông thường kí hiệu là PEL (Picture Element) hoặc là điểm ảnh (Pixel). - Với ảnh đa cấp xám: Nếu dùng 8 bit (1 byte) để biểu diễn mức xám, thì số các mức xám có thể biểu diễn được là 28 hay 256. Mỗi mức xám được biểu diễn dưới dạng là một số nguyên nằm trong khoảng từ 0 đến 255, với mức 0 biểu diễn cho mức cường độ đen nhất và 255 biểu diễn cho mức cường độ sáng nhất. - Với ảnh màu: Cách biểu diễn cũng tương tự như với ảnh đen trắng, chỉ khác là các số tại mỗi phần tử của ma trận biểu diễn cho ba màu riêng rẽ gồm: đỏ (red), lục (green) và lam (blue). Để biểu diễn cho một điểm ảnh Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 3 màu cần 24 bit, 24 bit này được chia thành ba khoảng 8 bit. Mỗi khoảng này biểu diễn cho cường độ sáng của một trong các màu chính. Hình 1.1 Biểu diễn của một mức xám của ảnh số. I.1.2.Xử lý ảnh số: Xử lý ảnh là một khoa học mặc dù còn tương đối mới so với nhiều ngành khoa học khác ,nhất là trên quy mô công nghiệp. Xử lý ảnh số có rất nhiều ứng dụng như làm nổi các ảnh trong y học, khôi phục lại ảnh do tác động của khí quyển trong thiên văn học, tăng cường độ phân giải của ảnh truyền hình mà không cần thay đổi cấu trúc bên trong của hệ thống chuyển tải, nén ảnh trong khi truyền đi xa hoặc lưu trữ. Các giai đoạn chính trong xử lý ảnh có thể được mô tả trong hình sau: Độ sáng trung bình trong mỗi hình chữ nhật = giá trị một điểm ảnh. Pixel or PEL CAMERA SENSOR Thu nhận ảnh Số Phân tích ảnh Hệ quyết định Nhận dạng Lưu trữ Lưu Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 4 I.2.Mục đích và sự cần thiết của “ nén ảnh ”: Nén ảnh là một kỹ thuật mã hoá các ảnh số hoá nhằm giảm số lượng các bit dữ liệu cần thiết để biểu diễn ảnh. Mục đích là giảm đi những chi phí trong việc lưu trữ ảnh và chi phí thời gian để truyền ảnh đi xa trong truyền thông nhưng vẫn đảm bảo được chất lượng của ảnh. Nén ảnh thực hiện được là do một thực tế: thông tin trong bức ảnh không phải là ngẫu nhiên mà có trật tự , tổ chức.Vì thế nếu bóc tách được tính trật tự, cấu trúc đó thì sẽ biết phần thông tin nào quan trọng nhất trong bức ảnh để biểu diễn và truyền đi với số lượng ít bit hơn so với ảnh gốc mà vẫn đảm bảo tính đầy đủ của thông tin.Ở bên nhận quá trình giải mã sẽ tổ chức, sắp xếp lại được bức ảnh xấp xỉ gần chính xác so với ảnh gốc nhưng vẫn thỏa mãn chất lượng yêu cầu. Dưới đây là ví dụ về lưu trữ ảnh số và truyền đi xa với đường truyền 9600 baud (9600 bps) để thấy rõ sự cần thiết của việc nén ảnh: • Ảnh đa cấp xám hay ảnh 256 màu có kích thước 800 x 600, 8 bit/điểm ảnh, cần 3.840.000 bit lưu trữ và mất 6.67 phút để truyền. • Ảnh màu RGB (24 bit/điểm ảnh ) cùng độ phân giải như vậy cần hơn 10 triệu bit để lưu trữ và 20 phút để truyền. • Một phim âm bản có kích thước 24 × 36 mm (35 mm) chia bằng các khoảng cách nhau 12 àm, vào khoảng 3000 × 2000 điểm, 8 bit / pixel, yêu cầu 48 triệu bit cho lưu giữ ảnh và 83 phút để truyền. Qua ví dụ trên ta thấy nhiều vấn đề trong việc lưu trữ và truyền tải ảnh số hoá. Nén ảnh có nhiều ứng dụng trong thực tế như : truyền các văn bản Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 5 đồ hoạ qua đường điện thoại (Fax), nén ảnh trong y tế và truyền hình cáp….Chính sự ứng dụng trong nhiều lĩnh vực của nén ảnh cùng với sự tiến bộ trong lĩnh vực vi điện tử dẫn đến sự ra đời các chuẩn nén ảnh. Nén ảnh đạt được bằng cách loại bỏ các phần dư thừa trong ảnh đã được số hoá. Dư thừa có thể là dư thừa thông tin về không gian, dư thừa về cấp xám hay dư thừa về thời gian: • Dư thừa thông tin về không gian : trong một bức ảnh luôn tồn tại sự tương quan giữa các điểm ảnh cạnh nhau. • Dư thừa thông tin về cấp xám :là dư thừa dựa vào sự tương quan giữa các màu sắc cạnh nhau. • Dư thừa thông tin về thời gian : Trong một chuỗi ảnh video, tồn tại sự tương quan giữa các điểm ảnh của các frame khác nhau . I.3.Các khái niệm cơ bản: • Pixel (picture element) : phần tử ảnh Ảnh trong thực tế là một ảnh liên tục về không gian và về giá trị độ sáng. Để có thể xử lý ảnh bằng máy tính cần thiết phải tiến hành số hoá ảnh. Như vậy một ảnh là một tập hợp các pixel. Mỗi pixel là gồm một cặp toạ độ x, y và màu. Cặp toạ độ x,y tạo nên độ phân giải (resolution). Màn hình máy tính có nhiều loại với độ phân giải khác nhau: 320 x 200, 640x350, 800x600, 1024x768,… • Mức xám (Graylevel) Mức xám là kết quả sự mã hoá tương ứng của mỗi cường độ sáng của mỗi điểm ảnh với một giá trị số – kết quả của quá trình lượng hoá . • Dữ liệu Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 6 Trong một bài toán, dữ liệu bao gồm một tập các phần tử cơ sở mà ta gọi là dữ liệu nguyên tử. Nó có thể là một chữ số, một ký tự, ... nhưng cũng có thể là một con số, một từ, ... điều đó phụ thuộc vào từng bài toán. • Nén dữ liệu Nén dữ liệu là quả trình giảm dung lượng thông tin “dư thừa” trong dữ liệu gốc và làm cho lượng thông tin thu được sau nén thường nhỏ hơn dữ liệu gốc rất nhiều. Do vậy, tiết kiệm được bộ nhớ và giảm thời gian trao đổi dữ liệu trên mạng thông tin mà lại cho phép chúng ta khôi phục lại dữ liệu ban đầu. • Tỷ lệ nén Tỷ lệ nén là một trong các đặc trưng quan trọng của mọi phương pháp nén. Tỷ lệ nén được định nghĩa như sau: Tỷ lệ nén = 1/r*% với r là tỷ số nén được định nghĩa: r = kích thước dữ liệu gốc / kích thước dữ liệu nén. Như vậy hiệu suất nén = (1- tỷ lệ nén)*100%. Đối vơi ảnh tĩnh, kích thước chính là số bit biểu diễn toàn bộ bức ảnh. Đối với ảnh video, kích thước chính là số bit để biểu diễn một khung hình video (video frame). Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 7 CHƯƠNG II: CÁC PHƯƠNG PHÁP NÉN ẢNH II.1.Cách phân loại các phương pháp nén ảnh: II.1.1.Cách phân loại dựa vào nguyên lý nén: Nén bảo toàn thông tin (losses compression): bao gồm các phương pháp nén mà sau khi giải nén sẽ thu đựơc chính xác dữ liệu gốc.Tuy nhiên nén bảo toàn thông tin chỉ đạt hiệu quả nhỏ so với phương pháp nén không bảo toàn thông tin. Nén không bảo toàn thông tin (lossy compression): bao gồm các phương pháp nén sau khi giải nén sẽ không thu được dữ liệu như bản gốc. Các phương pháp này được gọi là “tâm lý thị giác” đó là lợi dụng tính chất của mắt người chấp nhận một số vặn xoắn trong ảnh khi khôi phục lại.Phương pháp này luôn đem lại hiệu quả cao do loại bỏ đi những thông tin dư thừa không cần thiết. II.1.2.Cách phân loại dựa vào cách thức thực hiện nén: Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 8 Phương pháp không gian (Spatial Data Compression ): các phương pháp này thực hiện nén bằng cách tác động trực tiếp lên việc lấy mẫu của ảnh trong miền không gian. Phương pháp sử dụng biến đổi (Transform Coding): gồm các phương pháp tác động lên sự biến đổi của ảnh gốc chứ không tác động trực tiếp. II.1.3.Cách phân loại dựa vào lý thuyết mã hoá: Các phương pháp nén thế hệ thứ nhất: gồm các phương pháp có mức độ tính toán đơn giản như lấy mẫu , gán từ mã,…. Các phương pháp nén thế hệ thứ hai: gồm các phương pháp dựa vào mức độ bão hoà của tỷ lệ nén bằng cách sử dụng các phép toán tổ hợp đầu ra một cách hợp lý hoặc sử dụng biểu diễn ảnh như : phương pháp kim tự tháp Laplace, phương pháp dựa vào vùng gia tăng, phương pháp tách hợp. II.1.4.Quá trình nén và giải nén : Gồm 2 công đoạn : Nén : dữ liệu gốc qua bộ mã hoá dữ liệu , bộ mã hoá này thực hiện nén dữ liệu đến một mức thích hợp cho việc lưu trữ và truyền dẫn thông tin. Quá trình này sẽ thực hiện việc loại bỏ hay cắt bớt những dư thừa của ảnh để thu được thông tin cần thiết nhưng vẫn đảm bảo được chất lượng ảnh. Giải nén : dữ liệu nén đi qua bộ giải mã dữ liệu, bộ giải mã sẽ thực hiện giải nén để thu được dữ liệu gốc ban đầu.Việc giải nén này thường phải dựa vào các thông tin đi kém theo dữ liệu nén ,tuỳ thuộc vào kiểu nén hay phương pháp nén mà dữ liệu giải nén được có hoàn toàn giống với dữ liệu gốc ban đầu hay không. Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 9 Tóm lại quá trình nén và giải nén dữ liệu có thể mô tả một cách tóm tắt theo sơ đồ dưới đây: Hình 2.1 : Quá trình nén và giải nén II.2.Phương pháp mã hoá độ dài loạt RLE: Mã hoá theo độ dài loạt RLE (Run Length Encoding) là một phương pháp nén ảnh dựa trên sự cắt bớt các dư thừa về không gian (một vài hình ảnh có vùng màu lớn không đổi đặc biệt đối với ảnh nhị phân). Loạt được định nghĩa là dãy các phần tử điểm ảnh (pixel) liên tiếp có cùng chung một giá trị. II.2.1.Nguyên tắc : Nguyên tắc của phương pháp này là phát hiện một loạt các điểm ảnh lặp lại liên tiếp, ví dụ :110000000000000011 .Ta thấy điểm ảnh có giá trị 0 xuất hiện nhiều lần liên tiếp thay vì phải lưu trữ toàn bộ các điểm ảnh có giá trị 0 ta chỉ cần lưu trữ chúng bằng cách sử dụng các cặp (độ dài loạt, giá trị). Ví dụ: Cho một chuỗi nguồn d : d =5 5 5 5 5 5 5 5 5 5 19 19 19 19 19 0 0 0 0 0 0 0 23 23 23 23 23 23 23 23 Ta sẽ có chuỗi mới : (10 5) (5 19) (7 0) (8 23) Tỷ số nén = 20/ 8 = 2.5 Quá trình nén Quá trình giải nén Dữ liệu ố Dữ liệu Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 10 Đối với ảnh đen trắng chỉ sử dụng 1 bit để biểu diễn 1 điểm ảnh thì phương pháp này tỏ ra rất hiệu quả, ta thấy điều đó qua ví dụ sau : Cho một chuỗi nguồn d: 000000000000000111111111100000000001111111111000000000000000 Ta có chuỗi mới : (15, 10, 10, 10, 15) Tỷ số nén = 60 bit / (5*4 bit) = 3 ( chỉ sử dụng 4 bit để thể hiện độ dài loạt và không thể hiện giá trị loạt vì ảnh đen trắng chỉ có 2 giá trị bit là 0 hoặc là 1) Chú ý: • Đối với ảnh chiều dài của một dãy lặp có thể lớn hơn 255, nếu ta dùng 1 byte để lưu trữ chiều dài thì sẽ không đủ. Giải pháp được dùng là tách chuỗi đó thành 2 chuỗi: một chuỗi có chiều dài là 255, chuỗi kia có chiều dài còn lại. • Phương pháp nén RLE chỉ đạt hiệu quả khi chuỗi lặp lớn hơn 1 ngưỡng nhất định nào đó hay nói các khác trong ảnh cần nén phải có nhiều điểm ảnh kề nhau có cùng giá trị màu.Do đó phương pháp này không đem lại cho ta kết quả một cách ổn định vì nó phụ thuộc hoàn toàn vào ảnh nén chỉ thích hợp cho những ảnh đen trắng hay ảnh đa cấp xám. Ví dụ: Ta có một chuỗi nguồn: d=5 7 9 11 13 18 28 38 48 58 30 35 40 45 Chuỗi kết quả sau khi mã hoá : 1 5 1 7 1 9 1 11 1 3 1 18 1 28 1 38 1 48 1 58 1 30 1 35 1 40 1 45 Tỷ số nén = 14 / 28 = 0.2 Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 11 Như vậy chuỗi sau khi mã hoá đã lớn hơn nhiều chuỗi nguồn ban đầu. Do đó cần phương pháp cải tiến để xử lý những trường hợp như trên tránh làm mở rộng chuỗi dữ liệu nguồn nghĩa là chỉ mã hoá độ dài loạt dữ liệu lặp lại. Người ta đã đưa ra cách đó là thêm kí tự tiền tố vào trước độ dài loạt, việc giải mã được thực hiện nếu gặp kí tự tiền tố với độ dài loạt và giá trị điểm ảnh theo sau. Ví dụ: Ta có chuỗi nguồn : d = 5 8 4 8 8 8 8 8 8 8 8 10 10 10 10 10 10 10 10 10 Giả sử kí tự tiền tố là “+” ta có : 5 8 4 +7 8 + 9 10 Tỷ số nén = 19 / 9 = 2.1 Tuy nhiên trong một số trường hợp các điểm ảnh có độ tương quan với nhau vể giá trị mức xám như trong ví dụ dưới đây ta có thể tiến hành xử lý như sau. Ví dụ: Ta có một chuỗi nguồn: d = 5 7 9 11 13 18 28 38 48 58 55 60 65 70 75 80 85 90 95 100 Ta có dựa vào độ tương quan này để có được hiệu quả nén cao , bằng việc áp dụng e(i) = d(i) –d(i-1) sẽ thu được : 5 2 2 2 2 5 10 10 10 10 -3 5 5 5 5 5 5 5 5 5 Áp dụng phương pháp nén loạt dài ta dễ dàng thu được : (5 1)( 2 4)(5 1)(10 5)(-3 1)(5 9) II.2.2.Thuật toán: Thuật toán như sau : Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 12 • Tiến hành duyệt trên từng hàng cho đến khi kết thúc vùng dữ liệu ảnh, trong quá trình duyệt tiến hành kiểm tra để tìm ra những loạt có cùng giá trị đồng thời chú ý những kí hiệu xuống dòng (hay kết thúc dòng) ,kết thúc ảnh Bitmap, … • Khi gặp loạt có độ dài > 3 thì nhảy đến chế độ nén ngược lại nhảy đến chế độ không nén tuy nhiên nếu loạt > 255 thì sẽ tách ra chỉ mã < 255 sau đó mã tiếp phần còn lại. Ngoài ra còn các chế độ khác như : bắt đầu , kết thúc 1 dòng. • Kết thúc khi gặp kí hiệu kết thúc bitmap ( end – o f- bitmap) II.2.3.Một số thủ tục chương trình : • Chương trình nén theo phương pháp RLE : void CRLE::CompressInRLE8(BYTE*pSrcBits,CByteArray& pRLEBits, int& RLE_size) { int line; int src_index = 0, dst_index = 0, counter, i; for ( line = 0; line < m_dib.dsBmih.biHeight; line++) { state_start: if ( EndOfLine(src_index)) { pRLEBits[dst_index++] = 1; pRLEBits[dst_index++] = pSrcBits[src_index]; src_index++; goto end_of_line; } Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 13 if(pSrcBits[src_index]==pSrcBits[src_index+1]) goto tate_compress; if ( EndOfLine(src_index+1)) { pRLEBits[dst_index++] = 1; pRLEBits[dst_index++] = pSrcBits[src_index++]; pRLEBits[dst_index++] = 1; pRLEBits[dst_index++] = pSrcBits[src_index++]; goto end_of_line; } if (pSrcBits[src_index+1] == pSrcBits[src_index+2]) { pRLEBits[dst_index++] = 1; pRLEBits[dst_index++] = pSrcBits[src_index++]; goto state_compress; } else goto state_no_compress; state_compress: for ( counter = 1; counter <= 254; counter++) { if ( pSrcBits[src_index+counter] != pSrcBits[src_index] ) break; if ( EndOfLine(src_index+counter) ) { pRLEBits[dst_index++] = counter+1; pRLEBits[dst_index++] = pSrcBits[src_index]; src_index += counter +1; goto end_of_line; } Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 14 } pRLEBits[dst_index++] = counter; pRLEBits[dst_index++] = pSrcBits[src_index]; src_index += counter; goto state_start; state_no_compress: for (counter = 2; counter <= 254; counter++) { if ( EndOfLine(src_index+counter) ) { pRLEBits[dst_index++] = 0; pRLEBits[dst_index++] = counter + 1; for (i = counter + 1; i > 0; i--) pRLEBits[dst_index++]=pSrcBits[src_index++]; if ( 0 != ((counter+1) % 2) ) pRLEBits[dst_index++]; goto end_of_line; } if(EndOfLine(src_index+counter+1) || pSrcBits[src_index+counter] != pSrcBits[src_index+counter+1] ) continue; if(EndOfLine(src_index+counter+2) || SrcBits[src_index+counter+1] != pSrcBits[src_index+counter+2] ) continue; else { if ( counter > 2) counter--; pRLEBits[dst_index++] = 0; pRLEBits[dst_index++] = counter+1; for (i = counter+1; i > 0; i--) pRLEBits[dst_index++] = pSrcBits[src_index++]; Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 15 if ( 0 != ((counter+1) % 2) ) pRLEBits[dst_index++]; goto state_compress; } } pRLEBits[dst_index++] = 0; pRLEBits[dst_index++] = counter; for (i = counter; i > 0; i--) pRLEBits[dst_index++] = pSrcBits[src_index++]; if ( 0 != ((counter) % 2) ) pRLEBits[dst_index++]; goto state_start; end_of_line: if ( 0 != (src_index % 4 )) { int pad = 4 - (src_index%4); src_index += pad; } pRLEBits[dst_index++] = 0; pRLEBits[dst_index++] = 0; } pRLEBits[dst_index++] = 0; pRLEBits[dst_index++] = 1; RLE_size = dst_index; } • Chương trình giải nén phương pháp RLE : BOOL CRLE::DecRLE8(ifstream &fil, BYTE *pDest) { DWORD x, y, paddedwidth; Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 16 paddedwidth =BMPWIDTHBYTES(pInfo->biWidth*pInfo-> biBitCount); BYTE FirstByte, SecondByte; WORD data; x = y = 0; while (!fil.eof()) { if (!fil.read((char*)&data, 2)) return FALSE; FirstByte = LOBYTE(data); SecondByte = HIBYTE(data); if (FirstByte == 0) { switch (SecondByte) { case 0: x = 0; y++; break; case 1: return TRUE; case 2: if (!fil.read((char*)&data, 2)) return FALSE; x += LOBYTE(data); y += HIBYTE(data); break; default: char ch; for (BYTE i = 0; i < SecondByte; i++) { if (!fil.get(ch)) return FALSE; pDest[paddedwidth * y + x++] = (BYTE)ch; Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 17 } if ((SecondByte % 2) == 1) if (!fil.get(ch)) return FALSE; } } else { for (BYTE i = 0; i < FirstByte; i++) pDest[paddedwidth * y + x++] = SecondByte; } } return FALSE; } II.3.Phương pháp mã hoá Huffman: II.3.1. Nguyên tắc: Phương pháp mã hoá Huffman là phương pháp dựa vào mô hình thống kê. Người ta tính tần suất xuất hiện của các ký tự bằng cách duyệt tuần tự từ đầu tệp gốc đến cuối tệp. Việc xử lý ở đây tính theo bit. Trong phương pháp Đồ án tốt nghiệp Tìm hiểu một số phương pháp nén ảnh Sinh viên thực hiện : Tạ Minh Thắng CT 702 Trang : 18