17
Căn bản Matlab và xử lý ảnh trong Matlab Lê Phong 1 3/18/2010 Căn bản về Matlab và xử lí ảnh trong Matlab 1. Giới thiệu Matlab (MATrix LABoratory) 1.1. Ngôn ngữ lập trình Matlab Matlab là ngôn ngữ bậc cao dành cho lập trình kỹ thuật, với các ưu điểm giúp cho việc nêu và giải quyết vấn đề gần gũi hơn với các ký hiệu toán học, giúp cho việc lập trình dễ dàng và nhanh chóng hơn so với các ngôn ngữ khác như C, Java,… tính toán mạnh mẽ trên đại số. 1.2. Phần mềm Matlab Matlab là phần mềm thương mại bao gồm IDE cho ngôn ngữ Matlab, các công cụ trực quan cho việc xử lí thông tin như: vẽ đồ thị 2D, 3D, ảnh, video, bảng tính,… các bộ thư viện (toolbox) cho nhiều lĩnh vực như xử lí ảnh, xử lí tín hiệu số, bioinformatic,… 1.3. Giao diện

Basic Matlab

Embed Size (px)

Citation preview

Page 1: Basic Matlab

Căn bản Matlab và xử lý ảnh trong Matlab

Lê Phong 1 3/18/2010

Căn bản về Matlab và xử lí ảnh

trong Matlab

1. Giới thiệu Matlab (MATrix LABoratory)

1.1. Ngôn ngữ lập trình Matlab

Matlab là ngôn ngữ bậc cao dành cho lập trình kỹ thuật, với các ưu điểm

giúp cho việc nêu và giải quyết vấn đề gần gũi hơn với các ký hiệu

toán học,

giúp cho việc lập trình dễ dàng và nhanh chóng hơn so với các

ngôn ngữ khác như C, Java,…

tính toán mạnh mẽ trên đại số.

1.2. Phần mềm Matlab

Matlab là phần mềm thương mại bao gồm

IDE cho ngôn ngữ Matlab,

các công cụ trực quan cho việc xử lí thông tin như: vẽ đồ thị 2D,

3D, ảnh, video, bảng tính,…

các bộ thư viện (toolbox) cho nhiều lĩnh vực như xử lí ảnh, xử lí

tín hiệu số, bioinformatic,…

1.3. Giao diện

Page 2: Basic Matlab

Căn bản Matlab và xử lý ảnh trong Matlab

Lê Phong 2 3/18/2010

Gồm một số cửa sổ chính sau

Command Window: nơi gõ lệnh (như MS-DOS)

Workspace: thể hiện giá trị các biến mà chúng ta đang thao tác.

Command History: các lệnh đã sử dụng ở Command Window

Current Directory: thư mục hoạt động hiện hành

1.4. Một số lệnh cơ bản

Xóa màn hình Command Window: clc

Xóa toàn bộ data trong Workspace: clear all

Xóa hình trong Figure Window: clf

Page 3: Basic Matlab

Căn bản Matlab và xử lý ảnh trong Matlab

Lê Phong 3 3/18/2010

1.5. Help (F1)

Phần Help của Matlab được đánh giá là rất tốt và đầy đủ cho việc tra cứu

về các hàm, chức năng, cũng như kiến thức về một số lĩnh vực như xử lý

ảnh, học máy, bioinformatic,... Trong quá trình lập trình Matlab, nếu gặp

vướng mắc hay truy tìm hàm thích hợp, dùng chức năng help là hết sức

cần thiết và hữu dụng.

2. Lập trình trong matlab

2.1. Các kiểu dữ liệu

Kiểu dữ liệu cơ bản nhất trong Matlab là array, mọi dữ liệu đều được coi

là array.

Từ kiểu dữ liệu array, Matlab định nghĩa một số kiểu dữ liệu cơ bản khác

như sau

để kiểm tra một biến X có phải là kiểu dữ liệu D hay không, dùng

hàm is<D>(X), ví dụ:

để ép kiểu biến X sang kiểu dữ liệu D, dùng hàm D(X), ví dụ:

Page 4: Basic Matlab

Căn bản Matlab và xử lý ảnh trong Matlab

Lê Phong 4 3/18/2010

2.2. Xử lí trên array

Matlab coi mọi dữ liệu đều là array. 1 array có thể có 0, 1 hoặc nhiều

chiều. Thường dùng nhất là 1 (vector) và 2 (matrix) chiều.

2.2.1. Khởi tạo array

Để khởi tạo một array, đơn giản nhất là dùng các dấu [] như ví dụ sau

