CHƯƠNG 1: GIỚI THIỆU MATLAB 1.1 Tổng quan về Matlab 1.1.a Khái niệm về Matlab Matlab là một ngôn ngữ lập trình thực hành bậc cao được sử dụng để giải các bài toán về kỹ thuật. Matlab tích hợp được việc tính toán, thể hiện kết quả, cho phép lập trình, giao diện làm việc rất dễ dàng cho người sử dụng. Dữ liệu cùng với thư viện được lập trình sẵn cho phép người sử dụng có thể có được những ứng dụng sau đây. • Sử dụng các hàm có sẵn trong thư viện, các phép tính toán học thông thường. • Cho phép lập trình tạo ra những ứng dụng mới. • Cho phép mô phỏng các mô hình thực tế. • Phân tích, khảo sát và hiển thị dữ liệu. • Với phần mềm đồ hoạ cực mạnh. • Cho phép phát triển, giao tiếp với một số phần mềm khác như C++, Fortran. 1.1.b Tổng quan về cấu trúc hoạt động của Matlab và các ứng dụng liên quan. Matlab là một hệ thống tương giao, các phần tử dữ liệu là một mảng (mảng này không đòi hỏi về kích thước). Chúng cho phép giải quyết các vấn đề liên quan đến lập trình bằng máy tính, đặc biệt sử dụng các phép tính về ma trận hay vector và có thể sử dụng ngôn ngữ C hoặc Fortran lập trình rồi thực hiện ứng dụng lập trình đó bằng các câu lệnh gọi từ Matlab. Matlab được viết tắt từ chữ “MATrix LABoratory” tức là thư viện về ma trận, từ đó phần mềm Matlab được viết nhằm cung cấp cho việc truy cập vào phần mềm ma trận một cách dễ dàng, phần mềm ma trận này được phát triển bởi các công trình Linpack và Eispack. Ngày nay Matlab được phát triển bởi Lapack và Artpack tạo nên một nghệ thuật phần mềm cho ma trận. + Dữ liệu Dữ liệu của Matlab thể hiện dưới dạng ma trận (hoặc mảng–tổng quát), và có các kiểu dữ liệu được liệt kê sau đây: ĐỒ ÁN 3 Trang 2/27 • Kiểu đơn single, kiểu này có lợi về bộ nhớ dữ liệu vì nó đòi hỏi ít byte nhớ hơn, kiểu dữ liệu này không được sử dụng trong các phép tính toán học, độ chính xác kém hơn. • Kiểu double kiểu này là kiểu thông dụng nhất của các biến trong Matlab. • Kiểu Sparse. • Kiểu uint8, uint16. . . • Kiểu char ví dụ ‘Hello’ • Kiểu cell. • Kiểu Structure. Trong Matlab kiểu dữ liệu double là kiểu mặc định sử dụng trong các phép tính số học. + Ứng dụng Matlab tạo điều kiện thuận lợi cho: • Các khoá học về toán học. • Các kỹ sư, các nhà nghiên cứu khoa học. • Dùng Matlab để tính toán, nghiên cứu tạo ra các sản phẩm tốt nhất trong sản xuất. + Toolbox là một công cụ quan trọng trong Matlab Công cụ này được Matlab cung cấp cho phép bạn ứng dụng các kỹ thuật để phân tích, thiết kế, mô phỏng các mô hình. Ta có thể tìm thấy toolbox ở trong mô trường làm việc của. • Mạng nơron. • Logic mờ. • Simulink. 1.1.c Hệ thống Matlab Hệ thống giao diện của Matlab được chia thành 5 phần: • Môi trường phát triển. Đây là nơi đặt các thanh công cụ, các phương tiện giúp chúng ta sử dụng các lệnh và các file, ta có thể liệt kê một số như sau. + Desktop. ĐỒ ÁN 3 Trang 3/27 + Command Window. + Command History. + Browsers for viewinghelp. • Thư viện, các hàm toán học bao gồm các cấu trúc như tính tổng, sin cosin, atan, atan2 etc..., các phép tính đơn giản đến các phép tính phức tạp như tính ma trận nghịch đảo, trị riêng, chuyển đổi fourier, laplace, symbolic library. • Ngôn ngữ Matlab. Đó là các ngôn ngữ cao về ma trận và mảng, với các dòng lệnh, các hàm, cấu trúc dữ liệu vào, có thể lập trình hướng đối tượng. • Đồ họa trong Matlab. Bao gồm các câu lệnh thể hiện đồ hạo trong môi trường 2D và 3D, tạo các hình ảnh chuyển động, cung cấp các giao diện tương tác giữa người sử dụng và máy tính. • Giao tiếp với các ngôn ngữ khác. Matlab cho phép tương tác với các ngôn ngữ khác như C, Fortran … 1.1.d Làm quen với matlab Hình 1.1.d Cửa sổ desktop (cửa sổ lớn nhất), và các cửa sổ phụ của nó. Trước tiên để khởi động Matlab bạn click vào biểu tượng Matlab.exe, trên màn hình xuất hiện cửa sổ sau. (Xem hình vẽ 1.1) Cửa sổ đó chứa các thanh công cụ (Giao diện người và máy) cần thiết cho việc quản lý các files, các biến, cửa sổ lệnh, có thể coi desktop là các panel gồm các ô, vùng, quản lý và tác dụng của từng cửa sổ nhỏ được quản lý bởi desktop. ĐỒ ÁN 3 Trang 4/27 1.1.e Các cửa sổ Làm việc của Matlab + Cửa sổ Command window Là cửa sổ giao tiếp chính của Matlab bởi đây là nơi nhập giá trị các biến, hiển thị giá trị, tính toán giá trị của biểu thức, thực thi các hàm có sẵn trong thư viện (dạng lệnh), hoặc các hàm (dạng function) do người dùng lập trình ra trong M_files. Các lệnh được nhập sau dấu nhắc ‘ >> ‘, và nếu có sai sót trong quá trình gõ (nhập) lệnh thì hãy nhấn phím Enter cho đến khi nhận được dấu nhắc >>. Thực thi lệnh bằng nhấn phím Enter. Gõ các lệnh sau: >> A= pi/2 ; >> B= sin(A) B=1 Hình 1.1.e1 Hình cửa sổ Comman window Hoặc chương trình soạn thảo trong M-file dưới đây: % Chuong trinh trong M-file x= 0:pi/6:2*pi; y=sin(x); plot(x, y); % chuong trinh được lưu với tên file là “ve_sin.m” + Cửa sổ command History Các dòng mà bạn nhập vào trong cửa sổ Command window (các dòng này có thể là dòng nhập biến, hoặc có thể là dòng lệnh thực hiện hàm nào đó) được giữ lại trong ĐỒ ÁN 3 Trang 5/27 cửa sổ Command History, và cửa sổ này cho phép ta sử dụng lại những lệnh đó bằng cách click chuột lên các lệnh đó hoặc các biến, nếu như bạn muốn sử dụng lại biến đó. click đôi chuột lên lênh hoặc biến để sử dụng lại Hình 1.1.e2 Hình cửa sổ Command History + Cửa sổ Workspace Là cửa sổ thể hiện tên các biến bạn sử dụng cùng với kích thước vùng nhớ (số bytes), kiểu dữ liệu (lớp), các biến được giải phóng sau mỗi lần tắt chương trình. Click đôi chuột lên biến để xem dữ liệu(hoặc thay đổi giá trị) Hình 1.1.e3 Hình cửa sổ Workspace + Cửa sổ M-file Là một cửa sổ dùng để soạn thảo chương trình ứng dụng, để thực thi chương trình viết trong M-file bằng cách gõ tên của file chứa chương trình đó trong cửa sổ Commandwindow. ĐỒ ÁN 3 Trang 6/27 Khi một chương trình viết trong M-file, thì tuỳ theo ứng dụng cụ thể, tuỳ theo người lập trình mà chương trình có thể viết dưới dạng sau: • Dạng Script file: Tức là chương trình gồm tập hợp các câu lệnh viết dưới dạng liệt kê, không có biến dữ liệu vào và biến lấy giá trị ra. • Dạng hàm function: có biến dữ liệu vào và biến ra. 1.2 Các hàm chuyển đổi kiểu ảnh Với các thao tác nhất định, sẽ thật hữu ích khi có thể chuyển đổi ảnh từ dạng này sang dạng khác. Chẳng hạn, nếu ta muốn lọc một ảnh màu được lưu trữ dưới dạng ảnh số, đầu tiên ta nên chuyển đổi nó thành dạng ảnh RGB. Khi ta áp dụng phép lọc tới ảnh RGB, Matlab sẽ lọc giá trị cường độ tương ứng trong ảnh. Nếu ta lọc ảnh số Matlab đơn giản chỉ áp đặt phép lọc tới ma trận ảnh số và kết quả sẽ không có ý nghĩa. Chú ý: Khi chuyển đổi một ảnh từ dạng này sang dạng khác, ảnh kết quả có thể khác ảnh ban đầu. Chẳng hạn, nếu ta chuyển đổi một ảnh màu chỉ số sang một ảnh cường độ, kết quả ta sẽ thu được một ảnh đen trắng. Danh sách sau đây sẽ liệt kê các hàm được sử dụng trong việc chuyển đổi ảnh: + dither: Tạo một ảnh nhị phân từ một ảnh cường độ đen trắng bằng cách trộn, tạo một ảnh chỉ số từ một ảnh RGB bằng cách trộng (dither). + gray2id: Tạo một ảnh chỉ số từ một ảnh cường độ đen trắng . + grayslice: Tạo một ảnh chỉ số từ một ảnh cường độ đen trắng bằng cách đặt ngưỡng. + im2bw: Tạo một ảnh nhị phân từ một ảnh cường độ, ảnh chỉ số hay ảnh RGB trên cơ sở của ngưỡng ánh sáng. ĐỒ ÁN 3 Trang 7/27 + ind2gray: Tạo một ảnh cường độ đen trắng từ một ảnh chỉ số. + ind2rgb: Tạo một ảnh RGB từ một ảnh chỉ số. + mat2gray: Tạo một ảnh cường độ đen trắng từ dữ liệu trong một ma trận bằng cách lấy tỉ lệ giữ liệu. + rgb2gray: Tạo một ảnh cường độ đen trắng từ một ảnh RGB. + rgb2ind: Tạo một ảnh chỉ số từ một ảnh RGB. Ta cũng có thể thực hiện các phép chuyển đổi kiểu chỉ sử dụng cú pháp của Matlab. Chẳng hạn , ta có thể convert một ảnh cường độ sang ảnh RGB bằng cách ghép nối 3 phần copy của ma trận ảnh gốc giữa 3 chiều: RGB=cat(3,I,I,I ); Ảnh RGB thu được có các ma trận đồng nhất cho các mặt phẳng R,G,B vì vậy ảnh hiển thị giống như bóng xám. 1.3 Giao diện đồ hoạ GUI 1.3.a Khái niệm Để tiện cho việc sử dụng các ứng dụng hay chương trình mà ta đã viết chúng ta có thể tạo ra giao diện đồ họa GUI (Graphic User Interface) giữa ngưới dùng và matlab. Trong giao diện này ta có thể xuất dữ liệu dưới hai dạng văn bản và đồ họa. Mỗi một GUI có thể có một hay nhiều giao diện. Việc tạo GUI tạo nên một công cụ nhập xuất dữ liệu một cách trực quan, nhanh chóng và rất thuận tiện. Ngoài ra có thể dùng GUI để giám sát các quá trình, hiển thị các đối tượng… 1.3.b Cách tạo GUI Có 2 cách để tạo GUI: +Tạo GUI bằng cách gõ lệnh trực tiếp. +Tạo GUI bằng cách dùng công cụ có sẵn trên Matlab. 1.3.c Tạo GUI bằng cách gõ lệnh trực tiếp Ta gõ lệnh như sau: ĐỒ ÁN 3 Trang 8/27 Hình 1.3.c1: Hình ảnh lệnh tạo GUI Ta sẽ thu được khung GUI sau: Hình 1.3.c2: Hình ảnh thu được sau khi dùng lệnh tạo GUI 1.3.d Tạo GUI bằng cách sử dụng công cụ có sẵn trên Matlab. Ta gõ guide trong cửa sổ chính của Matlab, sau đó trên cửa sổ chính sẽ xuất hiện tab ĐỒ ÁN 3 Trang 9/27 Hình 1.3.d: Cửa sổ thiết kế GUI Sau đó ta tiến hành thiết kế GUI theo ý muốn. ĐỒ ÁN 3 Trang 10/27 CHƯƠNG 2: NÉN ẢNH SỐ,KHÔI PHỤC ẢNH SỐ VÀ NHẬN DẠNG CẠNH GÓC ẢNH SỐ 2.1. NÉN ẢNH SỐ 2.1.1 Các khái niệm về ảnh + Điểm ảnh (Picture Element) Gốc của ảnh (ảnh tự nhiên) là ảnh liên tục về không gian và độ sáng. Để xử lý bằng máy tính (số), ảnh cần phải được số hoá. Số hoá ảnh là sự biến đổi gần đúng một ảnh liên tục thành một tập điểm phù hợp với ảnh thật về vị trí (không gian) và độ sáng (mức xám). Khoảng cách giữa các điểm ảnh đó được thiết lập sao cho mắt người không phân biệt được ranh giới giữa chúng. Mỗi một điểm như vậy gọi là điểm ảnh (PEL: Picture Element) hay gọi tắt là Pixel. Trong khuôn khổ ảnh hai chiều, mỗi pixel ứng với cặp tọa độ (x, y). 1 pixel Hình 2.1 Hình minh họa của pixel Định nghĩa: Điểm ảnh (Pixel) là một phần tử của ảnh số tại toạ độ (x, y) với độ xám hoặc màu nhất định. Kích thước và khoảng cách giữa các điểm ảnh đó được chọn thích hợp sao cho mắt người cảm nhận sự liên tục về không gian và mức xám (hoặc màu) của ảnh số gần như ảnh thật. Mỗi phần tử trong ma trận được gọi là một phần tử ảnh. + Mức xám của ảnh Một điểm ảnh (pixel) có hai đặc trưng cơ bản là vị trí (x, y) của điểm ảnh và độ xám của nó. Dưới đây chúng ta xem xét một số khái niệm và thuật ngữ thường dùng trong xử lý ảnh. ĐỒ ÁN 3 Trang 11/27 a) Định nghĩa: Mức xám của điểm ảnh là cường độ sáng của nó được gán bằng giá trị số tại điểm đó. Hình 2.2 Hình biểu diễn mức xám của ảnh số b) Các thang giá trị mức xám thông thường: 16, 32, 64, 128, 256 (Mức 256 là mức phổ dụng. Lý do: từ kỹ thuật máy tính dùng 1 byte (8 bit) để biểu diễn mức xám: Mức xám dùng 1 byte biểu diễn: 28=256 mức, tức là từ 0 đến 255). c) Ảnh đen trắng: Ảnh đen trắng chỉ bao gồm 2 màu: màu đen và màu trắng (không chứa màu khác) với mức xám ở các điểm ảnh có thể khác nhau. Người ta phân mức đen trắng đó thành L mức Nếu sử dụng số bit B=8 bit để mã hóa mức đen trắng (hay mức xám) thì L được xác định : L=2B (trong ví dụ của ta L=28= 256 mức) Nếu L bằng 2, B=1, nghĩa là chỉ có 2 mức: mức 0 và mức 1, còn gọi là ảnh nhị phân. Mức 1 ứng với màu sáng, còn mức 0 ứng với màu tối. Nếu L lớn hơn 2 ta có ảnh đa cấp xám. Nói cách khác, với ảnh nhị phân mỗi điểm ảnh được mã hóa trên 1 bit, còn với ảnh 256 mức, mỗi điểm ảnh được mã hóa trên 8 bit. Như vậy, với ảnh đen trắng: nếu dùng 8 bit (1 byte) để biểu diễn mức xám, số các mức xám có thể biểu diễn được là 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. Ảnh nhị phân khá đơn giản, các phần tử ảnh có thể coi như các phần tử logic. Ứng dụng chính của nó được dùng theo tính logic để phân biệt đối tượng ảnh với nền hay để phân biệt điểm biên với điểm khác. ĐỒ ÁN 3 Trang 12/27 d) Ảnh màu: trong khuôn khổ lý thuyết ba màu (Red, Blue, Green) để tạo nên thế giới màu) trong đó R, G, B là một giá trị xám và được biểu biểu diễn bằng 1 byte, khi đó các giá trị màu: 28*3=224≈ 16,7 triệu màu. Mỗi màu cũng phân thành L cấp màu khác nhau (thường L=256). 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. Do đó, để lưu trữ ảnh màu người ta có thể lưu trữ từng màu riêng biệt, mỗi màu lưu trữ như một ảnh đa cấp xám. Do đó, không gian nhớ dành cho một ảnh màu lớn gấp 3 lần một ảnh đa cấp xám cùng kích cỡ. P(x, y) = (R, G, B) - Hệ màu CMY: là phần bù của hệ màu RGB (C, M, Y)=(1, 1, 1)-(R, G, B) Hay C+R=M+G=Y+B=1 => Hệ màu này thường được dùng trong máy in. - Hệ màu CMYK: trong đó K là độ đậm nhạt của màu K= min (C, M, Y) P(x, y) = (C-K, M-K, V-K, K). + Ví dụ: Với (C1, M1, Y1) ta sẽ có K=min (C1, M1, Y1) vậy CMYK = (C1-K, M1-K, Y1-K, K) Hình 2.3 Hệ tọa độ RGB + Định nghĩa ảnh số Ảnh số là tập hợp các điểm ảnh với mức xám phù hợp dùng để mô tả ảnh gần với ảnh thật. ĐỒ ÁN 3 Trang 13/27 Một ảnh số giả sử được biểu diễn bằng hàm f(x, y). Tập con các điểm ảnh là S; cặp điểm ảnh có quan hệ với nhau ký hiệu là p, q. Một số khái niệm nén ảnh số +Nén dữ liệu (Data Compression) Nén dữ liệu là quá trình làm giảm lượng thông tin "dư thừa" trong dữ liệu gốc và do vậy, lượng thông tin thu được sau nén thường nhỏ hơn dữ liệu gốc rất nhiều. Với dữ liệu ảnh, kết quả thường là 10 : 1. Một số phương pháp còn cho kết quả cao hơn. Theo kết quả nghiên cứu được công bố gần đây tại viện kỹ thuật Georgie, kỹ thuật nén fractal cho tỉ số nén là 30 trên 1. Ngoài thuật ngữ "nén dữ liệu”, do bản chất của kỹ thuật này nó còn có một số tên gọi khác như: giảm độ dư thừa, mã hoá ảnh gốc. Từ hơn hai thập kỷ nay, có rất nhiều kỹ thuật nén đã được công bố trên các tài liệu về nén và các phần mềm nén dữ liệu đã xuất hiện ngày càng nhiều trên thương trường. Tuy nhiên, chưa có phương pháp nén nào được coi là phương pháp vạn năng (Universel) vì nó phụ thuộc vào nhiều yếu tố và bản chất của dữ liệu gốc. Trong chương này, chúng ta không thể hy vọng xem xét tất cả các phương pháp nén. Hơn nữa, các kỹ thuật nén dữ liệu chung đã được trình bày trong nhiều tài liệu chuyên ngành. Ở đây, chúng ta chỉ đề cập các phương pháp nén có đặc thù riêng cho dữ liệu ảnh. +Tỷ lệ nén (Compression rate) Tỷ lệ nén là một trong các đặc trưng quan trọng nhất của mọi phương pháp nén. Tuy nhiên, về cách đánh giá và các kết quả công bố trong các tài liệu cũng cần được quan tâm xem xét. Nhìn chung, người ta định nghĩa tỷ lệ nén như sau: Tỷ lệ nén = x% 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 thu được sau nén. Như vậy hiệu suất của nén là: (1-tỷ lệ nén) x %. Khi nói đến kết quả nén, chúng ta dùng tỷ số nén, thí dụ như 10 trên 1 có nghĩa là dữ liệu gốc là 10 phần sau khi nén chỉ có 1 phần. Tuy nhiên, cũng phải thấy rằng những số đo của một phương pháp nén chỉ có giá trị với chính sự nén đó, vì rằng hiệu quả của nén còn phụ thuộc vào kiểu dữ liệu định nén. Tỷ lệ nén cũng chỉ là một trong các đặc trưng cơ bản của phương pháp nén. Nhiều khi tỷ lệ nén cao cũng chưa thể nói rằng phương pháp đó là hiệu quả hơn các ĐỒ ÁN 3 Trang 14/27 phương pháp khác, vì còn các chi phí khác như thời gian, không gian và thậm chí cả độ phức tạp tính toán nữa. Thí dụ như nén phục vụ trong truyền dữ liệu: vấn đề đặt ra là hiệu quả nén có tương hợp với đường truyền không. Cũng cần phân biệt nén dữ liệu với nén băng truyền. Mục đích chính của nén là giảm lượng thông tin dư thừa và dẫn tới giảm kích thước dữ liệu. Tuy vậy, đôi khi quá trình nén cũng làm giảm băng truyền tín hiệu số hoá thấp hơn so với truyền tín hiệu tương tự. + Các loại dư thừa dữ liệu Như trên đã nói, nén nhằm mục đích giảm kích thước dữ liệu bằng cách loại bỏ dư thừa dữ liệu. Việc xác định bản chất các kiểu dư thừa dữ liệu rất có ích cho việc xây dựng các phương pháp nén dữ liệu khác nhau. Nói một cách khác, các phương pháp nén dữ liệu khác nhau là do sử dụng các kiểu dư thừa dữ liệu khác nhau. Nên có 4 kiểu dư thừa chính: a. Sự phân bố ký tự Trong một dãy ký tự, có một số ký tự có tần suất xuất hiện nhiều hơn một số dãy khác. Do vậy, ta có thể mã hoá dữ liệu một cách cô đọng hơn. Các dãy ký tự có tần suất cao được thay bởi một từ mã nhị phân với số bít nhỏ; ngược lại các dãy có tần suất thấp sẽ được mã hoá bởi từ mã có nhiều bít hơn. Đây chính là bản chất của phương pháp mã hoá Huffman. b. Sự lặp lại của các ký tự Trong một số tình huống như trong ảnh, 1 ký hiệu (bit "0" hay bit "1") được lặp đi lặp lại nhiều lần. Kỹ thuật nén dùng trong trường hợp này là thay dãy lặp đó bởi dãy mới gồm 2 thành phần: số lần lặp và kí hiệu dùng để mã. Phương pháp mã hoá kiểu này có tên là mã hoá loạt dài RLC (Run Length Coding). c. Những mẫu sử dụng tần suất Có thể có dãy ký hiệu nào đó xuất hiện với tần suất tương đối cao. Do vậy, có thể mã hoá bởi ít bit hơn. Đây là cơ sở của phương pháp mã hoá kiểu từ điển do Lempel-Ziv đưa ra và có cải tiến vào năm 1977, 1978 và do đó có tên gọi là phương pháp nén LZ77, LZ78. Năm 1984, Terry Welch đã cải tiến hiệu quả hơn và đặt tên là LZW (Lempel-Ziv- Welch). d. Độ dư thừa vị trí ĐỒ ÁN 3 Trang 15/27 Do sự phụ thuộc lẫn nhau của dữ liệu, đôi khi biết được ký hiệu (giá trị) xuất hiện tại một vị trí, đồng thời có thể đoán trước sự xuất hiện của các giá trị ở các vị trí khác nhau một cách phù hợp. Chẳng hạn, ảnh biểu diễn trong một lưới hai chiều, một số điểm ở hàng dọc trong một khối dữ lệu lại xuất hiện trong cùng vị trí ở các hàng khác nhau. Do vậy, thay vì lưu trữ dữ liệu, ta chỉ cần lưu trữ vị trí hàng và cột. Phương pháp nén dựa trên sự dư thừa này gọi là phương pháp mã hoá dự đoán. Cách đánh giá độ dư thừa như trên hoàn toàn mang tính trực quan nhằm biểu thị một cái gì đó xuất hiện nhiều lần. Đối với dữ liệu ảnh, ngoài đặc thù chung đó, nó còn có những đặc thù riêng. Thí dụ như có ứng dụng không cần toàn bộ dữ liệu thô của ảnh mà chỉ cần các thông tin đặc trưng biểu diễn ảnh như biên ảnh hay vùng đồng nhất. Do vậy, có những phương pháp nén riêng cho ảnh dựa vào biến đổi ảnh hay dựa vào biểu diễn ảnh. + Phân loại các phương pháp nén Có nhiều cách phân loại các phương pháp nén khác nhau. • Cách phân loại thứ nhất: dựa vào nguyên lý nén. Cách này phân các phương pháp nén thành 2 họ lớn: • Nén chính xác hay nén không mất thông tin: Họ này bao gồm các phương pháp nén mà sau khi giải nén ta thu được chính xác dữ liệu gốc. • Nén có mất mát thông tin: Họ này bao gồm các phương pháp mà sau khi giải nén ta không thu được dữ liệu như bản gốc. Trong nén ảnh, người ta gọi là các phương pháp" tâm lý thị giác". Các phương pháp này 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. Tất nhiên, các phương pháp này chỉ có hiệu quả khi mà độ vặn xoắn là chấp nhận được bằng mắt thường hay với dung sai nào đó. • Cách phân loại thứ hai: dựa vào cách thức thực hiện nén. Theo cách này, người ta cũng phân thành hai họ: • Phương pháp không gian (Spatial Data Compression): Các phương pháp thuộc họ 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 mà không tác động trực tiếp. ĐỒ ÁN 3 Trang 16/27 • Cách phân loại thứ ba: dựa vào triết lý của sự mã hoá. Cách này cũng phân các phương pháp nén thành 2 họ: • Các phương pháp nén thế hệ thứ nhất: Gồm các phương pháp mà mức độ tính toán là đơn giản, thí dụ như việc lấy mẫu, gán từ mã,... • Các phương pháp nén thế hệ thứ hai: Dựa vào mức độ bão hoà của tỷ lệ nén. Trong các phần trình bày dưới đây, ta sẽ theo cách phân loại này. Cũng còn phải kể thêm một cách phân loại thứ tự do Anil. K. Jain nêu ra. Theo cách của Jain, các phương pháp nén gồm 4 họ chính: • Phương pháp điểm. • Phương pháp dự đoán. • Phương pháp dựa vào biến đổi. • Các phương pháp tổ hợp (Hybrid). Thực ra cách phân loại này là chia nhỏ của cách phân loại thứ ba và dựa vào cơ chế thực hiện nén. Xét một cách kỹ lưỡng nó cũng tương đương cách phân loại thứ ba. Nhìn chung, 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. Quá trình nén Dữ liệu gốc Dữ liệu nén Quá trình giải nén Hình 2.4 Sơ đồ chức năng quá trình nén dữ liệu. + Biến đổi cosine rời rạc (DCT- Discrete cosine Transform) + Phương pháp biến đổi Biến đổi cosine rời rạc (DCT) biểu diễn ảnh dưới dạng tổng của các cosine của các thành phần biên độ và tần số khác nhau của ảnh. Hàm dct2 tính DCT hai chiều của một ảnh. DCT có tính chất mà với các ảnh điển hình, hầu hết các thông tin về ảnh chỉ tập trung trong một vài hệ số của DCT, trong khi các hệ số còn lại chỉ chứa rất ít thông tin. Vì lý do này, DCT thường được sử dụng trong các ứng dụng nén ảnh khác nhau nhờ hiệu suất gần như tối ưu của nó đối với các ảnh có độ tương quan cao giữa các điểm ĐỒ ÁN 3 Trang 17/27 ảnh lân cận. Chẳng hạn, DCT là trung tâm của giải thuật nén ảnh theo chuẩn quốc tế thường được biết với tên JPEG (tên này do nhóm phát triển đặt ra: Joint Photographic Experts Group) DCT hai chiều của ma trận A có kích thước MxN được định nghĩa như sau : với Trong đó: và Các giá trị Bpq được gọi là các hệ số của biến đổi DCT. DCT có thể biến đổi ngược được và biến đổi ngược của nó cho bởi công thức : với Trong đó: và Biểu thức DCT ngược có thể được xem xét khi coi rằng mọi ma trận A kích thước MxN như là tổng của MN hàm có dạng : Những hàm này đựơc gọi là những hàm cơ sở của DCT. Hệ số DCT B pq có thể được xem như trọng số cho mỗi hàm cơ sở. Với các ma trận 8x8, 64 hàm cơ sở được minh hoạ bởi ảnh sau: ĐỒ ÁN 3 Trang 18/27 Hình 2.5 Hình minh họa ma trận 8x8 + Nén tổn hao dựa vào DCT Giải thuật nén có tổn hao được biết đến nhiều nhất có lẽ là giải thuật dùng DCT. Đây là giải thuật được chuẩn hóa với tên gọi JPEG (lấy từ tên gọi của tổ chức đã định ra tiêu chuẩn nén này: Joint Photographic Experts Groups (Nhóm lien kết các chuyên gia xử lý ảnh). Chuẩn JPEG được sử dụng để mã hoá ảnh đa mức xám, ảnh màu. Nó không cho kết quả ổn định lắm với ảnh đen trắng. Chuẩn JPEG cung cấp giải thuật cho cả hai loại nén là nén không mất mát thông tin và nén mất mát thông tin. Sơ đồ khối của giải thuật nén và giải nén ảnh JPEG: Phân khố 8x8 i ẢNH NÉN DCT Lượng tử hoáMã hoá ẢNH GỐC 8x8 ...... Bảng lượng tử Bảng mã 8x8 Hình 2.6 Sơ đồ khối của giải thuật nén ảnh JPEG Để nén ảnh theo giải thuật JPEG, ta chia ảnh thành các khối 8x8 (hoặc 16x16). Mỗi khối 8x8 này sẽ được xử lý riêng biệt qua các bước của quá trình nén ảnh. Đầu tiên, ta thực hiện biến đổi DCT thuận đối với mỗi khối. Như chúng ta đã biết, do các điểm ảnh kế cận nhau thường có tính tương quan rất cao, phép biến đổi DCT thuận có xu hướng tập trung hầu hết năng lượng của bức ảnh vào trong một vài hệ số DCT tần số thấp. Đây là cơ sở để ta thực hiện nén ảnh. Với một khối ảnh kích thước 8x8 trích từ ảnh nguồn, hầu hết các hệ số của nó đều bằng 0 hoặc gần bằng 0. Như vậy, ta có thể ĐỒ ÁN 3 Trang 19/27 không cần biểu diễn các hệ số này khi truyền dữ liệu ảnh đi. Lưu ý rằng bản thân biến đổi DCT không làm mất mát thong tin của ảnh gốc, nó chỉ chuyển các thông tin này về một dạng khác mà ta có thể mã hóa một cách hiệu quả hơn. Sau khi qua bộ biến đổi DCT, mỗi hệ số trong số 64 hệ số biến đổi DCT được lượng tử hóa dựa vào một bảng giá trị lượng tử được thiết kế kỹ lưỡng. Một phương pháp lượng tử đơn giản có thể dùng là chỉ giữ lại một vài hệ số DCT tần số thấp (các hệ số có giá trị lớn) còn tất cả các hệ số còn lại gán bằng 0. trong chuẩn nén JPEG, mỗi hệ số DCT sẽ được chia cho một trọng số ở vị trí tương ứng trong một ma trận lượng tử 8x8, sau đó làm tròn về số nguyên gần nhất. Sau khi lượng tử hóa, các hệ số biến đổi DCT sẽ được sắp xếp theo một chuỗi zig-zag bắt đầu từ thành phần DC, rồi đến thành phần AC… Cuối cùng các hệ số này được chuyển thành chuỗi bit nhị phân bằng kỹ thuật mã hóa đưa ra ảnh nén. Ở công đoạn giải mã, bộ giải mã sẽ thự hiện quá trình ngược lại: Giải mã entropy, sau đó nhân các hệ số thu được với phần tử tương ứng của ma trận lượng tử, rồi biến đổi ngược DCT để tái tạo lại ảnh ban đầu. a. Phân khối Chuẩn nén JPEG phân ảnh ra các khối 8x8. Công đoạn biến đổi nhanh Cosin hai chiều cho các khối 8x8 tỏ ra hiệu quả hơn. Biến đổi Cosin cho các khối có cùng kích cỡ có thể giảm được một phần các tính toán chung như việc tính hệ số C ji. Khi n=8 chúng ta chỉ cần tính hệ số Cji cho 3 tầng (8= 23), số các hệ số là: 4 + 2 + 1 = 7. Nếu với một ảnh 1024x1024, phép biến đổi nhanh Cosin một chiều theo hàng ngang hoặc hàng dọc ta phải qua 10 tầng (1024 = 210). Số các hệ số Cji là: 512 + 256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 1021. Thời gian tính các hệ số C ji với toàn bộ ảnh 1024x1024 lớn gấp 150 lần so với thời gian tính toán các hệ số này cho các khối. Biến đổi Cosin đối với các khối có kích thước nhỏ sẽ làm tăng độ chính xác khi tính toán với số dấu phẩy tĩnh, giảm thiểu sai số do làm tròn sinh ra. Do các điểm ảnh kề cận có độ tương quan cao hơn, do đó phép biến đổi Cosin cho từng khối nhỏ sẽ tập trung năng lượng hơn vào một số ít các hệ số biến đổi. Việc loại bớt một số hệ số năng lượng thấp trong các khối chỉ tạo ra mất mát thông tin cục bộ giúp nâng cao chất lượng ảnh. Ảnh sẽ được chia làm B khối với: ĐỒ ÁN 3 Trang 20/27 M ' N' × = M B × NB k l B= Các khối được xác định bởi bộ số (m,n) với m = [0..M B-1] và n=[0..NB-1], ở đây m chỉ thứ tự của khối theo chiều rộng, n chỉ thứ tự của khối theo chiều dà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 toạ độ thực của điểm ảnh trong ảnh ban đầu. Nếu ảnh ban đầu ký hiệu Image[i,j] thì ma trận biểu diễn khối (m,n) là x[u,v]được tính: x[u , v] = Im age[ mk + u , nl + v ] b. Biến đổi Biến đổi là một công đoạn lớn trong các phương pháp nén sử dụng phép biến đổi. Nhiệm vụ của công đoạn biến đổi là tập trung năng lượng vào một số ít các hệ số biến đổi. Công thức biến đổi cho mỗi khối là: Trong đó ε k1 1 = 2 0 khi khi k1 = 0 (0 < k1 < 8) 1 ε k2 = 2 0 khi khi k2 = 0 (0 < k 2 < 8) Thuật toán biến đổi nhanh Cosin hai chiều cho mỗi khối trong trường hợp này sẽ bao gồm 16 phép biến đổi nhanh Cosin một chiều. Đầu tiên, người ta biến đổi nhanh Cosin một chiều cho các dãy điểm ảnh trên mỗi hàng. Lần lượt thực hiện cho 8 hàng. Sau đó đem biến đổi nhanh Cosin một chiều theo từng cột của ma trận vừa thu được sau 8 phép biến đổi trên. Cũng lần lượt thực hiện cho 8 cột. Ma trận cuối cùng sẽ là ma trận hệ số biến đổi của khối tương ứng. Trong sơ đồ giải nén ta phải dùng phép biến đổi Cosin ngược. Công thức biến đổi ngược cho khối 8x8: ĐỒ ÁN 3 Trang 21/27 ε k1 Trong đó 1 = 2 0 1 ε k2 = 2 0 khi khi k1 = 0 (0 < k1 < 8) khi khi k2 = 0 (0 < k 2 < 8) c. Lượng tử hóa 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. Đầu vào của khối lượng tử hoá là các ma trận hệ số biến đổi Cosin của các khối điểm ảnh. Để giảm số bộ lượng tử, người ta tìm cách quy các hệ số ở các khối về cùng một khoảng phân bố. Chuẩn nén JPEG chỉ sử dụng một bộ lượng tử hoá. Giả sử rằng các hệ số đều có hàm tính xác suất xuất hiện như nhau. Chúng ta sẽ căn chỉnh lại hệ số y j bằng phép gán: yj = Với yj −µj σj µj là trung bình cộng của hệ số thứ j. σj là độ lệch cơ bản của hệ số thứ j. d. Nén Đầu vào của khối nén gồm hai thành phần: thành phần các hệ số một chiều và thành phần các hệ số xoay chiều. Thành phần các hệ số một chiều Ci(0,0) với i = 0,1,..., 63 chứa phần lớn năng lượng tín hiệu hình ảnh. Người ta không nén trực tiếp các giá trị C i(0,0) mà xác định độ lệch của Ci(0,0): d i = C i +1 (0,0) − C i (0,0) di có giá trị nhỏ hơn nhiều so với C i nên trong biểu diễn dấu phẩy động theo chuẩn IEEE754 thường chứa nhiều chuỗi bit 0 nên có thể cho hiệu suất nén cao hơn. Giá trị C0(0,0) và các độ lệch di được ghi ra một tệp tạm. Tệp này được nén bằng phương pháp nén Huffman. ĐỒ ÁN 3 Trang 22/27 Thành phần các hệ số xoay chiều Ci(m,n) với 1 ≤ m ≤ 7, 1 ≤ n ≤ 7 chứa các thông tin chi tiết của ảnh. Để nâng cao hiệu quả nén cho mỗi bộ hệ số trong một khối người ta xếp lại chúng theo thứ tự ZigZag. Có thể hình dung hình ZigZag như bảng trang bên. Tác dụng của sắp xếp lại theo thứ tự ZigZag là tạo ra nhiều loạt hệ số giống nhau. Chúng ta biết rằng năng lượng của khối hệ số giảm dần từ góc trên bên trái xuống góc dưới bên phải nên việc sắp xếp lại các hệ số theo thứ tự ZigZag sẽ tạo điều kiện cho các hệ số xấp xỉ nhau (cùng mức lượng tử) nằm trên một dòng. 0 2 3 9 10 20 21 35 1 4 8 11 19 22 34 36 5 7 12 18 23 33 37 48 6 13 17 24 32 38 47 49 14 16 25 31 39 46 50 57 15 26 30 40 45 51 56 58 27 29 41 44 52 55 59 62 28 42 43 53 54 60 61 63 Mỗi khối ZigZag này được mã hoá theo phương pháp RLE. Cuối mỗi khối đầu ra của RLE, ta đặt dấu kết thúc khối EOB (End Of Block). Sau đó, các khối được dồn lại và mã hoá một lần bằng phương pháp mã Huffman. Nhờ có dấu kết thúc khối nên có thể phân biệt được hai khối cạnh nhau khi giải mã Huffman. Hai bảng mã Huffman cho hai thành phần hệ số tất nhiên sẽ khác nhau. Để có thể giải nén được, chúng ta phải ghi lại thông tin như: kích thước ảnh, kích thước khối, ma trận T, độ lệch tiêu chuẩn, các mức tạo lại, hai bảng mã Huffman, kích thước khối nén một chiều, kích thước khối nén xoay chiều... và ghi nối tiếp vào hai file nén của hai thành phần hệ số. ĐỒ ÁN 3 Trang 23/27 Tóm lại, DCT làm giảm độ tương quan không gian của thông tin trong block (khối). Điều đó cho phép biễu diễn thích hợp ở miền DCT do các hệ số DCT có xu hướng có phần dư thừa ít hơn. Điều này có nghĩa là DCT gói một phần lớn năng lượng tín hiệu vào các thành phần biến đổi có tần số tương đối thấp để lưu trữ hoặc truyền dẫn, tạo 0 và các giá trị rất thấp đối với thành phần tần số cao. Nhờ đặc tính của hệ thống nhìn của mắt người, các hệ số DCT có thể được mã hóa phù hợp, chỉ các hệ số DCT quan trọng nhất mới được mã hóa và truyền đi. DCT thuận kết hợp với DCT nghịch sẽ không cho tổn thất nếu độ dài từ mã của hệ số là 13 đến 14 bits cho tín hiệu video đầu vào được số hóa bằng các mẫu dài 8 bit. Nếu hệ số được lượng tử hóa bằng 11 bit (hoặc ngắn hơn), thì nén bằng DCT sẽ có tổn hao. 2.2. KHÔI PHỤC ẢNH SỐ Phương pháp lọc ảnh bao gồm các bước như sau: -Xác định một điểm trung tâm (x,y); -Thực hiện các phép toán chỉ liên quan đến một số điểm lân cận với (x,y); -Kết quả trả về chính là đáp ứng của quá trình lọc tại điểm (x,y); -Lặp lại quá trình lọc với các điểm (x,y) khác. Nếu phép toán thực hiện trên các điểm lân cận là tuyến tính thì ta có quá trình lọc tuyến tính (còn gọi là phép chập không gian), ngược lại, ta có quá trình lọc phi tuyến. Để khôi phục ảnh số cụ thể là lọc nhiễu ta lần lượt sử dụng ba loại lọc: -Lọc median -Lọc wiener -Lọc imfilter a.Lọc median . Lọc median là loại lọc phi tuyến dùng mặt nạ. Mỗi pixel được thay thế bằng median của các pixel láng giềng. Lọc median làm cạnh có chất lượng tốt và được dùng khi nhiễu tách biệt. Giả sử A={a1,a2,…,ak} là các giá trị pixel láng giềng a1<=a2<=…<=ak. Thì Median(A)= Chú ý: median của một tập có thứ tự là “giá trị tâm”. B1. Tìm điểm ảnh bị lỗi trong hình xử lý. B2. Chọn kích thước của cửa sổ (mặt nạ) (là một ma trận). B3. Sắp xếp các pixel (kể cả pixel bị lỗi) theo dãy có thứ tự tăng (giảm) dần. B4. Thay pixel bị lỗi bằng giá trị giữa của dãy vừa tính được. B5. Dịch cửa sổ sang cột (hàng) kế tiếp. B6. Quay lại B3. b.Lọc wiener Đây là bộ lọc tuyến tính nhưng có tính thích nghi tùy theo các giá trị variance của từng pixel ảnh. Đối với các pixel có variance lớn, lọc wiener chỉ làm phẳng ảnh ở mức độ thấp nhưng với các pixel có variance nhỏ, nó sẽ có xu hướng trải rộng các giá trị mức xám hơn. Chất lượng bộ lọc này thường cao hơn các bộ lọc khác vì nó vẫn giữ ĐỒ ÁN 3 Trang 24/27 được những chi tiết tần số cao của ảnh, vẫn giữ những đường nét biên ảnh, nhưng thời gian thực thi hàm này sẽ dài hơn. Bộ lọc này thích hợp với các loại nhiễu có công suất bẳng phẳng. c.Lọc imfilter Lọc imfilter là loại lọc tuyến tính, phương pháp lọc trong đó mỗi pixel của ảnh mới là tổ hợp tuyến tính của các mức xám của các pixel lân cận với pixel (x,y) của ảnh gốc, nghĩa là mỗi pixel lân cận sẽ được nhân với một hệ số tương ứng nào đó rồi cộng lại. Nếu vùng lân cận của (x,y) có kích thước mxn, thì sẽ có mn hệ số lọc và chúng cũng được sắp xếp thành một ma trận kích thước mxn. 2.3.NHẬN DẠNG CẠNH GÓC ẢNH SỐ Phương pháp phát hiện trực tiếp: dựa chủ yếu vào sự biến thiên độ sáng của điểm ảnh để làm nổi biên bằng cách lấy đạo hàm +Lấy đạo hàm bậc nhất ta có phương pháp Gradient +Lấy đạo hàm bậc hai có phương pháp Laplace Cả 2 phương pháp này gọi chung là phương pháp dò biên cục bộ Phương pháp phát hiện gián tiếp: Bằng cách nào đấy chúng ta thu được các vùng ảnh khác nhau thì đường phân cách các vùng ảnh chính là biên. Phương pháp này khó thực hiện nhưng cho kết quả tốt khi sự biến thiên mức xám nhỏ. Ở đây ta sử dụng ba mặt nạ lọc: Sobel, Perwitt, Cannon để nhận dạng cạnh góc ảnh. CHƯƠNG 3: KẾT QUẢ MÔ PHỎNG 3.1 Mô hình mô phỏng ĐỒ ÁN 3 Trang 25/27 . Hình 3.1 Mô hình mô phỏng GUI 3.2 Kết quả mô phỏng Hình 3.2 Kết quả mô phỏng bằng GUI |