- Trang Trang Trang Trang
3.1.1. Cơ bản về Matlab
a). MATLAB là gì?
- MATLAB là ngơn ngữ lập trình cấp cao cho mục đích tính tốn kỹ thuật, chương trình tích hợp tính tốn, đồ họa và lập trình trong một mơi trường dễ sử dụng nơi mà tất cả các vấn đề và lời giải được biểu diễn dưới dạng ghi chú tốn học.
- MATLAB là một hệ thống tương tác mà tất cả các phần tử dữ liệu cơ bản là một mảng khơng yêu cầu về mặt kích thước. Đây là một thuận lợi cho phép người sử dụng giải quyết các bài tốn trong kỹ thuật đặc biệt là các cơng thức được xây dựng từ ma trận hay vector.
b). Hệ thống trong chương trình MATLAB
- Development Environment: Tập hợp các cơng cụ và những tiện ích cho phép người dùng sử dụng các hàm và file Matlab. Phần lớn các cơng cụ này là giao tiếp người dùng bao gồm: Matlab Desktop và Command Window, Command History, Edit and Debugger, Workspace, trình duyệt hổ trợ sử dụng help.
- The Matlab Mathematical Function Library: Đây là thư viện tập hợp các giải thuật tính tốn được tập hợp trong các hàm từ cơ bản như: sum, sin, cosine, số phức cho đến các hàm phức tạp hơn như: nghịch đảo ma trận, trị riêng và vecto riêng của ma trận, biến đổi Fourier,...
- Lập trình trong mơi trường Matlab: Lập trình với Matlab. Matlab là ngơn ngữ lập trình cấp cao thực thi theo các đoạn lệnh, các hàm, cấu trúc dữ liệu,..cho phép xây dựng các chương trình từ đơn giản, nhỏ cho đến các chương trình lớn, phức tạp.
- Graphics: Matlab đã được mở rộng các khả năng cho việc thể hiện vector và ma trận dưới dạng đồ thị cũng như ký hiệu và in ấn chung. Matlab cung cấp các hàm nâng cao cho việc thể hiện dữ liệu hai, ba chiều, xử lý ảnh, chuyển động, đồ thị.
- The Matlab Application Program Interface (API): Đây là thư viện cho phép người dùng tạo ra những chương trình bằng ngơn ngữ C hoặc Fortran tương tác với Matlab.
3.1.2. Khởi động Matlab
a). Mở chương trình
-Click vào biểu tượng để mở chương trình.
- TrangTrangTrangTrang 56565656 -
- Cửa sổ Command line hiện ra, đây là nơi chúng ta sẽ nhập lệnh và Matlab đưa ra kết quả.
- Lệnh sẽ thực hiện ngay và thể hiện kết quả thực thi trên màn hình. Vd: >> 5+3
ans = 8
- Trong nhiều trường hợp ta khơng muốn thể hiện kết quả thì sau khi gõ lệnh phải thêm dấu “;”.
c). Sử dụng cơng cụ giúp đỡ
-Đánh lệnh help ten_lenh để biết được cách sử dụng và cơng dụng của ten_lenh.
Ví dụ: help convert
-Nếu khơng biết chính xác tên lệnh là gì, ta cĩ thể dùng lệnh lookfor.
-Ví dụ: lookfor convert sẽ cho ta danh sách các lệnh cĩ từ convert trong phần trợ giúp.
3.1.3. Phép tốn với vector và ma trận trong Matlab
a). Các tốn tử
-Trong Matlab, khơng cần khai báo biến. Matlab phân biệt biến chữ hoa và thường
Ví dụ: A và a là hai biến khác nhau
-Các phép tốn số học: +,-,*,/,\(chia đảo), ^. -Các tốn tử quan hệ :< , <= , > , >= , == , ~= -Các tốn tử logic : & , | (or) , ~ (not)
-Các hằng : pi 3.14159265
b). Làm việc với vector và ma trận
-Trong Matlab, tất cả các đối tượng đều xem là ma trận. Một chữ số là một ma trận 1*1 Một vector là ma trận một hàng hay một cột. Ví dụ: >> a=[5 10 2;10 2 4; 2 4 5] a = 5 10 2 10 2 4 2 4 5
-Chỉ số : Phần tửở hàng i cột j của ma trận cĩ kí hiệu là A(i,j). Tuy nhiên ta cũng cĩ thể tham chiếu tới phần tử của mảng nhờ một chỉ số A(k). Ví dụ: A(6) là tham chiếu của A(3,2).
-Tốn tử “:” là một tốn tử quan trọng, xuất hiện ở nhiều dạng khác nhau Ví dụ: >> 5:10
ans =
- TrangTrangTrangTrang 57575757 - >> 1:2:10 ans= 1 3 5 7 9 * A(:,j)để trích ra cột thứ j của A * A(i,:)để trích ra hàng thứ i * A(k:l,m:n) trích ra ma trận con của A * V(i:j) trích ra một phần vector V Ví dụ: >> A=[2 4 6; 1 3 5; 3 1 4]; >> A(3,:) ans = 3 1 4 -Chuyển vị: Dùng dấu ’ để tạo ma trận chuyển vị Ví dụ: >>a=[1 3; 2 4] a = 1 3 2 4 >> a’ ans = 1 2 3 4 -Phép tốn số học với ma trận: Cộng, trừ ma trận: >> a=[2 3]; >> b=[1 2]; >> a+b ans = 3 5 Nhân hai ma trận: >> a*b’ ans = 8 >> a*b ans = 2 6
Chia các thành phần của ma trận này cho một ma trận khác: >> a/b
ans =
- TrangTrangTrangTrang 58585858 - Lũy thừa của ma trận: >> a.^2 ans = 4 9 >> c=[1 2; 3 4]; >> c^2 ans = 7 10 15 22 -Ma trận đặc biệt: * zeros(m,n): ma trận tồn 0. * eye(n):ma trận đơn vị. * ones(m,n): Ma trận tồn 1. 3.1.4. Matlab guide
3.1.4.1. Khởi động giao diện GUI
- Gui là giao diện bằng hình ảnh của chương trình.
- Gui bao gồm các nút nhấn, hộp liệt kê, thanh trượt, menu… chúng cung cấp cho người dùng sử dụng một mơi trường làm việc thân thiện để họ tập trung vào các ứng dụng của chương trình hơn là đi tìm hiểu cách thức làm việc của chương trình đĩ.
- Mở phần mềm Matlab, gõ lệnh sau vào cửa số Command.
>> guide
Trong cửa sổ GUIDE Quick Start cĩ nhiều lựa chọn theo một trong các khung mẫu sau:
- TrangTrangTrangTrang 59595959 -
Hình 3.1: Cửa số GUIDE.
- Create New GUI: Tạo hộp thoại GUI mới theo một trong các loại sau:
- Blank GUI (Default): Hộp thoại GUI trống khơng cĩ một điều
khiển Uicontrol nào cả.
- GUI with Uicontrols: Hộp thoại GUI với một vài Uicontrol như
button, … Chương trình cĩ thể chạy ngay.
- GUI with Axes and Menu: Hộp thoại GUI với một Uicontrol axes
và button, các menu để hiển thịđồ thị.
- Modal Question Dialog: Hộp thoại đặt câu hỏi Yes, No.
- Open Existing GUI: mở một project cĩ sẵn.Trong hướng dẫn này, các bạn tạo một project mới nên sẽ chọn Blank GUI.
- TrangTrang 60TrangTrang 606060 -
3.1.4.2. Cửa số GUI hiện ra
Hình 3.2: Cửa số biên soạn GUI.
Giao diện rất giống với các chương trình lập trình giao diện như Visual Basic, Visual C++, … Các bạn di chuyển chuột qua các biểu tượng ở bên trái sẽ thấy tên của các thanh cơng cụ điều khiển. Xin nĩi qua một vài cơng cụ điều khiển hay dùng:
- Push Button: Là một nút nhấn, giống như nút Command Button trong VB. Là các nút bấm như nút OK, Cancel mà ta vẫn bấm.
- Toggle button: Là một nút bật giống như push button nhưng cĩ hiện thị trạng thái thay đổi mỗi khi nhấn nút.
- Radio Button: Nút nhỏ hình trịn để chọn lựa.
- Check Box: Là hộp kiểm tra cho phép đưa vào các chọn lựa khi bấm chuột vào nĩ.
- Edit Text: Là hộp văn bản đưa chuỗi ký tự vào đĩ.
- Static Text: Dịng văn bản dùng đểđặt nhãn, tiêu đề, hướng dẫn.
- Pop-up Menu: Menu sổ xuống trình bày một bảng các chọn lựa khi nhấp chuột vào.
- TrangTrangTrangTrang 61616161 -
- Axes: Vẽ hệ trục.
- Slider : Thanh trượt dùng đểđưa giá trị vào trong một vùng giới hạn.
- Run (Ctr + T) : nhấn vào để chạy chương trình mà ta đã viết. Cĩ lỗi là hiện ra ngày.
- Align Object: dùng để làm cho các điều khiển sắp xếp gọn đẹp theo ý mình như cùng căn lề bên trái, …
- Grid and Rulers : dùng để cấu hình về lưới trong giao diện vì nĩ sẽ coi giao diện như một ma trận các ơ vuơng nhỏ, ta sẽ thay đổi giá trị này để cho các điều khiển cĩ thể thảởđâu tùy ý cho đẹp.
- Menu Editor : trình này để tạo menu cho điều khiển
- Tab Order Editor : sắp xếp Tab order là thứ tự khi ta nhấn phím Tab - Gui Options : lựa chọn cho giao diện GUI.
- Các bạn save dưới tên: “ TEN”, khi đĩ đồng thời xuất hiện cửa sổ Editor và đang mở file TÊN.m của bạn. Trong thư mục bạn save sẽ cĩ 2 file là:
- TEN.fig : file này chứa giao diện của chương trình
- TEN.m : file chứa các mã thực thi cho chương trình như các hàm khởi tạo, các hàm Callback….
3.1.4.3. Thay đổi thuộc tính điều khiển
Nhấp chuột vào Component trong vùng layout để soạn tính chất của component. Ví dụ: Nhấn chuột vào Edit text, sẽ hiện ra cửa sổ Property Inspector.
- Tag: dùng để đặt tên cho component.
- BackgroundColor: màu nền của component. - ForegroundColor: màu chữ trên component.
- FontName, fontAngle,fontSize, fontWeight: các đặt tính font chữ trên component.
- String: văn bản hiển thị trên component.
- Enable: cho phép component hoạt động hay khơng. - Visible: hiển thị component hay khơng.
- TrangTrangTrangTrang 62626262 -
Hình 3.3: Cửa sổ thuộc tính.
- Quan trọng nhất đối với các component là hàm Callback, tức là hàm con mà file áp dụng *.m sẽ gọi khi ta tác động vào component. Để soạn thảo callback ở cửa số layout nhấp chuột phải vào component muốn soạn thảo sau đĩ chọn View callbacks => Callback ta sẽ vào màn hình soạn thảo Callback cho component đĩ. Lưu ý rằng các dịng lệnh sẽ được viết sau dịng “ function tên component_Callback(hobject,eventdata, handles). Sau khi soạn thảo xong ta lưu, lập tức Matlab sẽ lưu thành hai file cĩ cùng tên nhưng khác nhau về phần mở rộng:
- File cĩ phần mở rộng *.fig chứa nội dung của giao diện
- TrangTrang 63TrangTrang 636363 -
3.1.5. Cơ bản vềảnh và các hàm xử lý ảnh trong Mtalab 3.1.5.1. Các kiểu ảnh trong matlab 3.1.5.1. Các kiểu ảnh trong matlab
a). Ảnh Index(Ảnh chỉ mục)
Ảnh được biểu diễn bởi hai ma trận, một ma trận dữ liệu ảnh X và một ma trận màu (cịn gọi là bản đồ màu) map. Ma trận dữ liệu cĩ thể thuộc kiểu uint8, uint16 hoặc double. Ma trận màu là một ma trận kích thước m x 3 gồm các thành phần thuộc kiểu double cĩ giá trị trong khoảng [0 1]. Mỗi hàng của ma trận xác định thành phần red, green, blue của một màu trong tổng số m màu được sử dụng trong ảnh. Giá trị của một phần tử trong ma trận dữ liệu ảnh cho biết màu của điểm ảnh đĩ nằm ở hàng nào trong ma trận màu.
Hình 3.4: Ảnh Index.
- TrangTrang 64TrangTrang 646464 -
b). Ảnh xám(grayscale)
Mỗi ảnh được biểu diễn bởi một ma trận hai chiều, trong đĩ giá trị của mỗi phần tử cho biết độ sang (hay mức xám) của điểm ảnh đĩ. Ma trận này cĩ thể một trong các kiểu uint8, uint16 hoặc double. Ảnh biểu diễn theo kiểu này cịn gọi là ảnh xám.
Hình 3.5: Ảnh xám.
c). Ảnh nhị phân
Ảnh được biểu diễn bởi một ma trận hai chiều thuộc kiểu logical. Mỗi điểm ảnh chỉ cĩ thể nhận một trong hai giá trị là 0 (đen) hoặc 1 (trắng).
- TrangTrangTrangTrang 65656565 -
d). Ảnh màu RGB
Cịn gọi là ảnh “truecolor” do tính trung thực của nĩ. Ảnh này được biểu diễn bởi một ma trận ba chiều kích thước m x n x 3, với m x n là kích thước ảnh theo pixels. Ma trận này định nghĩa các thành phần màu red, green, blue cho mỗi điểm ảnh, các phần tử của nĩ cĩ thể thuộc kiểu uint8, uint16 hoặc double.
- TrangTrang 66TrangTrang 666666 -
3.1.5.2. Các hàm xử lý cơ bản trong matlab
a). Đọc và ghi dữ liệu ảnh
* Hàm imread: đọc các file ảnh với bất kỳ các định dạng ảnh đã biết hiện nay và lưu lại dưới dạng một ma trận biểu diễn ảnh trong Matlab.
Cú pháp : A=imread(filename,fmt)
* Hàm imwrite: cho phép lưu một ảnh biểu diễn bằng một ma trận trong Matlab thành một file ảnh dưới một trong các định dạng đã biết.
Cú pháp : imwrite(A,filename,fmt)
* Hàm imfinfo: dùng để xem các thơng số của một file ảnh nào đĩ. Cú pháp :imfinfo(filename,fmt)
Các thơng tin được cung cấp bởi hàm imfinfo là : filename, filemoddate, filesize, format,formatversion, width, height, bitdepth, colortype.
b). Chuyển đổi giữa các kiểu dữ liệu, kiểu ảnh
Matlab cung cấp sẵn các hàm thực hiện chuyển kiểu cho các ma trận biểu diễn ảnh, bao gồm : im2double, im2uint8 và im2uint16. Tuy nhiên, khi thực hiện chuyển kiểu giữa các dữ liệu ảnh cần lưu ý một sốđiều sau:
* Khi chuyển từ một kiểu dữ liệu dùng nhiều bit sang một kiểu dữ liệu dùng ít bit hơn thì một số thơng tin chi tiết về bức ảnh ban đầu sẽ bị mất.
* Khơng phải lúc nào cũng cĩ thể chuyển đổi kiểu dữ liệu đối với kiểu ảnh indexed, vì các giá trị của ma trận ảnh xác định một địa chỉ trong bản đồ màu chứ khơng phải là giá trị màu, do đĩ khơng thể lượng tử hĩa được.
Hàm Ý nghĩa
gray2ind Tạo ảnh index từảnh gray(ảnh xám).
ind2gray Tạo ảnh xám từảnh index.
rgb2gray Tạo ảnh xám từảnh màu.
rgb2ind Tạo ảnh nhị phân từảnh màu.
Bảng 3.1: Chuyển đổi giữa các kiểu ảnh.
c). Cách hàm hiển thị ảnh trong Matlab
Matlab cung cấp hai hàm hiển thị cơ bản là image và imagesc. Ngồi ra cịn cĩ hai hàm hiển thị ảnh khác, đĩ là imview và imshow.
* Hàm image(X,Y,C) hiển thị hình ảnh biểu diễn bởi ma trận C kích thước M x N lên trục tọa độ hiện hành. X, Y là các vector xác định vị trí các pixel C(1,1) và C(M,N) trong hệ trục hiện hành.
* Hàm imagesc cĩ chức năng tương tự như hàm image, ngoại trừ việc dữ liệu ảnh sẽđược co giãn để sử dụng tồn bộ bản đồ màu hiện hành.
- TrangTrangTrangTrang 67676767 -
* Hàm imview cho phép hiển thị hình ảnh trên một cửa sổ riêng, nền Java, gọi là image Viewer. Image Viewer cung cấp các cơng cụ dị tìm và xác định các giá trị pixel một cách linh hoạt.
* Hàm imshow cũng tạo một đối tượng đồ họa thuộc loại image và hiển thị ảnh trên một figure. Hàm imshow sẽ tựđộng thiết lập các giá trị của các đối tượng image, axes và figure để thể hiện hình ảnh.
3.1.6. Phân tích thành phần chính PCA
3.1.6.1. Sơ lược về phân tích thành phần chính PCA
Phân tích thành phần chính (Principal Component Analysis - PCA) được trình bày theo nhiều quan điểm khác nhau. Với các nhà thống kê cổ điển thì PCA là tìm các trục chính của ellipsoid nhiều chiều bao hàm đám mây số liệu phân phối chuẩn nhiều chiều, các trục đĩ được ước lượng từ một mẫu n cá thể, trên mỗi cá thể người ta đo p chỉ tiêu. Người đầu tiên đưa ra kỹ thuật này là H.Hotelling (1933), sau đĩ là T.W.Anderson (1958) và A.M.Kshirsagar (1972).
Với các nhà nhân tố học cổđiển thì kỹ thật này là phương pháp phân tích nhân tố trong trường hợp đặc biệt, khi các phương sai này bằng khơng hoặc xấp xỉ bằng khơng. Phương pháp này thường được sử dụng trong phân tích tâm lý, do Horst (1965) và Harman (1966) đề xuất. Sau cùng, theo quan điểm phổ biến hơn cả của các nhà phân tích số liệu thì PCA là một kỹ thuật biểu diễn các số liệu một cách tối ưu theo một tiêu chuẩn đại số và hình học đặc biệt. khi sử dụng kỹ thuật này người ta khơng địi hỏi một giả thuyết thống kê hoặc một mơ hình đặc biệt nào. Quan điểm này trở nên phổ biến từ khi cĩ máy tính điện tử, và là quan điểm mới nhất. Những tư tưởng của phương pháp này do K.Pearson (1901) đề xuất. Trong