Dấu ';' dùng để phân cách các dòng của array.

Để khởi tạo một mảng với kích thước lớn, Matlab hỗ trợ một số hàm đặc

biệt, thông dụng nhất là 2 hàm ones([kích thước]) và

zeros([kích thước]), ví dụ

Page 5: Basic Matlab

Căn bản Matlab và xử lý ảnh trong Matlab

Lê Phong 5 3/18/2010

Ngoài ra có thể sử dụng toán tử ':' (xem phần sau).

2.2.2. Xem các thông số và dữ liệu của array

Để xem kích thước của array X dùng hàm size(X), ví dụ

Để lấy phần tử có tọa độ x trong array X, sử dụng X(x), ví dụ

Page 6: Basic Matlab

Căn bản Matlab và xử lý ảnh trong Matlab

Lê Phong 6 3/18/2010

Để lấy một array con của array X, sử dụng X([…],[…],…), ví dụ

2.2.3. Thay đổi kích thước

Matlab hỗ trợ một số hàm thay đổi kích thước của một array X như (xem

thêm trong tài liệu)

mở rộng theo kiểu ghép array: Z = [ X Y]

nối 2 matrix: cat

lặp một matrix nhiều lần: repmat

thay đổi kích thước hoặc chiều: reshape

2.3. Các toán tử

Các toán tử trong Matlab được cho trong bảng sau

Page 7: Basic Matlab

Căn bản Matlab và xử lý ảnh trong Matlab

Lê Phong 7 3/18/2010

Một toán tử đặc biệt ở đây là ':' có tác dụng khởi tạo array theo cấp số

cộng

a:i:b = [ a a+i a+2i … a+((b-a) div i)i ]

a:b = a:1:b = [ a a+1 a+2 … b ]

Lưu ý

Page 8: Basic Matlab

Căn bản Matlab và xử lý ảnh trong Matlab

Lê Phong 8 3/18/2010

những toán tử có dấu '.' đằng trước là toán tử element-wise, nghĩa

là nó thực hiện với 2 phần tử tương ứng ở cùng một vị trí của 2

toán hạng cùng kích thước, ví dụ

2.4. Lập trình M-file

2.4.1. 2 kiểu lập trình M-file

Lập trình M-file được chia ra làm 2 loại

lập trình hàm: mỗi M-file là một function, tên file và tên function

phải như nhau. Cấu trúc tổng thể như sau

Page 9: Basic Matlab

Căn bản Matlab và xử lý ảnh trong Matlab

Lê Phong 9 3/18/2010

Chú ý:

o cho phép output nhiều dữ liệu (khác với C, Java,…),

o input là biến tham trị.

Để gọi một function (có sẵn), thao tác giống như C, Java (chú ý là nếu

output có nhiều dữ liệu thì dùng [] để gom các output) như sau

[output1 output2] = FunctionName(input1, input2)

lập trình không hàm: không cần khai báo function, lúc này giống

như là việc tách một đoạn code lớn thành nhiều đoạn code con,

mỗi đoạn code con được lưu trong một M-file. Gọi đoạn chương

trình được lưu trong file abc.m như sau

abc

Để thực thi đoạn chương trình, nhấn <F5>.

2.4.2. Khai báo biến và tầm vực của biến

Khai báo biến: không cần khai báo tường minh biến (cũng như

kiểu của biến) trước khi sử dụng (khác với C, Java…).

Tầm vực của biến: giống như trong C.

2.4.3. Các câu lệnh rẽ nhánh, lặp

If

Page 10: Basic Matlab

Căn bản Matlab và xử lý ảnh trong Matlab

Lê Phong 10 3/18/2010

For

While

switch

2.5. Một số lưu ý

Matlab thực thi các lệnh trong M-file chậm hơn rất nhiều so với C,

Java, vì vậy tốt nhất là nên hạn chế viết quá nhiều lệnh, thay vào

đó dùng các thủ thuật xử lí trên array có sẵn của Matlab, ví dụ: cho

2 mảng gồm 1000 phần tử X và Y, tìm mảng 1000 phần tử Z với

Z(i) = X(i) + Y(i) với i = 1..1000

o không nên viết

Page 11: Basic Matlab

Căn bản Matlab và xử lý ảnh trong Matlab

Lê Phong 11 3/18/2010

o nên viết

Không nên mở rộng array liên tục bằng phương pháp hồi quy X =

[X Y] vì sẽ khiến cho Matlab phải cấp phát lại bộ nhớ nhiều lần.

Thay vào đó, dự đoán trước kích thước cần có của X rồi cấp phát

