b. Biến đổi Wavelet rời rạc 2-D
2.2. GIỚI THIỆU JPEG VÀ JPEG2000
2.2.1 JPEG
2.2.1.1 Giới thiệu sơ lược
JPEG (Joint Photographic Experts Group) là tên một tổ chức nghiên cứu về các chuẩn nén ảnh (trước đây là ISO) được thành lập vào năm 1982. Năm 1986, JPEG chính thức được thiết lập nhờ sự kết hợp giữa nhóm ISO/IEC và ITU. Đến năm 1994,
JPEG được khẳng định với tiêu chuẩn ISO 10918-1. JPEG là định dạng nén ảnh có tổn thất. Tiêu chuẩn này có có thể được ứng dụng trong nhiều lĩnh vực: lưu trữ ảnh, Fax màu, truyền ảnh báo chí, ảnh cho y học, camera số... Nó còn có các định dạng mở rộng khác như .jpg, .jpeg, .jpe, .jfif và .jif. Kỹ thuật này có thể đạt được hệ số nén hơn tám mươi lần so với ảnh gốc. Tuy nhiên, hệ số nén càng cao thì hình ảnh sau khi giải nén sẽ càng bị sai lệch nhiều hơn, nó chỉ gần giống như ban đầu chứ không đạt hoàn toàn như hình ảnh gốc.
Tiêu chuẩn JPEG được định ra cho nén ảnh tĩnh đơn sắc và màu. Tuy nhiên nó cũng được sử dụng cho nhiều ứng dụng với ảnh động bởi vì nó cho chất lượng khôi phục khá tốt và ít tính toán hơn so với nén MPEG. Nén JPEG có thể thực hiện bởi bốn mode mã hóa: mã hóa tuần tự, mã hóa lũy tiến, mã hóa không tổn thất và mã hóa phân cấp. Mã hóa không tổn thất không sử dụng cho video động bởi vì tỉ lệ nén của nó không đủ cao. Khai triển DCT được chọn là kĩ thuật then chốt trong JPEG vì nó cho ảnh nén chất lượng tốt nhất tại số bit thấp nhất và giải thuật chuyển đổi nhanh, dễ dàng thực hiện bằng phần cứng.
Định dạng nén JPEG được sử dụng trong tất cả máy ảnh kỹ thuật số có kích thước rất nhỏ nên thường chụp được nhiều ảnh trên một thẻ nhớ, JPEG dễ hiển thị trên màn hình, ảnh có thể chuyển nhanh qua thư điện tử (dung lượng từ 300KB đến 700KB), ảnh JPEG chất lượng cao có dung lượng khoảng vài MB hay lớn hơn.
2.2.1.2 Sơ đồ khối
Hình 2.10 Sơ đồ khối bộ mã hóa và giải mã JPEG dựa trên biến đổi DCT
Bước đầu tiên trong xử lí nén JPEG là chia nhỏ ảnh vào thành các khối pixel không chồng lấn có kích thước 8x8. Chúng tạo thành chuỗi nhỏ được xử lí từ trái qua phải, từ trên xuống dưới. Khi mỗi khối 8x8 hoặc ảnh con được xử lí thì 64 pixel của nó bị dịch chuyển -2m-1 mức. trong đó 2m là số mức xám trong ảnh và biến đổi cosin rời rạc 2 chiều của nó được tính toán. Các hệ số kết quả sau đó được chuẩn hóa và lượng tử hóa. Sau khi các hệ số DCT của mỗi khối được lượng tử hóa, các phần tử lượng tử
Đồ án tốt nghiệp đại học Chương 2: Các kĩ thuật nén ảnh
được sắp xếp lại rồi mã hóa kí hiệu. Chuẩn JPEG cung cấp các bảng mã hóa Huffman AC và DC.
Bộ giải mã thì ngược lại, ảnh nén lần lượt được giải mã hóa, giải lượng tử, biến đổi DCT ngược và ghép các khối 8x8 lại thành ảnh khôi phục.
2.2.2 JPEG2000
2.2.2.1 Giới thiệu sơ lược
JPEG2000 không phải là một chuẩn mới hoàn toàn mà được phát triển chuẩn JPEG đã có. JPEG2000 dùng cho nén ảnh tĩnh, là định dạng nén ảnh có tổn thất, được ứng dụng vào các hệ xử lí và phân phối. Với JPEG2000, kỹ thuật xử lý hình ảnh sẽ đạt được những kết quả rất ngoạn mục vì có thể nén nhỏ từ 100-200 lần mà hình ảnh không sai sót bao nhiêu so với hình ảnh gốc.
JPEG2000 là hệ thống mã hóa hình ảnh mà kỹ thuật nén dựa trên kỹ thuật sóng ngắn. Là một tiện ích toán học cho phép mô tả bằng một công thức đơn giản những gì xảy ra tại một thời điểm chính xác của tín hiệu. Với một chuỗi sóng ngắn, chỉ cần biểu diễn bằng vài công thức, đường biểu diễn không đều mà không cần phải mô tả đặc tính của từng điểm một. Và lẽ dĩ nhiên sẽ rất đắc lực khi phân tích tỉ mỉ một file ảnh kỹ thuật số.
2.2.2.2 Sơ đồ khối bộ mã hóa và bộ giải mã JPEG 2000
Hình 2.11 biểu diễn hệ thống mã hóa JPEG 2000 đơn giản.
Bước đầu tiên của quá trình mã hóa, như trong chuẩn JPEG, là để dịch chuyển 2m-1 mức các pixel của ảnh, trong đó 2m là số mức xám trong ảnh. Sau đó, biến đổi wavelet rời rạc 1 chiều các hàng và cột của ảnh có thể được tính toán. Ngoài việc ảnh vào được chia thành các dải băng con và được xử lí lần lượt thì quá trình mã hóa và giải mã JPEG2000 tương đối giống với JPEG. Chỉ có sự khác biệt là phép biến đổi sử dụng ở đây là biến đổi wavelet chứ không phải là DCT.
2.2.3 So sánh JPEG và JPEG2000
– JPEG2000 đưa ra cả hai kỹ thuật nén có tổn thất và không tổn thất theo cùng một cơ chế mã hoá:
JPEG2000 thực hiện tất cả các dạng thức của JPEG chỉ bằng một cơ chế mã hoá duy nhất. Có thể thấy rằng JPEG2000 có tính mềm dẻo hơn JPEG. Hơn thế, chúng ta đã thấy rằng tất cả các phương pháp thiết kế cho chuẩn JPEG2000 đều ưu việt và có nhiều tính năng hơn so với JPEG; ngoài ra những thống kê và thực tế cho thấy với cùng một tỷ lệ nén và một loại ảnh thì ảnh được nén bởi JPEG2000 hầu như luôn có chất lượng tốt hơn so với JPEG. Chúng ta xem xét hai ảnh trên hình 2.12 để thấy rõ điều này.
Hình 2.12 So sánh JPEG, JPEG2000
– Trong dạng thức nén có tổn thất thông tin, JPEG2000 có thể đưa ra tỷ lệ nén cao hơn nhiều so với JPEG. Các phần mềm nén ảnh JPEG hiện tại (kể cả photoshop) cũng chỉ thiết kế để có thể nén ảnh được với tỷ lệ 40:1 nhưng với JPEG2000 thì tỷ lệ nén có thể lên tới 200:1. Theo công thức tính PSNR trong đơn vị dB, ta có b là số bít dùng biểu diễn một pixel trên ảnh gốc.
PSNR(dB) = – 20 log[RMSE/2b – 1] (2.7)
Với hai ảnh ở hình 2.12, so sánh về tham số PSNR cho trên bảng 2.1. Để có thể so sánh dễ dàng hơn, ta xét ảnh được nén với các tỷ lệ khác nhau (đo lường bởi hệ số bit/pixel hay bpp). Tất cả các số liệu trên bảng đều cho thấy JPEG2000 nén ảnh tốt
Đồ án tốt nghiệp đại học Chương 2: Các kĩ thuật nén ảnh
hơn là JPEG; hơn thế hệ số PSNR mà chúng ta xét trong bảng được đo trong hệ đơn vị logarit.
Bảng 2.1 Số bit mỗi pixel
Bit per pixel 0,125 0,50 2,00 Ảnh 1 theo Jpeg 24,12 31,17 35,15 Ảnh 1 theo Jpeg2000 28,12 32,95 37,35 Ảnh 2 theo Jpeg 22,6 28,92 35,99 Ảnh 2 theo Jpeg2000 24,85 31,13 38,80
Hình 2.13 Tỉ lệ nén của JPEG2000 và JPEG
– Chuẩn nén ảnh JPEG2000 có thể hiển thị được các ảnh với độ phân giải và kích thước khác nhau từ cùng một ảnh nén. Với JPEG thì điều này là không thể thực hiện được. Sở dĩ có điều này là do JPEG2000 sử dụng kỹ thuật phân giải ảnh và mã hoá đính kèm.
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). Chất lượng của toàn bộ ảnh có thể được thấy rõ trong hình.
Hình 2.14 Minh hoạ tính năng ROI
Như chúng ta thấy trên hình 2.14, chất lượng của vùng ảnh được lựa chọn tăng cao hơn khi vùng đó được áp dụng phương pháp ROI.
– JPEG2000 còn có một khả năng đặc biệt ưu việt hơn so với JPEG, đó chính là khả năng vượt trội trong khôi phục lỗi. Đó 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ó.
2.3 Kết luận chương 2
Chương này đã giới thiệu cho ta một số vấn đề liên quan đến kĩ thuật nén ảnh và giới thiệu và so sánh hai chuẩn nén ảnh phổ biến hiện nay JPEG và JPEG 2000. Tận dụng các ưu điểm của hai kĩ thuật nén ảnh này, người ta đã sử dụng chúng rất nhiều trong các ứng dụng không dây. Ngoài hai chuẩn này ra, nếu quan tâm ta có thể tìm hiểu về một số kĩ thuật nén ảnh khác mới xuất hiện gần đây như định dạng Windows Media Photo (HD Photo), chương trình My Photo Zip dùng cho nén ảnh đồ họa.
Đồ án tốt nghiệp đại học Chương 3: Chương trình mô phỏng
CHƯƠNG 3
CHƯƠNG TRÌNH MÔ PHỎNG
Trong hai chương trên, ta đã đề cập đến các kĩ thuật nâng cao chất lượng ảnh và nén ảnh và đã nhận thấy được tầm quan trọng của vấn đề này. Ngày nay, khi mà khoa học kĩ thuật và công nghệ ngày càng phát triển thì người ta càng nghĩ đến chuyện làm thế nào để đưa các vấn đề trên ứng dụng vào thực tiễn. Vì vậy, cần thiết phải xây dựng được chương trình mô phỏng cho các vấn đề này. Đồ án này xây dựng chương trình mô phỏng bằng ngôn ngữ Matlab.
3.1 Ngôn ngữ Matlab
Hiện nay, có rất nhiều ngôn ngữ lập trình đang được quan tâm và ứng dụng. Các ngôn ngữ lập trình như Basic, Pascal, C, Java... được sử dụng rộng rãi trong nhiều lĩnh vực. Trong số đó, Matlab là một ngôn ngữ rất mạnh được sử dụng rộng rãi trong nhiều lĩnh vực. Nó dễ dàng sử dụng hơn các ngôn ngữ khác. Matlab cho phép tính toán số với ma trận, vẽ đồ thị hàm số hay biểu đồ thông tin, thực hiện thuật toán, tạo các giao tiếp người dùng và liên kết với những chương trình máy tính viết trên nhiều ngôn ngữ lập trình khác. Phần mềm MATLAB còn được trang bị thêm thư viện cho các lĩnh vực ứng dụng rất đa dạng như xử lí tín hiệu, nhận dạng hệ thống, xử lí ảnh, mạng nơ ron, logic mờ, tài chính, tối ưu hóa, phương trình đạo hàm riêng, sinh tin học, ... Đây là các tập hợp mã nguồn viết bằng chính MATLAB dựa theo các thuật toán mới, hữu hiệu mà người dùng có thể chỉnh sửa hoặc bổ sung thêm các hàm mới. Với thư viện Toolbox, Matlab cho phép mô phỏng tính toán, thực nghiệm nhiều mô hình trong thực tế và kỹ thuật. Chính vì các ưu điểm đó mà trong đồ án này, em quyết định chọn ngôn ngữ lập trình Matlab để mô phỏng các kĩ thuật nâng cao chất lượng và nén ảnh.
3.1.1 Sơ lược lịch sử Matlab
Matlab là từ viết tắt của "MATrix LABoratory", được phát minh vào cuối thập niên 1970 bới Cleve Moler.
Ban đầu, MATLAB được viết bởi ngôn ngữ Fortran. Cho đến 1980, nó vẫn chỉ là một bộ phận được dùng nội bộ của Đại Học Standford.
Năm 1983, Jack Little đã viết lại MATLAB bằng ngôn ngữ C và nó được xây dựng thêm các thư viện phục vụ cho thiết kế hệ thống điều khiển, hệ thống Hộp Công Cụ (Tool box), mô phỏng ... Jack xây dựng MATLAB trở thành mô hình ngôn ngữ lập trình cơ sở ma trận (matrix-based programming language). Steve Bangert là người đã thực hiện trình thông dịch cho MATLAB. Công trình này tốn gần một năm rưỡi. Sau này, Jack Little kết hợp với Moler và Steve Bangert quyết định đưa Matlab thành dự án thương mại - công ty The MathWorks ra đời thời gian này - năm 1984.
Phiên bản đầu tiên MATLAB 1.0 ra đời năm 1984 viết bằng C cho MS-DOS PC được phát hành đầu tiên tại IEEE Conference on Design and Control (hội nghị IEEE về thiết kế và Điều khiển) tại Las Vegas, bang Nevada Hoa Kì.
Năm 1986, MATLAB 2 ra đời trong đó hỗ trợ UNIX. Năm 1987, MATLAB 3 phát hành.
Năm 1990 Simulink 1.0 được phát hành chung với MATLAB
Năm 1992 MATLAB 4 thêm vào hỗ trợ 2-D và 3-D đồ họa màu và các ma trận truy tìm. Năm này cũng cho phát hành phiên bản MATLAB Student Edition (MATLAB ấn bản cho học sinh)
Năm 1993 MATLAB cho MS Windows ra đời. Đồng thời công ty này có WEB site là mathwork.com.
Năm 1995 MATLAB cho LINUX ra đời. Trình dịch MATLAB có khả năng chuyển dịch từ ngôn ngữ MATLAB sang ngôn ngữ C cũng được phát hành trong dịp này.
Năm 1996 MATLAB 5 bao gồm thêm các kiểu dữ liệu, phát triển hình ảnh hoá, bộ truy sửa lỗi (debugger), và giao diện đồ họa GUI.
Năm 2002 MATLAB 6.5 phát hành, sử dụng phương pháp dịch JIT (Just in Time) và tái hỗ trợ MAC.
Năm 2004 MATLAB 7 phát hành, có khả năng chính xác đơn và kiểu nguyên, hỗ trợ hàm lồng nhau, công cụ vẽ điểm, và phát triển thuật toán tương tác.
Hiện nay, đã là phiên bản 14 với SP3 cải thiện Simulink cùng với hơn 75 sản phẩm khác.
Đồ án tốt nghiệp đại học Chương 3: Chương trình mô phỏng
Matlab được dùng rộng rãi trong giáo dục, phổ biến nhất trong lĩnh vực đại số tuyến tính và giải tích.
3.1.2 Đặc điểm của Matlab và các ứng dụng
MATLAB – phần mềm nổi tiếng của công ty MathWorks, là một ngôn ngữ hiệu năng cao cho tính toán kỹ thuật như được viết trong logo của phần mềm này. Nó tích hợp tính toán, hiển thị và lập trình trong một môi trường dễ sử dụng. Các ứng dụng tiêu biểu của MATLAB bao gồm:
v Hỗ trợ toán học và tính toán.
v Phát triển thuật toán.
v Mô hình, mô phỏng.
v Phân tích, khảo sát và hiển thị số liệu.
v Đồ họa khoa học và kỹ thuật
v Phát triển ứng dụng với các giao diện đồ họa.
Tên của phần mềm MATLAB bắt nguồn từ thuật ngữ “Matrix Laboratory”. Đầu tiên nó được viết bằng FORTRAN để cung cấp truy nhập dễ dàng tới phần mềm ma trận được phát triển bởi các dự án LINPACK và EISPACK. Sau đó nó được viết bằng ngôn ngữ C trên cơ sở các thư viện nêu trên và phát triển thêm nhiều lĩnh vực của tính toán khoa học và các ứng dụng kỹ thuật.
Matlab là một môi trường tính toán số và lập trình. Matlab cho phép tính toán số với ma trận, vẽ đồ thị hàm số hay biểu đồ thông tin, thực hiện thuật toán, tạo các giao tiếp người dùng và liên kết với những chương trình máy tính viết trên nhiều ngôn ngữ lập trình khác. Vì vậy, Matlab là một ngôn ngữ rất mạnh được sử dụng rộng rãi trong nhiều lĩnh vực. Nó dễ dàng sử dụng hơn các ngôn ngữ khác như Basic, Pascal, C...
Phần mềm MATLAB còn được trang bị thêm các ToolBox – các gói chương trình (thư viện) cho các lĩnh vực ứng dụng rất đa dạng như xử lí tín hiệu, nhận dạng hệ thống, xử lí ảnh, mạng nơ ron, logic mờ, tài chính, tối ưu hóa, phương trình đạo hàm riêng, sinh tin học, ... Đây là các tập hợp mã nguồn viết bằng chính MATLAB dựa theo các thuật toán mới, hữu hiệu mà người dùng có thể chỉnh sửa hoặc bổ sung thêm các hàm mới. Với thư viện Toolbox, Matlab cho phép mô phỏng tính toán, thực nghiệm nhiều mô hình trong thực tế và kỹ thuật.
MATLAB được thiết kế để giải các bài toán bằng số chứ không nhằm mục đích chính là tính toán ký hiệu như MATHEMATICA và MAPLE. Tuy nhiên, trong MATLAB cũng có thể tính toán ký hiệu được nhờ các hàm trong Symbolic Math ToolBox.
3.2 Chương trình mô phỏng sử dụng Matlab 3.2.1 Giao diện chương trình mô phỏng 3.2.1 Giao diện chương trình mô phỏng
Matlab cung cấp thư viện guide để người sử dụng có thể tự tạo giao diện cho riêng mình. Trong guide, thanh công cụ hỗ trợ rất nhiều cho người sử dụng.
Các công cụ trong thanh công cụ của GUIs:
- Static Text: Ta có thể nhập các đoạn text vào đây. Các đoạn text này dùng để chú thích và không thể thay đổi.
- Edit Text: Ta có thể nhập các đoạn text vào đây. Tuy nhiên, khi chạy