Các phương pháp nén ảnh hiệu quả

MỤC LỤC

Một số thủ tục chương trình

• Chương trình giải nén phương pháp RLE : BOOL CRLE::DecRLE8(ifstream &fil, BYTE *pDest) {.

Phương pháp mã hoá Huffman

Nguyên tắc

Như vậy với cách thức này ta đã làm giảm chiều dài trung bình của từ mã hoá bằng cách dùng chiều dài biến đổi tuy nhiên cũng có trường hợp bị thiệt 1 ít bit khi tần suất là rất thấp.

Thuật toán

Mô tả : Ta tiến hành hợp nhất hay cộng 2 tần suất nhỏ nhất ở cuối bảng để thu được giá trị tần suất mới sau đó đưa giá trị này trở lại bảng tần suất ban đầu đã bỏ đi 2 tần suất thành phần tạo thành nó. Trong phương pháp mã Huffman mã của ký tự là duy nhất và không mã nào là phần bắt đầu của mã trước.Vì vậy khi đọc theo từng bit từ đầu đến cuối tệp nén ta có thể duyệt cây mã cho đến một lá, tức là ký tự đã được giải mã.

Bảng tần suất sắp xếp giảm dần
Bảng tần suất sắp xếp giảm dần

Một số thủ tục chương trình

Việc giải mã chắc chắn phải sử dụng cây nhị phân giống như trong mã hoá. Để đọc, giải mã được yêu cầu phải sử dụng theo đúng tiêu chuẩn nhất định.

Phương pháp mã hoá LZW

Nguyên tắc

Do giới hạn của bộ nhớ và để đảm bảo tốc độ tìm kiếm nhanh, từ điển chỉ giới hạn 4096 phần tử dùng để lưu trữ giá trị của các từ mã. Khi số mẫu lặp lớn hơn 4096 thì người ta sẽ coi ảnh gồm nhiều mảnh ảnh và từ điển sẽ gồm nhiều từ điển con. Khi hết một mảnh ảnh sẽ gửi 1 mã xoá ( CC ) để báo hiệu kết thúc mảnh ảnh cũ và bắt đầu mảnh ảnh mới đồng thời sẽ khởi tạo lại từ điển.

Thông thường một file ảnh GIF có thể chứa nhiều mảnh ảnh, mỗi mảnh ảnh này sẽ được mã hoá riêng. Chương trình giải mã sẽ lặp đi lặp lại thao tác giải mã từng ảnh cho đến khi gặp mã kết thúc thông tin thì dừng lại.

Thuật toán

• Hàm AddToDictionary() : Hàm làm chức năng cập nhật mẫu mới vào phần tử tiếp theo trong từ điển. Nếu từ điển đã đầy nó sẽ gửi ra mã xoá CC và gọi đến hàm InitDictionary() để khởi tạo lại từ điển. Một chuỗi mới sẽ được tạo ra từ chuỗi cũ (chuỗi này ban đầu rỗng, chuỗi này phải là chuỗi đã tồn tại trong từ điển) và ký tự vừa đọc vào.

Với giải thuật nén, một từ mã ứng với một chuỗi sẽ được ghi ra tệp khi chuỗi ghép bởi chuỗi trên với ký tự vừa đọc chưa có mặt trong từ điển. Ký tự vừa xác định nối tiếp vào chuỗi ký tự cũ (đã giải mã ở bước trước) ta được chuỗi ký tự có mặt trong từ điển khi nén. Nếu từ điển đã đầy nó sẽ gửi ra mã xoá CC và gọi đến hàm InitDictionary() để khởi tạo lại từ điển.

Một số thủ tục chương trình

• Giá trị cờ First_Code = TRUE chỉ mã vừa đọc là mã đầu tiên của mỗi mảnh ảnh. • Hàm GetNextCode() : Hàm này đọc thông tin đầu vào (dữ liệu nén) trả về mã tương ứng. • Hàm DeCode() : Hàm này tra cứu từ điển và trả về chuỗi ký tự tương ứng với mã.

Phương pháp mã hoá JPEG

Chia ảnh thành khối

Phân khối thực chất là xác định tương quan giữa toạ độ riêng trong khối với tạo độ thực của điểm ảnh trong ảnh ban đầu.

Biến đổi

Như vậy muốn khôi phục lại ảnh ban đầu từ hệ số biến đổi chúng ta sẽ biến đổi nhanh Cosin ngược rời rạc một chiều các hệ số theo hàng, sau đó đem biến đổi nhanh Cosin rời rạc một chiều theo cột các kết quả trung gian vừa tính được. Khối lượng tử hoá trong sơ đồ nén đóng vai trò quan trọng và quyết định tỷ lệ nén của chuẩn nén JPEG. Ngoài hệ số (0,0) (được coi là thành phần DC) biểu diễn mức sáng trung bình của một khối ta có thể loại một số hệ số khác trong khối mang thông tin chi tiết về ảnh.

Việc nên giữ lại bao nhiêu hệ số còn tuỳ thuộc vào việc ta muốn tỷ lệ nén cao hay thấp và những yêu cầu về chất lượng của ảnh nén. Trong quá trình cài đặt thủ tục tạo ra bộ lượng tử hoá, Lloyd và Max đã có nhiều cải tiến để tính toán dễ dàng hơn. Thành phần một chiều sẽ không lượng tử hoá (phần tử (0,0) của khối 8x8 được coi là thành phần một chiều, 63 phần tử còn lại được coi là các thành phần xoay chiều).

Hình 2.5.3: Mô tả giải thuật biến đổi nhanh
Hình 2.5.3: Mô tả giải thuật biến đổi nhanh

Nén

Phương pháp mã hoá JPEG2000

  • Các bước thực hiện nén ảnh theo chuẩn JPEG2000

    JPEG2000 sử dụng hai loại biến đổi liên thành phần là biến đổi màu thuận nghịch (Reversible Color Transform - RCT) và biến đổi màu không thuận nghịch (Irreversible Color Transform - ICT) trong đó biến đổi thuận nghịch làm việc với các giá trị nguyên, còn biến đổi không thuận nghịch làm việc với các giá trị thực. Có thể thấy rằng dù áp dụng biến đổi Wavelet nào hay cùng với nó là một phép phân giải ảnh nào thì trong các băng con có số thứ tự thấp cũng là những thành phần tần số cao (mang thông tin chi tiết của ảnh) trong khi những băng con có số thứ tự cao hơn thì sẽ chứa những thành phần tần số thấp (mang thông tin chính về ảnh). Điều đó nghĩa là các hệ số chi tiết sẽ giảm dần từ băng con mức thấp (HH1 chẳng hạn) (ứng với thành phần tần số cao) xuống băng con mức cao (ứng với thành phần tần số thấp) và có tính tương tự về không gian giữa các băng con, ví dụ như một đường biên của hình vẽ trong ảnh sẽ tồn tại ở cùng một vị trí trên các băng con đó (tương ứng với mức độ phân giải của băng con ấy).

    Ngoài ra để có thể mã hoá được các hệ số Wavelet trong trường hợp này, giá trị của nút gốc phải nhỏ hơn giá trị ngưỡng đang được xem xét ứng với hệ số Wavelet đó Sau khi có đủ các khái niệm cần thiết về cây tứ phân và cây zero, chúng ta có thể trình bày nguyên lý hoạt động của thuật toán. Tính năng này là một lợi thế đặc biệt quan trọng của JPEG2000, trong khi JPEG cũng như các chuẩn nén ảnh tĩnh trước đây phải nén nhiều lần để thu được chất lượng với từng lần nén khác nhau thì với JPEG2000 ta chỉ cần nén một lần còn chất lượng ảnh thì sẽ được quyết định tuỳ theo người sử dụng trong quá trình giải nén ảnh theo JPEG2000.Một tính năng ưu việt nữa của JPEG2000 là tính năng mã hoá ảnh quan trọng theo vùng (ROI - Region of Interest) mà chúng ta đã đề cập trong phần mã hoá ảnh theo JPEG2000. Đó là khi một ảnh được truyền trên mạng viễn thông thì thông tin có thể bị nhiễu; với các chuẩn nén ảnh như JPEG thì nhiễu này sẽ được thu vào và hiển thị, tuy nhiên với JPEG2000, do đặc trưng của phép mã hoá có thể chống lỗi, JPEG2000 có thể giảm thiểu các lỗi này tới mức hầu như không có.

    Hình 2.6.4: Cây tứ phân
    Hình 2.6.4: Cây tứ phân

    Các tài liệu tham khảo

    Đồ án đã trình bày các khái niệm quan trọng cần thiết của kỹ thuật nén ảnh nói chung và các nguyên tắc , cơ sở lý thuyết ,thuật toán của một số phương pháp nén ảnh phổ biến như : mã loạt dài RLE, HUFFMAN, LZW, JPEG, JPEG2000.Trong đó trình bày phương pháp nén ánh JPEG2000 sử dụng biến đổi Wavelet để nén ảnh, đây là phương pháp nén ảnh đang được quan tâm phát triển vì các tính năng nổi bật so với các phương pháp khác. Phương pháp này không chỉ cho hiệu suất nén cao, chất lượng ảnh bảo đảm so với các phương pháp nén RLE, HUFFMAN, LZW, JPEG mà còn các tính năng riêng biệt do sư dụng biến đổi Wavelet để nén ảnh như : nén ảnh theo vùng (ROI) , trong một ảnh các vùng hoặc các đối tượng có thể có tỷ lệ nén khác nhau ,nén ảnh một lần nhưng có thể giải nén ảnh với chất lượng ảnh và kích thước ảnh khác nhau tuỳ theo yêu cầu người sử dụng ..Các phương pháp nén trình bày ở trong đồ án là những phương pháp đang được sử dụng khá rộng rãi trong nhiều lĩnh vực đặc biệt trong truyền thông cho ảnh trên mạng đảm bảo tốc độ, thời gian và chất lượng dữ liệu truyền. • Đồ án mới đề cập đến các phương pháp nén ảnh tĩnh mà chưa ứng dụng chúng cho âm thanh, video, đặc biệt là biến đổi Wavelet của chuẩn JPEG2000 do đó việc đi sâu nghiên cứu tìm hiểu các họ của Wavelet là rất cần thiết.

    • Nghiên cứu thêm về các giải thuật SPIHT, EZW và các ứng dụng của chúng. • Các phương pháp nén được trình bày trong đồ án đã ra đời từ nhiều năm trước do đó cần nghiên cứu những cải tiến đối với mỗi phuơng pháp để nâng cao hiệu quả nén.