bằng lệnh zeros([kích thước]).

2.6. Vẽ đồ thị

Matlab có bộ hàm khá mạnh cho phép chúng ta biểu diễn dữ liệu một

cách trực quan.

2.6.1. Đồ thị y = f(x)

Trong máy tính, để vẽ đồ thị y = f(x), ý tưởng cơ bản là chọn ra nhiều

điểm (x1,y1), (x2,y2),... , (xn,yn) với x1 < x2 < ... < xn và nối chúng lại với

nhau. Nếu số điểm chọn càng nhiều thì đồ thị trông càng mượt.

Vẽ đồ thị y = f(x) trong Matlab cũng vậy, có 2 bước thực hiện

Bước 1: chọn tập điểm (x1,y1), (x2,y2),... , (xn,yn) như sau

o lấy tập các điểm tăng x,

o tính giá trị y bằng công thức yi = f(xi)

Bước 2: vẽ đồ thị bằng hàm plot(x,y)

Ví dụ

>> x = -10 : 0.1 : 10; % lấy các giá trị từ -10 đến 10,

cách nhau 0.1

>> y = x.^3 + 2*x -1;

>> plot(x,y)

Page 12: Basic Matlab

Căn bản Matlab và xử lý ảnh trong Matlab

Lê Phong 12 3/18/2010

2.6.2. Đồ thị z = f(x,y)

Đối với việc vẽ đồ thị z = f(x,y) thì có khác một chút so với y = f(x), mặc

dù về cơ chế thì hoàn toàn tương tự.

Bước 1: xây dựng các giá trị x, y. Các giá trị x, y được chọn lúc

này phải là một lưới. Dùng hàm meshgrid. Sau đó xác định z =

f(x,y)

Bước 2: vẽ mặt z = f(x,y) bằng hàm mesh hoặc surf

Ví dụ

>> [x, y] = meshgrid(-5:0.5:5, -5:0.5:5);

>> z = x.^3 + y.^2;

>> mesh(x,y,z)

Page 13: Basic Matlab

Căn bản Matlab và xử lý ảnh trong Matlab

Lê Phong 13 3/18/2010

2.6.3. Các kiểu vẽ khác

Bên cạnh dùng hàm plot, mesh, Matlab có các hàm khác như stem,

surf,...

3. Xử lí ảnh trong Matlab

3.1. Giới thiệu chung

Matlab có toolbox hỗ trợ cho xử lí ảnh: Image Processing Toolbox.

Toolbox này có gần như đầy đủ các hàm cơ bản cho xử lí ảnh

nhập xuất file ảnh,

các bộ lọc,

các toán tử morphology,

Page 14: Basic Matlab

Căn bản Matlab và xử lý ảnh trong Matlab

Lê Phong 14 3/18/2010

nâng cao chất lượng ảnh, phục hồi ảnh,

3.2. Các loại ảnh trong Matlab

Trong Matlab có 3 loại ảnh

ảnh nhị phân: tương đương matrix <height x width>, mỗi

phần tử có kiểu logical

ảnh index: tương đương matrix <height x width>, mỗi phần

tử mang kiểu int16, đi kèm với một color map

Page 15: Basic Matlab

Căn bản Matlab và xử lý ảnh trong Matlab

Lê Phong 15 3/18/2010

ảnh grayscale: tương đương một matrix <height x width>

ảnh màu: tương đương một array 3D <height x width x

3>

Page 16: Basic Matlab

Căn bản Matlab và xử lý ảnh trong Matlab

Lê Phong 16 3/18/2010

3.3. Các hàm thông dụng

(Xem thêm phần help để biết chi tiết về hàm).

3.3.1. Nhập, xuất, xem ảnh

(Xem thêm phần help để biết các loại format ảnh mà Matlab hỗ trợ).

Nhập file: imread(path)

xuất file: imwrite(path)

xem ảnh: imshow([ảnh])

3.3.2. Chuyển đổi kiểu ảnh

Page 17: Basic Matlab

Căn bản Matlab và xử lý ảnh trong Matlab

Lê Phong 17 3/18/2010

RGB grayscale: rgb2gray,

chuyển đổi giữa các chuẩn màu: rgb2hsv, rgb2ntsc,

rgb2ycbcr, hsv2rgb, ntsc2rgb, ycbcr2rgb,…

grayscale ảnh index: gray2ind, ind2gray

3.3.3. Các bộ lọc và biến đổi ảnh

các bộ lọc: filt2, imfilt, conv2,…

biến đổi: fft2, ifft,…