Nếu các màu sắc trong một hình ảnh được đánh dấu như là một biểu đồ thống kê trên cơ sở tần số xuất hiện , thì biểu đồ đó không có “nhọn” spiky như chúng ta mong muốn nén thống kê thực
Trang 1Trước hết , em xin chân thành cảm ơn các thầy , các cô trong khoa Công Nghệ Thông Tin, trường Kỹ Thuật Công Nghệ , những người đã trao cho em rất nhiều kiến thức quí báu để em có được ngày hôm nay
Xin chân thành cảm ơn thầy Đoàn Công Hùng , người đã cho em ý tưởng , và thầy Lê Ngọc Anh , người đã tận tình giúp đở em trong suốt quá trình thực hiện đồ án
Cuối cùng , xin được cám ơn gia đình , các bạn bè và tất cả mọi người đã giúp đở em rất nhiều để em có thể hoàn thành đồ án tốt nghiệp
Xin chân thành cảm ơn
Trang 2MỤC LỤC
Chương I : Mở đầu
I.Giới thiệu
II.Lý thuyết tổng quan về nén số liệu
II.1.Các khái niệm về nén số liệu II.2.Các kỹ thuật về nén số liệu II.2.1 Nén không tổn hao ( Lossless Compression )
II.2.2 Nén tổn hao ( Lossy Compression )
Chương II.Tìm hiểu về nén ảnh
I.Lịch sử phát triển
II Các kỹ thuật nén phổ biến
II.1.Nén thống kê và từ điển II.2.Nén có mất
II.3.Điều biến sai số II.4.Nén đáp ứng
Chương III.Nén ảnh phân đoạn – Fractal Image Compression
I.Lịch sữ công nghệ nén ảnh Fractal
II Sự phân đoạn
III.IFS – Iterated Function Systems
III.1.IFS là gì ? III.2.IFS cơ bản III.3.Nén ảnh với IFS
III.4.Nén ảnh với PIFS
Chương IV : Mã hóa và giải mã
I Lược đồ mã hóa
I.1 Sự phân chia khối
I.1.1 Lược đồ phân chia ngang dọc truyền thống I.1.2 Lược đồ phân chia ngang dọc được hiệu chỉnh I.1.3 So sánh
I.2 Domain Block Pool I.3 Chuyển đổi affine ( Hàm mã hóa)
I.3.1 Dùng Vector I.3.2 Dùng ma trận
Trang 3I.3.3 Tính thu gọn - Contractive
I.3.3.1 Ma trận tam giác
I.3.3.2 Giám sát các giá trị phần tử
I.5 Mã hóa Fractal với ảnh màu
I.5.1 RIFS – Recurrent IFS I.5.2 Các phương thức mã hóa Fractal cho ảnh màu I.5.3 Các kết quả mô phổng và đánh giá
II Lược đồ giải mã
II.1 Lược đồ giải mã II.2 Sự phụ thuộc độ phân giải
Chương V Thiết kế chương trình
I Các module chính
II Lưu đồ chương trình
III Chi tiết tại mỗi bước
IV Lưu đồ khối chức năng
Chương VI Thử nghiệm so sánh và hướng phát triển
I Thử nghiệm
II So sánh với một vài phương thức mã hóa thông dụng
III Ưu khuyết điểm và phương hướng phát triển
Chương VII Kết Luận
Phụ lục và tài liệu tham khảo
Trang 4CHƯƠNG
Giới thiệu
Lý thuyết tổng quan về nén số liệu
Các khái niệm về nén số liệu
Các kỹ thuật về nén số liệu
Nén không tổn hao ( Lossless Compression )
Nén tổn hao ( Lossy Compression )
Trang 5I Giôùi thieôu
Trong thôøi ñái ngaøy nay , vôùi söï phaùt trieơn mánh meõ cụa khoa hóc cođng ngheô thođng tin , vieôc öùng dúng tin hóc haău nhö ñaõ vaøo trong taât cạ mói lónh vöïc hoát ñoông sạn xuaât cụa con ngöôøi ôû caùc nöôùc ñaõ vaø ñang phaùt trieơn tređn theâ giôùi ÔÛ nöôùc ta , nhaỉm goùp phaăn vaøo cođng cuoôc Cođng Nghieôp Hoaù – Hieôn Ñái Hoùa , vaân ñeă tin hóc hoùa ñaõ vaø ñang ñöôïc trieơn khai Vieôc öùng dúng tin hóc vaøo cođng taùc quạn lyù vaø ñieău haønh tái caùc cô quan xí nghieôp ngaøy caøng cao vaø ñem lái nhieău hieôu quạ thieât thöïc
Bên cạnh đó, đồng nghĩa với nó là vấn đề lưu trữ và xử lý dữ liệu Cùng với thời gian, sự cập nhật, lưu trữ dữ liệu ngày càng nhiều, điển hình là một số cođng ty xuaât nhaôp khaơu , cođng ty kinh doanh caùc dòch vú haøng hoùa , du lòch , với một khối lượng lớn dữ liệu cần lưu trư î Vì vậy, vấn đề được đặt
ra là làm sao lưu trữ dữ liệu ít tốn kém nhất mà vẫn đảm bảo tính an toàn và chính xác của nó ? Do đó, việc tìm ra phương pháp giảm dung lượng lưu trữ mà vẫn đáp ứng được yêu cầu trên là rất cần thiết
Chúng ta thấy rằng: ngày nay với sự phát triển vượt trội trong công nghệ phần cứng, dung lượng đĩa cứng tăng lên một cách đáng kể và nhanh chóng Một loạt đĩa cứng không ngừng tăng lên về dung lượng ra đời trong khi giá thành sản phẩm lại hạ Bên cạnh đó còn có các thiết bị lưu trữ khác như băng từ, đĩa quang , ñóa DVD vôùi dung löôïng tređn 4.7G cũng được sử dụng rộng rãi Tuy nhiên, cũng chính vì lý do này mà các nhà lập trình thường sử dụng bất cứ tài nguyên nào có
Trang 6thể, kết quả là nhiều sản phẩm phần mềm ra đời nhưng có kích thước rất lớn, chiếm hàng trăm Mbyte Thêm vào đó, nhiều lĩnh vực sản xuất áp dụng những phần mềm khác nhau, để đáp ứng được nhu cầu này đòi hỏi người sử dụng tiếp cận nhiều hơn và tạo thói quen lưu trữ nhiều sản phẩm phần mềm, ngoài ra là việc xử lý nhiều tập tin và nhiều loại dữ liệu khác nhau Do vậy, nén dữ liệu vẫn là vấn đề cần thiết được thực hiện trước khi lưu trữ
Song song với vấn đề trên, một lĩnh vực không thể không kể đến là mạng máy tính Ngày nay, mạng máy tính mà mọi người đều nhắc đến là mạng Internet -mạng của các mạng- Có thể nói rằng: Internet là mạng thông tin toàn cầu và số người kết nối vào mạng đã lên đến vài chục triệu người Vì vậy, nhu cầu truyền thông rất lớn Tất cả mọi người đều muốn có thể tìm kiếm thông tin bất luận chúng ở đâu, đều muốn chia sẻ thông tin, thiết bị với người khác hoặc quản lý thông tin và thực hiện toàn bộ các tác vụ này một cách nhanh chóng, dễ dàng với độ an toàn chính xác cao Ngoài ra, hiện nay ở nước ta ngaønh du lòch ñeơ giôùi thieôu vôùi bán beø theâ giôùi veă ñaât nöôùc , veă con ngöôøi , cuõng nhö caùc cođng ty sạn xuaât muoân cho theâ giôùi bieât ñeân caùc sạn phaơm mang ñaôm bạn saĩc dađn toôc ñoøi hoûi raât nhieău dung löôïng löu tröõ Do đó, bên cạnh việc cải tiến phần cứng như: Modem, đường truyền ta còn phải tìm cách giảm dung lượng dữ liệu cần thiết trước khi truyền để giảm được thời gian truyền và bộ nhớ Đối với mạng Internet, thực hiện tốt điều đó cho phép giảm được cước phí truy cập mạng
Vậy nén dữ liệu là gì ? Ta có thể khái quát : Nén là quá trình giảm dung lượng cần thiết mà vẫn biểu diễn cùng một dữ liệu cho trước
Trong truyền thông số liệu , nén là một kỹ thuật được áp dụng một cách linh hoạt cho luồng thông tin đang truyền Công nghệ bên trong về cơ bản cũng như nhau trong cả hai trường hợp là: loại bỏ thông tin dư thừa hoặc biểu thị thông tin dưới dạng chặt chẽ hơn để giảm tổng số byte
Trang 7phải truyền qua phương tiện truyền thông nhằm giảm đến thấp nhất thời gian chiếm phương tiện của một cuộc truyền đã cho
Đối với nén dữ liệu trên máy PC, có nhiều thuật toán nén khác nhau được thiết kế cho nhiều loại dữ liệu khác nhau như: văn bản, hình ảnh, âm thanh Trong phạm vi của đồ án, ta chỉ xét đến các phương pháp hình ạnh
II Lyù thuyeât toơng quan veă neùn soâ lieôu
II.1 Caùc khaùi nieôm veă neùn soâ lieôu
Nén số liệu là quá trình làm giảm số liệu cần thiết để biểu diễn cùng một lượng thông tin cho trước Các kỹ thuật nén số liệu có thể được thực hiện bằng phân cứng chuyên dụng hoặc phần mềm
Các kỹ thuật nén số liệu bằng phần cứng đòi hỏi phải có các phần cứng đặc biệt được thiết kế thích hợp với băng thông cố định của mạng truyền số liệu Các kỹ thuật nén số liệu bằng phần mềm được thực hiện trên máy tính cá nhân (PC) có thể dùng nén file văn bản, các file ảnh được nhập vào từ scaner hoặc camera và các file
âm thanh
Trong khái niệm về nén, ta cần phân biệt giữa số liệu và thông tin Số liệu (data) dùng để biểu diễn và truyền tải thông tin (information), cùng một lượng thông tin cho trước ta có thể biểu diễn bằng các lượng số liệu khác nhau Đơn
vị đo số liệu (dung lượng) là bit (binary digit) Một bit số liệu về mặt toán học được biểu diễn bằng một chữ số nhị phân 0 và 1, về mặt điện được biểu diễn bằng 1 trong 2 mức điện áp qui ước
Một bit thông tin được định nghĩa là lượng thông tin Giả sử P là xác suất của một ký hiệu, thì lượng thông tin chứa trong ký hiệu đó được định nghĩa là -Log2P bít, công thức này chính là entropy của ký hiệu Vậy Entropy là gì? Trong lĩnh
Trang 8vực lý thuyết thông tin sử dụng thuật ngữ entropy là đơn vị đo thông tin được mã hóa trong một thông điệp Entropy của một thông điệp càng cao thì thông tin nó chứa đựng càng nhiều Entropy của toàn bộ thông điệp là tổng entropy của các ký hiệu thành phần Entropy phụ thuộc vào xác suất xuất hiện của ký hiệu, một ký hiệu có xác suất xuất hiện cao thì thông tin chứa đựng trong nó thấp và sẽ cần ít bít hơn để mã hóa
II.2 Caùc kyõ thuaôt neùn soâ lieôu
II.2.1 Neùn khođng toơn hao ( Lossless Compression )
Nén không tổn hao còn được gọi là nén không nhiễu (Noiseless) hay nén không lỗi (Free Error), đảm bảo không mất mát thông tin sau quá trình mã hoá và giải mã (nó tạo lại một bản sao chính xác của số liệu sau quá trình mã hoá và giải mã) Kỹ thuật này sử dụng trên những nguồn số liệu đảm bảo độ chính xác cao khi lưu trữ hoặc truyền đi như các cơ sở dữ liệu, các bảng tính điện tử, các văn bản Vì với các tập tin này, việc mất mát dù chỉ một bit thông tin là điều không thể được Nén tổn hao có các phương pháp mã hoá như: phương pháp mã hoá Huffman, mã hoá số học, mã hoá LZW
II.2.2 Neùn toơn hao ( Lossy Compression )
Nén tổn hao là kỹ thuật nén chấp nhận mất mát một lượng thông tin nhất định để đạt được hiệu quả nén cao Có thể nói một cách tương tự: Nén tổn hao= Làm trơn + Nén không tổn hao Làm trơn là quá trình thực hiện một phép biến đổi nào đó (như: biến đổi số liệu từ miền thời gian sang miền tần số bằng phép biến đổi Furiê rời rạc gọi là FFT ( Fast Fourier Transform), hoặc phép biến đổi Cosin rời rạc gọi là DCT (Discrete Cosine Transform) ), tiếp đó là quá trình lượng tử hoá Số liệu càng được làm trơn thì mất mát thông tin càng nhiều và tỉ số nén càng cao
Trang 9Nén tổn hao thích hợp với các file hình ảnh, âm thanh được số hoá Hầu hết các kỹ thuật nén tổn hao đều có thể được điều chỉnh để cân bằng giữa độ chính xác và hiệu quả nén Các phương pháp nén tổn hao như: phương pháp JPEG, phương pháp Wavelet, phương pháp MPEG
CHÖÔNG
Trang 10II Lịch Sử Nén Ảnh
Lịch sử phát triển
Các kỹ thuật nén phổ biến
Nén thống kê và từ điển
Nén có mất
Điều biến sai số
Nén đáp ứng
Trang 11I Lịch sử phát triển
Con người giao tiếp với máy tính chủ yếu thông qua màn hình , vì thế đồ họa chính là sự quan tâm chính của các nhà thiết kế và các lập trình viên trên thế giới Các nhà lập trình đã mất rất nhiều thời gian và nổ lực để phát triển giao diện đồ họa người dùng ( Graphical User Interface – GUI ) Hàng triệu con người và hàng tỉ Dollars đã được chi ra để tạo một cuộc cách mạng mới trong việc hiển thị dữ liệu
Con người đã chi một số tiền rất lớn dùng cho việc tạo ra các giao diện người dùng GUI như là Microsoft Windows hay Motif - khả năng hiển thị các hình ảnh đồ họa phức tạp như là các phương tiện truyền thống ( ti vi hay tạp chí ) Điều này đã tạo ra phần mềm mới , được thiết kế để tận dụng các khả năng trên
Các chương trình sử dụng kỹ thuật đồ họa phức tạp thường thấy là trong các ứng dụng máy tính như : trò chơi , giáo dục , internet , thiết kế đồ họa … Các chương trình này đang rất phổ biến hiện nay Các hình ảnh mà chúng sử dụng thì tiêu tốn rất nhiều khoảng trống trên đĩa , điều mà rất khó khăn cho các công nghệ lưu trữ hiện thời
Trong các máy tính của IBM , bộ hiển thị VGA có lẻ là chấp nhận được cho khả năng đồ họa màu chất lượng cao Bộ VGA có thể hiển thị được 256 màu trong một bảng 262144 màu Điều này cho phép bộ VGA hiển thị được các hình ảnh có sắc thái liên tục , như là hình chụp , với một độ trung thực chấp nhận được
Nhưng vấn để ở đây chính là việc lưu trữ các hình ảnh này trong một chương trình Với một bộ VGA được đề cập ở trên thì một hình ảnh có 256 màu với 200 dòng và 320 cột , với mỗi một điểm chúng tiêu tốn một pixel Điều này có nghĩa là với một hình ảnh như trên , chúng sẽ tiêu tốn ít nhất là 64KB Con số này là không lớn đối với các ứng dụng chỉ sử dụng khoảng 100 – 200 hình ảnh cho việc truy cập Nhưng đối với các công nghệ như hiện nay thì việc sử dụng từ vài ngàn đến vài trăm ngàn là chuyện không thể tránh khỏi Cho một ví dụ về bộ phận bán lẻ của một siêu thị , giả sử chúng cần 10000 hình ảnh để lưu trữ thì ta phải mất 640MB ( đối với ảnh 200x320 ) , thì đây là một con số thật không hợp lý tí nào
Trang 12II Các kỹ thuật nén phổ biến
Trong suốt một thập kỉ trước , công việc nghiên cứu cho mục đích lưu trữ các hình ảnh đã có một số kết quả rất khả quan Trong những năm cuối 1970 vàđầu 1980 , hầu hết các phương pháp nén ảnh chỉ tập trung vào sử dụng công nghệ nén không mất ( lossless compression ) truyền thống Các định dạng file nén phổ biến sử dụng công nghệ này là PCX , GIF , BMP … Chúng làm giảm dung lượng các file gốc từ 10% - 90% dung lượng ban đầu
Khi việc sử dụng các hình ảnh đồ họa tăng lên , các định dạng file như là PCX trở không thõa đáng nữa Làm giảm đi một nữa kích thước của file là một điều đáng làm , nhưng trong khi đó nhưng người thiết kế và người sử dụng đang sài hết các khoảng trống trên ổ đĩa của họ một cách nhanh chóng bởi các ứng dụng đa phương tiện đang làm chúng trở nên không còn tính khả thi
II.1 Các phương pháp nén thống kê ( Statistical Compression ) và từ điển ( Dictionary Compression )
Các chương trình truyền thống và các dữ liệu trên máy tính thì đáp ứng rất tốt việc nén trên nền tảng lợi dụng sự thống kê mức độ thay đổi trong tần số xuất hiện của các kí tự riêng lẻ và chuỗi các kí tư hay một cụm kí tự Hệ thống trên nền tảng từ điển thật sự được ngụy trang dưới lớp vỏ chương trình thống kê Tuy nhiên , có một số các kiểu nén không có khuynh hướng nén tốt đối với các hình ảnh có sắc màu liên tục
Vấn đề chính ở đây có một số chương trình bắt nguồn từ sự thật là các điểm ảnh trong các ảnh chụp có khuynh hướng trải rộng ra trên toàn bộ phạm
vi của chúng Nếu các màu sắc trong một hình ảnh được đánh dấu như là một biểu đồ thống kê trên cơ sở tần số xuất hiện , thì biểu đồ đó không có “nhọn” ( spiky ) như chúng ta mong muốn nén thống kê thực thi Thật sự , trên việc vận hành lâu dài , các biểu đồ về hình ảnh sống động có khuynh hướng là phẳng Điều này có nghĩa là mỗi mã điểm ảnh đều có cùng cơ hội thể hiện như bất kỳ điểm nào khác
Các chương trình nén trên nền tảng từ điển đều gặp những vấn đề tương tự Các ảnh trên nền tảng chụp được quét lên thì không có các đặc tính dữ liệu chung để tạo ra nhiều sự xuất hiện của các cụm ( phrase ) giống nhau Xét một hình ảnh có cấu trúc đường ngang như bề mặt của một ngôi nhà bằng gỗ , nó có thể cho ta các chuỗi tương tự trong một số hàng liên tiếp
Trang 13Thật không may , bởi vì sự đa dạng của thế giới thực , các đặc tính giống nhau trên mỗi hàng sẽ có khuynh hướng khác nhau ( không đáng kể ) đối với cái ban đầu Vượt ra ngoài một chuỗi hai mươi điểm ảnh , một hoặc hai điểm sẽ thay đổi bởi một bước đơn giản từ việc quét ảnh trước và sau Và trong khi sự khác nhau đó là đủ nhỏ để chúng trở nên hoặc là không phát hiện được hoặc là không có nghĩa đối với mắt con người Các chuỗi có sự so khớp chính xác đối với phương thức nén này sẽ được sử dụng Bởi vì sự thay đổi không đáng kể , chiều dài của các chuỗi so khớp có khuynh hướng trở nên nhỏ đi Điều này sẽ làm hạn chế hiệu quả của việc nén
II.2 Nén tổn hao ( Lossy compression )
Cũng giống như các dữ liệu âm thanh , các hình ảnh đồ họa có một thuận lợi trên các tập tin dữ liệu máy tính truyền thống : chúng có thể được hiệu chỉnh trong suốt chu trình nén / giải nén mà không làm ảnh hưởng đến sự cảm nhận của người dùng Việc thay đổi thứ yếu một cách chính xác của bóng điểm ảnh ( shade pixel ) là ở đây và có thể dễ dàng hoàn thành nếu việc hiệu chỉnh được làm một cách cẩn thận Bởi vì các ảnh đồ họa trên máy tính thì thông thường được quét lên từ thế giới thực , chúng thông thường tạo ra một thể hiện không thực sự hoàn chỉnh của ảnh chụp hoặc của một số phương tiện in khác Chương trình nén tổn hao không làm mất đi sự tự nhiên cơ bản của hình ảnh thì mới hẳn là khả thi
Đưa ra phương pháp nén có mất cho các hình ảnh đồ họa là điều hoàn toàn có thể thực hiện được , nhưng chúng ta thực thi nó như thế nào ? Các nhà nghiên cứu đã thử sử dụng một vài công nghệ tương tự với công nghệ làm việc trên giọng nói , như là mã hóa sai số ( Differential Coding ) và mã hóa đáp ứng ( Adaptive Coding ) , nhưng chúng đã không như mong đợi Lí do chính là sự khác nhau cơ bản giữa dữ liệu âm thanh và hình ảnh
Dữ liệu âm thanh được lấy mẫu sử dụng các định dạng truyền thống thì có đặc trưng lặp đi lặp lại ( repetitive ) Âm thanh , bao gồm cả giọng nói , được tạo ra từ các sóng sine , lặp lại mỗi giây tại mỗi thời điểm Mặc dù dòng vào tại bộ DAC trên máy tính bao gồm hàng tá các tần số khác nhau được thêm vào với nhau thì sóng sine nói chung vẫn kết hợp để tạo ra dạng sóng lặp ( repetitive waveforms )
Tính lặp lại tự nhiên của dữ liệu âm thanh có thể dùng cho việc nén Các công nghệ như là mã hóa đoán trước tuyến tính ( Linear Predictive Coding ) và sự điều biến mã xung sai số đáp ứng ( Adaptive Differential Pulse Code
Trang 14Modulation ) đã lợi dụng điều này để mã hóa các dòng âm thanh với xác xuất từ 50 – 90 phần trăm
Khi sự nghiên cứu bắt đầu trên việc nén các ảnh đồ họa , các ảnh số hóa đã được áp dụng với các công nghệ tương tự và đã có một vài sự thành công Khởi đầu , các nhà nghiên cứu thực hiện trên việc nén các dòng dữ liệu được lưới hóa ( rasterized data ) Khi các hình ảnh được số hóa , nó sẽ hiển thị như là một chuỗi tuần tự các điểm ảnh Một dòng tại một thời điểm được hiển thị trên màn hình sẽ làm việc từ trái sang phải và từ trên xuống dưới Vì thế , một lát mỏng của hình ảnh sẽ được vẽ khi mỗi dòng hoàn thành , cho đến khi hình ảnh được hiển thị đầy đủ trên màn hình Khi được số hóa , các điểm ảnh có kích thước từ một đến hai mươi bốn bit Các màn hình đồ họa ngày nay sử dụng
8 bit để xác định một điểm ảnh
II.3 Sự điều biến sai số ( Differential Modulation )
Sự điều biến sai số phụ thuộc vào khái niệm rằng các dữ liệu tín hiệu tương tự có khuynh hướng biến thiên trong các mẫu trơn mịn ( smooth patterns ) , với các bước nhảy căn bản trong biên độ tín hiệu là ngoại lệ , không theo nguyên tắc Trong dữ liệu tín hiệu âm thanh , điều này là đúng miễn sao tỉ lệ lấy mẫu của tín hiệu là một vài cái gì đó cao hơn thành phần tần số cực đại
Sự điều biến sai số của một tín hiệu âm thanh lợi dụng việc này bằng cách mã hóa mỗi mẫu tín hiệu như là một sự khác nhau từ chính những mẫu trước đó ( predecessor ) Ví dụ như mỗi mẫu âm thanh là tám bit thì một hệ thống mã hóa sai số có thể mã hóa sự khác nhau giữa các mẫu là bốn bit , nén dữ liệu ban đầu được 50% Những phần mất đi cho ta thấy rằng sự khác nhau không phải luôn luôn được mã hóa khi sử dụng phương pháp sai số chuẩn Các tín hiệu có thể cao hơn giới hạn mã hóa hoặc việc mã hóa có thể quá kém để điều chỉnh một sự khác nhau nhỏ Khía cạnh mất đi này của mã hóa sai số có thể được giám sát đủ tốt để mà có thể đưa ra một tín hiệu hoàn chỉnh
Sự điều biến sai số thì có nhiều vấn đề hơn đối với việc nén các dữ liệu đồ họa Các điểm ảnh trong hình có thể không chắc chắn phụ thuộc vào sự biến thiên lên xuống trong việc tăng độ mịn hình ảnh Các đường phân chia rõ ràng giữa các thành phần khác nhau của một hình ảnh chính là qui tắc Điều này có nghĩa là một hệ thống tin dùng mã hóa sai số thì cần phải điều chỉnh sự sai lệch cả lớn lẫn nhỏ giữa các mẫu , giới hạn sự tác động của nó Một số hình ảnh có đặc tính kéo dài liên tục của dữ liệu , nghĩa là các điểm ảnh có một ít hoặc là không có sự khác nhau , và vì thế việc nén được thực hiện rất tốt
Trang 15Nhưng ngược lại , một số nơi trong ảnh lại có sự thay đổi sắc thái đột ngột , và việc nén sẽ không thể tốt được ở những nơi đó
Nói chung , giải thuật mã hóa sai số các hình ảnh đồ họa thì dường như không có tạo ra một công nghệ nén tốt hơn giải thuật nén không tổn hao tốt nhất Nó không làm phát sinh ra một lợi ích to lớn cần thiết nào trong sự phát triển công nghệ nén
II.4 Mã hóa đáp ứng ( Adaptive Coding )
Mã hóa đáp ứng ( thường được sử dụng chung với mã hóa sai số ) thì dựa vào việc tiên đoán trước các thông tin về sắc thái các điểm ảnh trên nền tảng các đểm ảnh được thấy ở trước đó Cho một ví dụ , nếu mười điểm ảnh cuối cùng trong một ảnh sắc xám ( gray scale ) thì tất cả giá trị điểm ảnh nằm trong khoảng 45 – 50 , một hệ thống nén đáp ứng có thể dự đoán các điểm ảnh kế tiếp sẽ cùng nằm trong một vùng với xác xuất rất cao Một lược đồ mã hóa dựa trên nền tảng entropy , như mã hóa Huffman hay Arithmetic , có thể gán xác suất xuất hiện vào các mã mới Giả sử rằng phương pháp dự đoán cho phép chúng ta tạo ra một sự tiên đoán về xác suất xuất hiện của các pixel , chúng ta sẽ có :
Hình 1 Adaptive coding
Hầu hết các lược đồ đáp ứng dựa vào việc sử dụng một vài các điểm ảnh chung quanh như là một phần của sự tính toán cho xác xuất xuất hiện của upcomming pixel Trong hình trên , một điểm ảnh được mã hóa được thể hiện tại vị trí (0,0) Còn các điểm ảnh khác như A, B ,C ,D được dùng một cách bình thường trong việc tính toán xác suất xuất hiện Sự dự đoán các giá trị upcoming của pixel đích ( target ) có thể được làm trên cơ bản một vài phương trình dự đoán :
A
Trang 16Hình 2 Sự dự đoán điểm ảnh
Một số công nghệ sử dụng các dữ liệu trên để tính toán hầu hết giá trị có thể có của điểm ảnh đích , và sau đó chúng hiệu chỉnh lược đồ mã hóa Trong khi các việc tính toán đó cho ra kết quả khả quan thì một lần nữa nó được xem như là một kỹ thuật không hiệu quả trong công nghệ nén ảnh
A
B
C (A + C) / 2 (A + D) / 2 (A + ( C + D ) / 2 ) / 2 (A + ( C – B )) (A + (( D – B) / 2))
Trang 17CHƯƠNG
_Fractal Image Compression_
Lịch sữ công nghệ nén ảnh Fractal
Sự phân đoạn
IFS – Iterated Function Systems
IFS là gì ?
IFS cơ bản
Nén ảnh với IFS
Nén ảnh với PIFS
Trang 18I Lịch sử công nghệ nén ảnh fractal
Thuật từ Fractal đầu tiên được sử dụng bởi Benoit Mandelbrot để chỉ định những đối tượng Ông đã thực hiện một ví dụ được mô tả bởi phương trình cho thấy một sự đa dạng vô hạn của các chi tiết đó Điều này có thể được xem như la một dạng của việc nén : phương trình tự nó có thể được mô tả với
một vài các bit thông tin hoặc được thể hiện trong một chương trình ngắn ,
nhưng hình ảnh kết quả sẽ cần một lượng vô hạn các bit để thể hiện như là một tập các điểm ảnh Chương trình FracInt phổ biến có thể phát sinh rất nhiều những hình ảnh tinh tế từ những công thức đơn giản ( one-line formulars )
Michael Barnsley và bạn đồng nghiệp của ông ta đã nhận thấy được tiềm năng của phương thức Fractal cho việc nén ảnh Barnsley đã phát triển học thuyết Hệ Thống Chức Năng Được Lặp Lại ( Iterated Function Systems ) , viết tắt là IFS , đầu tiên được giới thiệu bởi J.Hutchinson năm 1981 Sau khi phát hành cuốn sách “Fractals Everywhere” năm 1988 thì nén Fractal trở nên là một chủ đề rất thời thượng Điều hấp dẫn của công nghệ này là tỉ lệ nén hấp dẫn của nó , tăng từ 10000 lên 1
Thật không may , tỉ lệ nén đó có thể đạt được chỉ với những hình ảnh được cấu trúc đặc biệt và chỉ với sự trợ giúp đáng kể của người hướng dẫn tiến trình nén Quá trình này được biết như là “Graduate Student Algorithm” ( tạm dịch là “ Giải Thuật Sinh Viên Tốt Nghiệp “ ) Nghĩa là cho một sinh viên tốt nghiệp vào một văn phòng và trạm làm việc đồ họa , khóa cửa lại , chờ cho đến khi người sinh viên đó tìm ra được một IFS tốt nhất cho hình ảnh , và mở cửa ra Tiến trình nén này không thể hoàn thành một cách tự động , thậm chí với siêu máy tính Vì thế , việc nén dựa trên nền tảng IFS hóa ra không thực tế
Năm 1988 , ông Arnaud Jacquin , một học trò của Barnsley đã tạo ra một điểm mốc của việc nén Thay cho việc tìm ra một IFS cho một hình ảnh hoàn chỉnh , ông đã có những ý tưởng về sự phân chia hình ảnh thành những vùng ( range ) không chồng lấp và tìm ra một IFS riêng cho mỗi ảnh phân chia đó
Trang 19Điều này sẽ biến vấn đề phức tạp trên thành một tác vụ có thể quản lý được , điều mà có thể được làm một cách tự động Trong luận văn tiến sĩ , ông ta đã
phát triển lý thuyết Hệ Thống Chức Năng Lặp Lại Được Phân Chia ( Partitioned
Iterated Function Systems ) , viết tắt là PIFS , và thực hiện một phiên bản về giải thuật của ông ta trong phầm mềm
Năm 1991 , Barnsley và Sloan đạt được bằng sáng chế Mỹ về công nghệ này Công ty của họ , Iterated Systems , thì bán những sản phẩm phần mềm và phần cứng sử dụng nó , nhưng không có tung ra chi tiết về công nghệ này Đặc biệt , FIF ( Fractal Image Format) được sử dụng bởi các sản phẩm của Iterated Systems thì càng không được mô tả rộng rãi Chính vì điều này mà nén ảnh Fractal không được sử dụng thực tế nhiều như là các công nghệ khác Tuy nhiên , nén Fractal vẫn là chủ đề của việc nghiên cứu , và nó đã thật sự chứng minh được tính ưu việt nhất cho các ứng dụng , nơi mà tỉ lệ nén cao rất được quan tâm
PIFS cũng có tên là Local Iterated Function Systems ( LIFS – tạm dịch
là Hệ Thống Chức Năng Được Lặp Lại Cục Bộ ) , và Barnsley lại còn sử dụng
cả thuật từ “Fractal Tranform” , tất cả chúng đều nói đến cùng một công nghệ
II Sự phân đoạn
Bất cứ một đối tượng hình hoc bình thường nào cũng đều có liên quan đến scale Cho một ví dụ , một hình tròn khi quan sát nó bằng việc sử dụng một cửa sổ lớn hơn là toàn bộ hình tròn đó , khi nhìn thông qua cửa sổ này , bạn sẽ thấy nó là một hình tròn Tiếp tục , khi quan sát nó bằng một cửa sổ nhỏ hơn chu vi của nó thì ta sẽ thấy nó như là một vòng cung đường tròn Và khi quan sát nó bằng một cửa sổ rất nhỏ , chúng ta sẽ tưởng nó là bao gồm rất nhiều các đường nhỏ xíu
Trang 20Hình 3 Quan sát hình tròn tại các mức ( scale ) khác nhau
Hình 4 Tam giác Sierpinski
Nhưng đối với một đối tượng Fractal , có không một mức quan sát là lớn hay nhỏ thì hình dạng và những gì phức tạp trong nó đều không thay đổi , không có cách nào để chia cắt nó vào trong một bộ tích hợp các đối tượng con , bởi vì các thành phần trên nó có tính tương tự nhau trên toàn bộ khung hình và thật phức tạp ( xem hình tam giác Sierpinski ) Bất cứ phần nào , khi phóng lớn lên , đều trở thành một tam giác Sierpinski Tính tự giống nhau ( seft-similarity ) đó là một đặc tính hết sức quan trọng của kỹ thuật nén ảnh Fractal và là một đặc tính nổi bậc để nhận dạng kỹ thuật này trong các kỹ thuật nén khác
Trong quá trình xử lý hình ảnh , các ứng dụng Fractal tập trung vào hai phần chính :
1 Áp dụng dấu hiệu và chiều ( không gian ) như là một đặc trưng vào trong phân đoạn ảnh , phân tích bố cục , …
2 Áp dụng IFS ( Iterated Function Systems ) vào trong quá trình nén ảnh
Hệ thống mã hóa và giải mã Fractal được thể hiện trong sơ đồ bên dưới Tại giai đoạn mã hóa , cho mỗi khối range , một chuyển đổi thu nhỏ và khối domain đuợc tìm thấy , sau đó sự chuyển đổi thu nhỏ và vị trí của các domain sẽ được truyền đi đến đầu ra thông qua một kênh Ở giai đoạn giải mã , hình ảnh được tái tạo lại sử dụng các chuyển đổi và vị trí các khối domain ở trên bằng việc lặp nhiều lần công việc này
decode
Trang 21Hình 5 Sơ đồ mã hóa và giải mã
III Iterated Function System ( IFS ) là gì ?
Chúng ta điều thấy rằng tất cả các hình ảnh phức tạp có thể thu được từ những công thức đơn giản Việc đưa ra một công thức sẽ dễ dàng dẫn xuất ra một hình ảnh tương ứng Nhưng nếu đi theo một hướng ngược lại , từ ảnh đến công thức , thì điều này sẽ là khả thi hơn , nó sẽ cho một tỉ lệ nén tuyệt vời Thay cho việc thể hiện một ảnh như là một trình tự các giá trị điểm ảnh , hình ảnh có thể được khởi tạo lại từ một công thức , điều mà sẽ tốn rất ít dung lượng lưu trữ Ta hãy thử xét một ví dụ sau :
Giả sữ rằng để thể hiện một cái đĩa tròn màu đen trên nền trắng ,
ta phải liệt kê tất cả các điểm ảnh trên cái đĩa đó với hai chiều ngang và dọc , thì ngược lại , ta có thể đưa ra một phương trình cho ảnh này , chỉ định nó như là một tập các điểm (x,y) :
(x – a) 2 + (y – b) 2 < r 2
Ở đây , r là bán kính của cái đĩa và ( a,b ) là tâm của nó Phương trình này thì quá đủ để khởi tạo lại hình ảnh chiếc đĩa Hơn nữa , hình ảnh này có thể được khởi tạo lại tại bất kỳ độ phân giải nào ( mà điều này là không thể khi ta thể hiện chúng bằng tập các điểm ảnh ) Có một sự khác nhau tương tự giữa các font kí tự có thể co giãn và các font cố định ( được tạo ra từ các điểm ảnh )
Nhưng các hình ảnh trong thế giới thực thì không phải lúc nào cũng được thể hiện như một phương trình đơn giản Thật khó để tìm ra một công thức mô tả chính xác hình ảnh đó Ý tưởng cho điều này là lợi dụng tính tự giống nhau ( seft-similarity ) trong một hình ảnh để tìm ra sự thể hiện gần đúng như là một phân đoạn ( cái mà sẽ phô bày ra tính tự giống nhau ở mỗi mức khác nhau ) Thay cho việc đưa ra một phương trình rõ ràng được thõa mãn bởi tất cả các điểm của hình ảnh , thì Fractal được định nghĩa như là một giải pháp điểm cố định ( fixed-point ) của IFS
IV Thuật toán IFS cơ bản
Một ánh xạ từ một tập vào chính nó thì được gọi là co lại ( contractive ) nếu nó làm giảm khoảng cách : khoảng cách giữa f(x) và f(y) thì nhỏ hơn
Trang 22khoảng cách giữa 2 điểm x và y Ví dụ như hàm f(x) = x/2 được định nghĩa trên tập các số thực là co lại được Biểu diễn định lý ánh xạ thu nhỏ ( Contractive Mapping ) một cách ngắn gọn , rằng ánh xạ co lại có một điểm được cố định duy nhất , nghĩa là giá trị x thì tương đương với f(x) = x Hơn nữa , điểm được cố định có thể thu được bởi việc bắt đầu từ bất kỳ điểm x0 nào và cứ việc tính theo trình tự :
Một IFS bao gồm tập hữu hạn các ánh xạ hội tụ w1 … wn trên tập IR2 Một IFS có thể được áp dụng cho ảnh trắng đen như sau Mỗi điểm x ( đen ) của ảnh được ánh xạ thành N điểm w1(x)… wN(x) Hội của tất cả những điểm kết quả thì tạo ra một hình ảnh trắng đen khác Vì vậy , IFS sẽ chuyển đổi một ảnh này sang một ảnh khác IFS thì tự nó là một ánh xạ hội tụ Và vậy nó có một điểm cố định duy nhất ( unique fixed point ) bên trong tập tất cả ảnh đen trắng Vì thế , bằng việc bắt đầu từ một ảnh tùy ý và áp dụng lặp lại IFS thì tiến trình sẽ hội tụ thành một ảnh duy nhất , cái mà chỉ phụ thuộc vào IFS chứ không còn phụ thuộc vào hình ảnh ban đầu
Vậy thực chất việc giải nén Fractal là như thế nào? Bộ giải nén chỉ cần biết mô tả của IFS và như vậy là có thể tái tạo hình ảnh từ đó Phương pháp này làm việc bất chấp dạng chính xác của IFS , miễn là nó hội tụ IFS có thể được ví như là một bộ máy sao chép đặt biệt ; Nó tạo ra N bản sao thu nhỏ của ảnh gốc , và dán chúng lại với nhau Mỗi bản sao được làm giảm đi là vì mỗi
wi là một hội tụ Bằng việc lấy đầu ra và cho lại vào đầu vào thì hình ảnh được phát sinh tại mỗi bước ngày càng giống với ảnh ban đầu và quá trình sẽ hội tụ thành một ảnh điểm cố định duy nhất , cũng được gọi là attractor của IFS
Hình ảnh kết quả là một Fractal , bởi vì nó chứa đựng các bản sao thu nhỏ của chính nó tại tất cả các mức Ta sẽ thấy chi tiết hơn nếu chúng ta phóng
to một phần của ảnh lên Vì tính chất tự giống nhau ( Seft – Similarity ) này , ảnh được nén sử dụng IFS thì xứng đáng với tên gọi là nén ảnh Fractal ( Fractal Image Compression )
Trang 23Trên đây , chúng ta chỉ đề cập đến hình ảnh đen trắng ( gray scale ) nhưng nó cũng có thể được áp dụng cho các ảnh màu Vấn đề này chúng ta sẽ thảo luận ở phần sau
V Nén ảnh với IFS
Một IFS cho một sự xấp xỉ tốt của một hình ảnh I nếu điểm cố định của IFS là một ảnh gần tương đồng với I Mục đích là để tìm một tập các ánh xạ hội tụ w1 … wN để hội với W của tất cả các ánh xạ có điểm cố định gần với I
Điều này thì thật không khả thi bởi việc ta phải thử vài ánh xạ , tính toán các điểm cố định kết quả , so sánh nó với I và bắt đầu lại với những ánh xạ khác cho đến khi một cái hợp nhất được tìm thấy Thay vào đó , chúng ta sẽ thử tìm ra một ánh xạ hội tụ W sao cho W(I) thì gần giống với I Định lý Collage của Barnsley nói rằng nếu W(I) là đủ gần với I thì điểm cố định
Mỗi lần các phần được xác định, máy tính có thể dẫn xuất ra những ánh xạw j và vì thế ta có một IFS cho ảnh này Có rất nhiều sự linh hoạt trong việc chọn lựa các ánh xạ , miễn sao chúng là hội tụ , và những hàm Affine thì luôn được sử dụng ở đây
Trong không gian một chiều , hàm affine có dạng như sau :
ƒ(x) = a*x + b
Trang 24Ở đây , a và b là hằng số Trong không gian 2 chiều , hình ảnh của một điểm X có tọa độ ( x,y) là :
ƒ(X) = A*X + B
Và ở đây , A là ma trận 2 chiều và B là một vector hằng số Ma trận A xác định việc quay , độ nghiêng , và mức ( scale ) cho ảnh , vector B thì xác
định sự biến đổi Điều kiện có tính hội tụ trên ƒ có thể được biểu thị như điều
kiện trên hệ số của ma trận A : hệ số scale phải nhỏ hơn 1
Sau khi tất cả sự chuyển đổi affine đã được chọn , IFS có thể được thể hiện lại ở dạng thu gọn bởi việc mã hóa các hệ số của tất cả các sự biến đổi Nếu một cách cắt dán tốt được tìm thấy , thì tổng số lượng các chuyển đổi affine là nhỏ hơn rất nhiều tổng số lượng các pixel trong ảnh , vì thế việc mã
hóa các hệ số đòi hỏi ít bit hơn nhiều so với việc liệt kê tất cả các giá trị pixel
Điều này giải thích tại sao việc mã hóa ảnh sử dụng IFS là một dạng của nén dữ liệu Việc nén là tổn hao bởi vì việc dùng IFS cho ta hình ảnh sắc nét nhưng không bằng với ảnh gốc
Cái khó khăn chính của tiến trình nén là tìm ra bên trong ảnh những phiên bản thu nhỏ của toàn bộ ảnh Hình ảnh trong thế giới thực thường chứa nhiều cái tương tự với nó , nhưng chỉ ở giữa những phần được chọn của ảnh Bước đột phá ở đây là: với mỗi phần được chia trong ảnh gốc , tìm một IFS cục bộ cho mỗi phần đó Với phương pháp mới này thì cuối cùng chúng cũng trở nên khả thi trong việc thực hiện tự động tiến trình nén và hơn thế nữa là để thực hiện nó trong một khoảng thời gian cho phép
VI Nén ảnh với Partitoned Iterated Function Systems – PIFS
Như đã nói ở phần trước , nén là một công việc làm giảm đi sự dư thừa dữ liệu Ở đây cũng tương tự như thế , các giải thuật nén ảnh cũng như là lượng tử hóa vector ( Vector Quantization ) và nén Fractal ( Fractal Compression ) có sự tham gia của PIFS bằng việc làm giảm sự dư thừa của hình ảnh đầu vào Những phương pháp nén các file văn bản thì là không mất dữ liệu ( lossless ) , ngược lại phương pháp nén ảnh là chỉ tìm một sự xấp sỉ và vì thế chúng luôn có mất
Lượng tử hóa vector ( Vector Quantization ) sử dụng từ điển ( hoặc là sách mã – codebook ) chứa các mẫu pixel Hình ảnh vào được phân chia thành các khối pixel nhỏ , và mỗi khối được mã hóa như một mẫu tương ứng với hầu
Trang 25hết các mẫu có sẵn trong từ điển Thường thì một khối có cùng kích thước với các mẫu tự điển nhưng tất cả các khối không cần phải như vậy , chúng có thể có kích thước khác nhau Bộ giải mã phải có phiên bản của từ điển và như vậy chúng có thể dễ dàng khởi tạo lại một ảnh xấp xỉ với hình ảnh ban đầu bằng việc kết hợp lại các mẫu từ điển được chỉ định bởi bộ mã hóa
Nén Fractal với PIFS thì tương tự với lượng tử hóa vector , nhưng trong trường hợp này không có tự điển bên ngoài Hình ảnh đầu vào tương tác với từ điển của chính nó Bộ giải mã không có hình ảnh ban đầu , nhưng nó có thể được tái tạo bằng việc lặp lại chu trình PIFS Vì từ điển chỉ là một cuốn sách mã ảo ( virtual codebook )
Bộ nén trước hết phân chia hình ảnh ban đầu thành một tập các range không chồng lấp ( range – tạm dịch là vùng ) Các range này thông thường là những hình vuông hay hình chữ nhật , nhưng nó cũng rất tốt với các hình là tam giác Cho mỗi range , bộ nén sẽ tìm một phần của hình ảnh ban đầu , được gọi là domain ( domain – tạm dịch là miền ) , cái mà tương tự với range Một domain đóng vai trò là một mẫu pixel trong việc lượng tử hóa , nhưng ở đây nó phải lớn hơn range để chắc rằng việc ánh xạ từ domain sang range là sự hội tụ trong các chiều không gian
Nói chung , bộ nén phải tìm kiếm các domain , cái mà lớn hơn gấp hai lần range ( nhưng tỉ lệ khác là có thể ) Trái với range , domain có thể chồng lấp được
Hình 6 Ảnh “sunset” với các range và domain được tìm thấy
Hình cho thấy hai range và hai domain tương ứng Chúng được chọn bằng giải thuật nén được làm nổi bậc lên Giải thuật đã tìm thấy sự tương tự ( similarity ) giữa hai phần không liên quan với nhau trong ảnh : một range nằm
ở trên trời bên phải và một domain nằm kề bên , lớn gấp 2 lần range , ở bên
Trang 26trái Giải thuật còn tìm thấy một range nằm trong domain , ở dưới đám mây Trong trường hợp này thì range và domain thì chồng lấp lên nhau Sự tương tự này thì khá là phổ biến trong ảnh thế giới thực và nén fractal đã lợi dụng điều này
Để ước định sự giống nhau giữa một domain D và một range R , bộ nén phải tìm một ánh xạ tốt nhất có thể từ domain sang range , để cho ảnh w(D) càng gần với ảnh R thì càng tốt Khi chúng ta đã đạt được bước trên thì những chuyển đổi affine là thuận lợi cho mục đích này , nhưng những chuyển đổi không tuyến tính cũng có thể được sử dụng miễn sao chúng là hội tụ Những sự chuyển đổi hai chiều đã được dùng để chuyển đổi hình ảnh đen trắng Ba chiều cho hình ảnh xám , trong đó hai cho các chiều không gian và một cho thành phần độ chói Khi đó một ánh xạ affine được kết hợp từ một thành phần hình học ( thành phần ánh xạ domain sang range) và một thành phần độ chói (thành phần thay đổi các giá trị mật độ pixel )
Hoàn toàn đúng như vậy , một điểm (x,y) với độ chói z tương ứng với một domain Di được ánh xạ thành :
i
i i
i i
i
b d d
z y x c
a a
a a x
y
x
1 , 4
, 3 ,
2 , 1 ,
0 0
0 0
Các hằng số aij và dij chỉ định thành phần hình học , hằng số c i và b i
chỉ định thành phần độ chói c i thể hiện độ tương phản và nhỏ hơn một để chắc
rằng sự ánh xạ là hội tụ trong chiều độ chói b i thể hiện thành phần độ sáng được sử dụng sau khi độ tương phản được làm giảm
Trong thực tế , bộ nén không thể xác định rõ ràng hằng số aij và dij
cho mỗi domain Chúng ngầm được xác định bởi kích thước tương đối, phương hướng và vị trí của domain đối với range Trong trường hợp đặc biệt , nếu bộ nén chỉ tìm kiếm những domain chính xác lớn gấp 2 lần range thì nhân tố mức ( scaling factor) thông thường được dẫn xuất từ giá trị aij , sẽ thực sự được sử
dụng và bằng 0.5 Tương tự , nếu các domain và range được giới hạn là các hình vuông, có 8 sự định hướng có thể có của domain gắn liền với hình vuông : quay 4 và đối xứng 4 Vì thế 3 bit là đủ để mã hóa hướng Cuối cùng hằng số chuyển đổi dij được xác định bởi vị trí góc trên bên trái của domain
Trang 27Quá trình đơn giản hóa được mô tả ở trên dường như quá phức tạp nhưng chúng thực sự cần thiết để làm giảm đi sự phức tạp về những tỉ lệ có thể dễ dàng quản lý được Theo lý thuyết , các range và domain có thể có hình khoai tây thay cho hình vuông , các ánh xạ hội tụ có thể không có tuyến tính thay cho các ánh xạ affine , … Tuy nhiên , không gian tìm kiếm sẽ trở nên quá lớn và kết quả là việc nén trở nên cực kỳ chậm cho việc sử dụng thực tế Nhưng thậm chí với các ánh xạ affine đơn giản , việc tìm kiếm domain tối ưu cho một range cho trước có thể vẫn là một hành động xa vời
Với một range R cho trước , bộ nén phải kiểm tra số lượng các domain có thể Với mỗi domain D , bộ nén phải tìm ra một ánh xạ affine tối ưu từ D sang R Khoảng cách nhỏ nhất giữa ảnh R và ảnh w(D) chính là ánh xạ tốt nhất w , nơi mà khoảng cách được lấy trong chiều độ chói , chứ không phải trong các chiều không gian
Như vậy , một khoảng cách có thể được định nghĩa trong nhiều cách , nhưng để đơn giản cho việc tính toán , ta sử dụng đại lượng RMS ( Root Mean Square ) Với một range và một domain cho trước thì khoảng cách RMS chỉ
phụ thuộc vào độ tương phản c i và độ sáng b i Khoảng là nhỏ nhất khi thành
phần dẫn xuất ra cả 2 là đều bằng 0 Vì thế ta có thể thu được c i và b i bằng cách giải quyết 2 phương trình tuyến tính đơn giản
Khi mà khoảng cách RMS giữa range và các domain được chọn đã được xác định , bộ nén sẽ chọn một domain với khoảng cách nhỏ nhất , mã hóa ánh xạ affine tương ứng , và tiếp tục với các range kế tiếp
Trang 28CHƯƠNG
Lược đồ mã hóa
Sự phân chia khối
Domain Block Pool
Chuyển đổi affine ( Hàm mã hóa)
Lượng tử hóa
Mã hóa Fractal với ảnh màu
Lược đồ giải mã
Lược đồ giải mã
Sự phụ thuộc độ phân giải
Trang 29I Lược đồ mã hóa Fractal
Hình 7 Lược đồ mã hóa
I.1 Sự phân chia khối
Như đã nói ở trên , nén Fractal là biến đổi các domain sang range , nhưng làm thế nào để phân chia các domain và các range đó thì lại là một vấn đề cần quan tâm Mặc dù không quan trọng lắm nhưng nó cũng quyết định một phần về chất lượng và thời gian nén
Thực sự không khả thi khi ta phải tìm kiếm toàn bộ tất cả những gì có thể của sự phân chia hình ảnh trong những khối range với các hình và kích thước khác nhau Nếu không có một lược đồ sự phân chia - PS ( Partition Scheme ) - hợp lý thì quá trình nén sẽ không khả thi Điều này đã giải thích tại sao là sự phân chia hình ảnh lại là một công đoạn quan trọng trong quá trình nén ảnh Trong thực tế , yêu cầu để có một lược đồ phân chia nhanh và tối ưu là có thể
Có một vài phương pháp khác nhau để chọn lựa các khối hình của cấu trúc PS Ở đây , ta chỉ quan tâm đến khối hình chữ nhật và hình vuông vì chúng
Phân Đoân
Tạo Domain Block Pool
Chuyển đổi affine Lượng
tử hóa
FRC file TGA file
Trang 30đơn giản và có khả năng tối ưu cao Yêu cầu là thiết kế một phương thức hiệu quả tạo ra ít sự tổn hại thông tin nhất trong giai đoạn nén để đạt được tốc độ nén cao nhất
Một hình ảnh được phân chia vào trong một mảng hai chiều của khối pixel kích thước BxB , được gọi là khối range Cho ví dụ , kích thước của một ảnh là 2 l 2l , 512x512 hoặc 256x256 , thì khối range sẽ là 4 4, 8 8, 16
16 , 32 32 Các khối range thường được mã hóa theo hàng bởi thứ tự của các hàng , mảng 2 chiều của các khối range có thể được xem như là một dẫy các mảng một chiều , nghĩa là {R i}
Hình 8 Sự phân chia một hình ảnh thành một tập các khối range
I.1.1 Lược đồ phân chia hình vuông ( Quadtree ) và ngang dọc truyền thống (conventional horizontal vertical parition scheme )
Đây là một phương thức đơn giản được đưara lần đầu tiên bởi Jacquin Lúc bắt đầu , PS chứa các hình vuông có kích thước bằng nhau Sau đó , trong suốt quá trình nén , một hình vuông sẽ được phân chia thành bốn hình vuông con tương ứng cho đến khi đạt được chất lượng nén yêu cầu Sự chọn lựa này là hình vuông để cho sự phân chia của nó cho một cải tiến lớn nhất về chất lượng hình ảnh
R2
R1 R2
… Rm
Trang 31Hình 9 ảnh “Lena” được phân chia theo dạng hình vuông ( Quadtree )
Một phương pháp khác là phân chia các khối theo chiều ngang và dọc thành các khối nhỏ có dạng hình chữ nhật Thông tin gợi nhớ đối với mỗi khối chứa đựng dấu hiệu để biết rằng có hay không khối này đã được phân chia thành các khối nhỏ hơn ( một bit ) Điều này xác định số lượng các bit được yêu cầu , chúng phụ thuộc vào kích thước các khối được phân chia Hình cho ta cái nhìn kĩ hơn về một PS ngang dọc :
Hình 10 ảnh “Lena” với PS ngang dọc truyền thống
Trường hợp này cho ta sự linh hoạt và chất lượng ảnh tốt hơn là phương pháp PS Quadtree Điều bắt buột để phân tích một số lượng lớn sự khác nhau cho mỗi sự phân chia khối dẫn đến yêu cầu tính toán cao Đây là sự hạn chế của ứng dụng PS ngang dọc thực tế
Một cách để tăng tốc cho phương pháp này là sử dụng một vài tiêu chuẩn chất lượng đơn giản Trong khi tối ưu hóa PS thì rất dễ dàng để làm giảm tối đa việc đánh giá tổng thể của các khối khác nhau được tính toán là :
Trang 32 là sự sai số các giá trị pixel đối với khối thứ i
Với việc sử dụng tiêu chuẩn E ở trên , PS được tối ưu hóa khá nhanh mặc dù chất lượng nén ảnh tệ hơn đáng kể so với phương pháp truyền thống Quadtree Sự trở ngại này làm hạn chế ứng dụng thực tiễn của phương pháp PS đơn giản hóa dọc ngang ( SHV PS – Simplied Horizontaly Verticaly Partition Scheme )
Hình 11 Ví dụ ảnh “Lena” với lược đồ phân chia SHV PS
I.1.2 Lược đồ phân chia ngang dọc được hiệu chỉnh (modified horizontal vertical parition scheme )
Một ý tưởng mà chúng ta đưa ra đây là thiết kế một biến thể thỏa hiệp , điều mà đòi hỏi gánh nặng tính toán cho sự tối ưu PS ( PS Optimization ) có thể
so sánh được với Quadtree nhưng cho ra một chất lượng nén ảnh gần với giới hạn có thể đạt được của phương pháp HV PS Điều này có nghĩa là số lượng các biến thể có thể của sự phân chia khối sẽ được làm giảm đáng kể so với HV
PS truyền thống trong khi vẫn giữ được tính dễ dàng đáp ứng của PS này
Để có được thỏa hiệp này , chúng ta đưa ra một phương pháp mới mà chúng ta gọi là PS ngang dọc được hiệu chỉnh – Modified Horizontal Vertical
PS ( MHV PS ) Sự giới hạn đặt ra theo cách phân chia khối này là tại mỗi bước , một khối được phân chia ngang hoặc dọc thành hai khối dạng hình chữ
Trang 33nhật có kích thước bằng nhau Chính vì thế , tại mỗi bước , nó cần để xem xét hai biến thể có thể có Nên nhớ rằng đối với Quadtree chỉ phân tích chỉ một biến thể trong khi đó phương pháp HV truyền thống thì có số lượng biến thể là(
M – 1)(N – 1) , trong đó M và N biểu thị kích thước khối được phân chia theo chiều ngang và dọc
Điều này có nghĩa là đối với phương pháp được đưa ra ở trên thì gánh nặng tính toán có thể tăng lên ít nhất gấp hai lần so với Quadtree , nhưng nó dù sao đi chăng nữa thì tiêu tốn thời gian cũng ít hơn mười lần so với phương pháp
HV truyền thống
Yêu cầu bộ nhớ cho việc ghi nhận PS đối với phương pháp được đưa ra là cũng nhỏ hơn nhiều so với HV PS Trái với phương pháp HV truyền thống , phương pháp MHV PS thì không cần nhớ chỉ mục hàng hoặc cột của khối được phân chia Điều này cho phép sử dụng tiết kiệm bộ nhớ cho việc phân chia bổ xung một vài khối Nhưng bù lại , phương pháp này lại mất đi sự linh hoạt và chất lượng nén ảnh thì kém đi
Một sự thuận lợi của MHV PS rất hữu ích là như sau Giả sử rằng kích thước các khối hình vuông ban đầu là lũy thừa của hai ( như 16x16 , 32x32 ,…) Sau đó , tại tất cả các giai đoạn của sự tối ưu PS , kích thước của các khối con đạt được là cũng là luỹ thừa của hai ( như 16x8, 32x16, … ) Điều này cho ta sự thuận lợi trong việc đạt được sự kết hợp của PS bởi phương pháp MHV trong công nghệ nén ảnh lai ghép , trong trường hợp đặc biệt , nó có thể sử dụng cả phương pháp chuyển đổi rời rạc DCT
Hình 12 Ví dụ MHV PS với ảnh “Lena”
Trang 34I 1.3 Thực hiện phân tích nén ảnh Fractal trên lược đồ phân chia dọc ngang truyền thống và được hiệu chỉnh
Việc so sánh hiệu quả của các phương pháp nén ảnh Fractal đối với bốn phương pháp tối ưu PS được thực hiện trên ảnh “Lena” ( 512x512 ) Ba tỉ lệ nén khác nhau – 400 , 80 và 16 tương ứng với tỉ lệ bpp là 0.02 , 0.1 và 0.5 đã được xem xét Kết quả đạt được thể hiện trong bảng 1 Chất lượng ảnh được giải nén được biểu thị bởi PSNR
Bảng 1 Hiệu quả nén ảnh Fractal với Quadtree , HV , SHV và MHV PS
Như chúng ta thấy , việc sử dụng MHV PS cho tất cả các trường hợp luôn cho PSNR ( 0.2 … 1.0 ) tốt hơn so với Quadtree Cũng tại đó , PSNR của MHV đối với HV truyền thống thì không lớn hơn 0.4dB
Sự khác nhau này được giải thích là bộ nhớ được yêu cầu cho việc lưu trữ dữ liệu của MHV thì ít hơn so với HV truyền thống Để chứng minh điều này , bảng 2 sẽ cho ta thấy lượng bit trung bình để mã hóa thông tin của các phương pháp Điều này cho phép sử dụng nhiều khối trong MHV hơn là HV , và vì thế làm tăng chất lượng giải nén ảnh PSNR
Bảng 2 Số bit trung bình được yêu cầu cho việc lưu trữ cho một khối
Để có một sự sáng tạo trong việc tính toán phức tạp của một phương thức được xem xét , chúng ta đánh giá yêu cầu thời gian khi đạt được một PS tối ưu Bởi vì PS tối ưu có thời gian thấp nhất chính là Quadtree , cho nên trong bảng 3 chúng ta sẽ đưa ra các tỉ lệ thời gian được so sánh với Quadtree Ta sẽ thấy rằng thời gian được yêu cầu cho MHV lớn gần gấp ba lần so với Quadtree , trong khi đó thì HV truyền thống thì lại cần số thời gian lớn gần gấp 255 lần
Trang 35Bảng 3 So sánh thời gian giữa các PS đối với Quadtree
I.2 Domain Block Pool
Như chúng ta đã nói ở trên , đối với mỗi khối range , một khối domain và ánh xạ cần thiết được tìm thấy sao cho khối range và khối domain trở thành một cặp tốt nhất Vậy thì chúng ta sẽ tìm kiếm chúng ở đâu ? Câu trả lời là chính ở giữa Domain Block Pool
Domain Block Pool bao gồm các hình vuông kích thước 2Bx2B trong hình ảnh gốc và là một tập các khối domain Nó có thể được sinh ra bằng cách trượt một của sổ có kích thước 2Bx2B bên trong ảnh gốc bởi bỏ qua pixel từ trái qua phải và từ trên xuống dưới
Hình 13 Một Domain Block Pool
2B
Domain Block 2B
Trang 36Nếu ảnh là M M thì sẽ có
B M B
M
khối Cho ví dụ , nếu kích thước của ảnh là 256 256 , kích thước một khối range là 4 4 , bước nhảy 4 thì có 63 63 khối domain ở trong một Domain Block Pool Ở đây , chúng ta xem hồ khối domain là {D j} So sánh khối range với tất cả khối domain trong Domain Block Pool từng cặp một , tìm ra cặp tốt nhất Và làm thế nào để tìm ra chúng ? Chúng ta hãy tìm hiểu về chuyển đổi affine , một công đoạn hết sức quan trọng trong quá trình nén và giải nén Fractal
I.3 Chuyển đổi affine
Ở phần trên , chúng ta đã biết rằng mã hóa khối fractal sử dụng các chuyển đổi affine ƒ ( p ) K p c ,trong đó vector p là một hình ảnh Mỗi phần tử trong vector p thì thể hiện một điểm ảnh Cho hình ảnh sắc xám (
gray scale ) , ta thường sử dụng 8bit/pixel và hình ảnh màu là 24bit/pixel
Các khối range không chồng lấp có kích thước nhỏ thì được ánh xạ từ những khối domain lớn hơn Các khối range thường có kích thước 8x8 pixel và các khối domain là 16x16 pixel Kích thước khác nhau giữa các domain và các range là để đảm bảo rằng việc ánh xạ là thu nhỏ Việc ánh xạ bao gồm các chuyển đổi hình học , bố trí và khối cùng với sự co lại của các khối domain với kích thước nhỏ nhất để có thể đáp ứng được các khối range Điểm cố định ( fixed point ) P * của việc mã hóa khối Fractal là một hình ảnh trong đó P * = ƒ(P *) Sự tái tạo lại hình ảnh được mã hóa thành các khối Fractal sẽ cho chúng ta điểm cố định
Trong việc mã hóa hàm , hầu hết các hàm ƒ(p) thông thường phải có 5 điều kiện sau đây :
1 Sự hạn chế phạm vi của ƒ
Phạm vi của ƒ nên nằm trong domain của ƒ , nghĩa là ƒ : A > A Điều này là cần thiết vì điểm cố định được định nghĩa là p*ƒ(p*) Nó cũng cần thiết cho sự tái tạo bằng vòng lặp và cũng tốt cho việc định nghĩa điểm cố định theo các cách khác - khởi tạo lại mà không cần vòng lặp Cho trường hợp đó thì điều kiện này theo sau đó phải được sửa đổi
2 Sự méo mó ( Distortion )
Trang 37Sự méo mó của việc mã hóa là do sự khác nhau giữa điểm cố định
p*và hình ảnh ban đầu p0 Vì thế việc cố gắng tìm ra điểm cố định sao cho càng gần với hình ảnh ban đầu càng tốt là điều rất cần thiết
3 Khả năng nén ( Compression )
Để có một hệ số nén tốt thì hàm nén phải có khả năng thể hiện được một cách hiệu quả Đây là điều quan trọng nhất bởi vì mục tiêu của mã hóa là đạt được một hệ số nén tốt nhất Ở đây sẽ có một vài sự phức tạp bởi vì hàm thông thường sẽ có nhiều cấp độ tự do hơn là hình ảnh
4 Tính thu gọn ( Contractivity )
Các hàm có tính thu nhỏ được là một vấn đề quan trọng trong việc tái tạo hình ảnh của điểm cố định từ hàm Vì điểm cố định được xác định là ƒ(p * ) p * , p* có thể được tái tạo bằng việc xử lý phương trình
này Nhưng điều này cần khả năng tính toán lớn và vì thế nó tiêu tốn rất nhiều thời gian Lý thuyết điểm cố định của Banach cho ta điều đó nếu hàm là thu nhỏ Chúng ta có thể sử dụng các phương thức sau để khởi tạo lại hình ảnh từ một hàm Để cho có cùng hướng với p0 nhưng được chọn tùy ý Bằng việc lặp lại theo phương trình này :
)) ) ƒ(p
5 Tính duy nhất ( Uniqueness ) của ƒ
Hàm ƒ(p) chỉ có một điểm cố định tương ứng p* Điều này có
nghĩa là phương trình p * ƒ(p * ) chỉ có một cách giải duy nhất Điều
này thì hiệu quả đối với mã hơn là đối với hình ảnh trong cùng một hàm
Ở đây tất cả các hàm đều cố gắng để thực hiện điều kiện này
I.3.1 Sử dụng Vector trong hàm mã hóa
Trang 38Trong các hình ảnh mã hóa bằng khối Fractal thì thông thường được thể hiện bởi vector Hàm ƒ ( p ) K p c được biết như là một chuyển đổi affine của mặt phẳng Ở đây , khi đó sẽ có kích thước là n2 Hệ số K là một
ma trận chuyển đổi có kích thước n2 x n2 và c là một vector chuyển đổi với kích thước n2 Bởi vì việc nén yêu cầu vector chuyển đổi thông thường được chọn là c c e , trong đó c là vô hướng và e là một vector với tất cả các phần tử đều bằng 1 ( vector cơ sở )
i
K
, với i = 1 , ………, n2 là giá trị riêng của K Bán kính quang phổ của
K được xác định bởi :
|
| max
(K)
Hàm ƒ ( p ) K p c là thu nhỏ nếu ρ(K) < 1 Lược đồ lặp cho ta
thấy điều đó nếu ƒ( p ) là thu nhỏ nghiệm cho phương trình p* ƒ(p*) này là
Nếu ƒ( p ) không là thu nhỏ thì điểm cố định có thể vẫn được tính toán bằng cách giải phương trình ƒ ( p ) K p c bằng :
c K I
p
n
1
) (
kích thước n2 x n2 đồng nhất
Phương trình p * ƒ(p * ) có một nghiệm giải duy nhất nếu và chỉ nếu
0)
det(I n2 K và cũng có yêu cầu tương tự 1
i
K
với i = 1,… ,n2
I.3.2 Sử dụng ma trận trong hàm mã hóa
Bởi vì hình ảnh thường được xem như là các ma trận Chúng ta đã từng được học trường hợp mà khi đó ma trận được sử dụng như là các biến trong hàm
Ở đây , ta sẽ thảo luận sơ về hàm ƒ(P) = AP + C