basic matlab
TRANSCRIPT
![Page 1: Basic Matlab](https://reader034.vdocuments.site/reader034/viewer/2022050710/5571f84d49795991698d1d63/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022050710/5571f84d49795991698d1d63/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022050710/5571f84d49795991698d1d63/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022050710/5571f84d49795991698d1d63/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022050710/5571f84d49795991698d1d63/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022050710/5571f84d49795991698d1d63/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022050710/5571f84d49795991698d1d63/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022050710/5571f84d49795991698d1d63/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022050710/5571f84d49795991698d1d63/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022050710/5571f84d49795991698d1d63/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022050710/5571f84d49795991698d1d63/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022050710/5571f84d49795991698d1d63/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022050710/5571f84d49795991698d1d63/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022050710/5571f84d49795991698d1d63/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022050710/5571f84d49795991698d1d63/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022050710/5571f84d49795991698d1d63/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.site/reader034/viewer/2022050710/5571f84d49795991698d1d63/html5/thumbnails/17.jpg)
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,…