Thứ Sáu, 6 tháng 6, 2014

MatLab và xử lý ảnh

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ể thực hiện nhiều ứng dụng thực tế trong điều khiển, viễn thông, xử lý âm thanh, hình ảnh, video ....


1 Giới thiệu chung về phần mềm Matlab
1.1 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.2 Tổng quan về cấu trúc dữ liệu của Matlab, các ứng dụng
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 vectơ và có thể sử dụng ngôn ngữ C họ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.
1.2.1 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:
  • 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, uint8, uint16, uint64...
  • 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.
1.2.2 Ứ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.

1.2.3  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.3 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.
+ 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 nghich đả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.
•  Đồ hoạ trong Matlab. Bao gồm các câu lệnh thể hiện  đồ họa 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.4  Làm quen với Matlab

Trước tiên  để khởi  động Matlab bạn kích click vào biểu tượng file 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.
Hình 1.1: Cửa sổ làm việc của matlab

1.5 Các cửa sổ làm việc của Matlab

a) 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-file.
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
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”  
b)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 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 đó. Xem hình 1.2

Hình 1.2 Cửa sổ Command History


c) 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.
(xem hình 1.3)
Hình 1.3 Cửa sổ Workspace

Ngoài ra nó cho phép thay  đổi giá trị, cũng như kích thước của biến bằng cách click chuột lên các biến. Hoặc click vào nút bên trái ngay cạnh nút save. Ví dụ
khi chọn biến (giả sử là biến b) rồi click (hoặc click chuột vào nút cạnh nút save) ta được cửa sổ sau gọi là Variable Editor (xem hình 1.4)
Hình 1.4 Cửa sổ Variable Editor
Tiêu đề là tên biến b, định dạng dữ liệu ở ô có tên là: Numeric format, mặc định là dạng short, kích thước size là 1 by 3 (tức là một hàng và 3 cột) ta có thể thay
đổi kích thước này bằng cách thay đổi giá trị có trong ô kích thước size.  Dùng cửa sổ này để lưu các biến ở dưới là dữ liệu của biến b, ta có thể thay
đổi chúng bằng cách thay đổi giá trị trong các ô đó. Tất cả các biến đều được lưu trong Workspace trong  đó thể hiện cả kích thước (Size), số Bytes và kiểu dữ liệu
(class) (8 bytes cho mỗi phần tử dữ liệu kiểu double cụ thể là 24 bytes dành cho b và 8 bytes dành cho a).
d) 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.  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.
e) Đường dẫn thư mục: Nơi lưu giữ các files chương trình.

1.2 Giới thiệu khái quát về ảnh số
1.2.1 Các khái niệm cơ bản về ảnh
Ảnh số là tập hợp hữu hạn 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. Số điểm ảnh xác định độ phân giải của ảnh. Ảnh có độ phân giải càng cao thì càng thể hiện rõ nét các đặt điểm của tấm hình càng làm cho tấm ảnh trở nên thực và sắc nét hơn.
a) Điểm ảnh (Picture Element)
Đ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.
b) Mức xám của ảnh
Mức xám: Là kết quả của sự biến đổi tương ứng 1 giá trị độ sáng của 1 điểm ảnh với 1 giá trị nguyên dương. Thông thường nó xác định trong [0, 255] tuỳ thuộc vào giá trị mà mỗi điểm ảnh được biểu diễn. 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) Độ phân giải của ảnh
Định nghĩa: Độ phân giải (Resolution) của ảnh là mật độ điểm ảnh được ấn định trên một ảnh số được hiển thị.
Theo định nghĩa, khoảng cách giữa các  điểm  ảnh phải  được chọn sao cho mắt người vẫn thấy được sự liên tục của ảnh. Việc lựa chọn khoảng cách thích hợp tạo nên một mật độ phân bổ, đó chính là độ phân giải và được phân bố theo trục x và y trong không gian hai chiều.
Ví dụ: Độ phân giải của ảnh trên màn hình CGA (Color Graphic Adaptor) là một lưới  điểm theo chiều ngang màn hình: 320  điểm chiều dọc * 200  điểm  ảnh (320*200). Rõ ràng, cùng màn hình CGA 12” ta nhận thấy mịn hơn màn hình CGA 17” độ phân giải 320*200. Lý do: cùng một mật độ (độ phân giải) nhưng diện tích màn hình rộng hơn thì độ mịn (liên tục của các điểm) kém hơn.
2.2 Các cách phân loại ảnh
Ảnh nhị phân: Giá trị xám của tất cả các điểm ảnh chỉ nhận giá trị 1 hoặc 0 như vậy mỗi điểm ảnh trong ảnh nhị phân được biểu diễn bởi 1 bit.   Ảnh xám: Giá trị xám nằm trong [0, 255] như vậy mỗi điểm ảnh trong ảnh nhị phân được biểu diễn bởi 1 byte.
Ảnh màu:
-  Hệ màu RGB:
Một pixel được biểu diễn bằng 3 giá trị (R, G, B) trong đó R, G, B là một giá trị xám và được biểu biểu diễn bằng 1 byte. Khi đó ta có một ảnh 24 bits.
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)

3 Xử lý ảnh với Matlab
3.1 Xử lý ảnh
Các bước cần thiết trong xử lý ảnh. Đầu tiên, ảnh tự nhiên từ thế giới ngoài được thu nhận qua các thiết bị thu (như Camera, máy chụp ảnh). Trước đây, ảnh thu qua Camera là các ảnh tương tự (loại Camera ống kiểu CCIR). Gần đây, với sự phát triển của công nghệ, ảnh màu hoặc đen trắng được lấy ra từ Camera, sau đó nó được chuyển trực tiếp thành ảnh số tạo thuận lợi cho xử lý tiếp theo. Máy ảnh số hiện nay là một thí dụ gần gũi. Mặt khác, ảnh cũng có thể tiếp nhận từ vệ tinh; có thể quét từ ảnh chụp bằng máy quét ảnh. Hình dưới đây mô tả các bước cơ bản trong xử lý ảnh.

Hình 1.5 Các bước cơ bản trong xử lý ảnh

3.2 Các giai đoạn xử lý ảnh
a) Thu nhận ảnh (Image Acquisition)
-  Ảnh được thu từ nhiều nguồn khác nhau:máy ảnh, máy quay phim, máy quét, ảnh vệ tinh…
-  Mục đích: biến đổi thông tin hình ảnh về các cấu trúc được lưu trữ trong máy tính, có thể hiển thị ra các thiết bị ngoại vi như là máy in, màn hình…
-  Gồm hai tiến trình:
+ Biến đổi năng lượng quang học thành năng lượng điện.
+ Tổng hợp năng lượng điện thành ảnh hoặc ma trận số.
b) Tiền xử lý (Image Processing)
-  Là quá trình sử dụng các kỹ thuật xử lý ảnh để làm ảnh tốt lên theo mục đích sử dụng.
-  Mục đích:
+ Điều chỉnh độ chiếu sáng để khắc phục hậu quả của việc chiếu sáng không đều.
+ Giảm nhỏ thành phần nhiễu của ảnh tức là các đối tượng xuất hiện ngoài ý muốn.
+ Hiệu chỉnh giá trị độ sáng giữa nền và đối tượng.
+ Chuẩn hoá độ lớn, màu, dạng của ảnh.
+Điều chỉnh bộ lọc để khuyếch đại và nén các tần số.
c) Phân đoạn (Segmentation)
-  Là quá trình phân chia nội dung các đối tượng cần khảo sát ra khỏi ảnh.
-  Phân chia các đối tượng tiếp giáp nhau.
-  Phân tách các đối tượng riêng biệt thành các đối tượng con.
d) Biểu diễn ảnh (Image Representation)
Đầu ra  ảnh sau phân  đoạn chứa các  điểm  ảnh của vùng  ảnh (ảnh  đã phân đoạn) cộng với mã liên kết với các vùng lận cận. Việc biến đổi các số liệu này thành dạng thích hợp là cần thiết cho xử lý tiếp theo bằng máy tính. Việc chọn các tính chất để thể hiện ảnh gọi là trích chọn đặc trưng (Feature Selection) gắn với việc tách các đặc tính của  ảnh dưới dạng các thông tin định lượng hoặc làm cơ sở để phân biệt lớp đối tượng này với đối tượng khác trong phạm vi ảnh nhận được.
Ví  dụ: trong nhận dạng ký tự trên phong bì thư, chúng ta miêu tả các  đặc trưng của từng ký tự giúp phân biệt ký tự này với ký tự khác.
e) Nhận dạng và nội suy ảnh (Image Recognition and Interpretation)
Nhận dạng  ảnh là quá trình xác  định  ảnh. Quá trình này thường thu  được bằng cách so sánh với mẫu chuẩn đã được học (hoặc lưu) từ trước. Nội suy là phán đoán theo ý nghĩa trên cơ sở nhận dạng.
Ví dụ: một loạt chữ số và nét gạch ngang trên phong bì thư có thể được nội
suy thành mã  điện thoại. Có nhiều cách phân loai  ảnh khác nhau về  ảnh. Theo lý thuyết về nhận dạng, các mô hình toán học về  ảnh  được phân theo hai loại nhận dạng ảnh cơ bản:
-  Nhận dạng theo tham số.
-  Nhận dạng theo cấu trúc.
Một số đối tượng nhận dạng khá phổ biến hiện nay đang được áp dụng trong khoa học và công nghệ là: nhận dạng ký tự (chữ in, chữ viết tay, chữ ký điện tử), nhận dạng văn bản (Text), nhận dạng vân tay, nhận dạng mã vạch, nhận dạng mặt
người…
f) Cơ sở tri thức (Knowledge Base)
Như đã nói ở trên, ảnh là một đối tượng khá phức tạp về đường nét, độ sáng tối, dung lượng điểm ảnh, môi trường để thu ảnh phong phú kéo theo nhiễu. Trong nhiều khâu xử lý và phân tích ảnh ngoài việc đơn giản hóa các phương pháp toán học đảm bảo tiện lợi cho xử lý, người ta mong muốn bắt chước quy trình tiếp nhận và xử lý  ảnh theo cách của con người. Trong các bước xử lý  đó, nhiều khâu hiện nay  đã xử lý theo các phương pháp trí tuệ con người. Vì vậy,  ở  đây các cơ sở tri thức được phát huy.

Như vậy là chúng ta đã tìm hiểu cơ bản matlab và nguyên tắc xử lý ảnh. 
Phần tiếp theo chúng ta sẽ tìm hiểu về các hàm xử lý ảnh của matlab.

Không có nhận xét nào:

Đăng nhận xét