Tải bản đầy đủ - 0 (trang)
Chương 3 PHẦN MỀM ỨNG DỤNG

Chương 3 PHẦN MỀM ỨNG DỤNG

Tải bản đầy đủ - 0trang

Matlab cùng bộ cơng cụ rất mạnh của nó cho phép giải quyết các bài toán

khác nhau đặc biệt là hệ phương trình tuyến tính, phi tuyến hay các bài tốn ma trận

với kết quả nhanh chóng và chính xác. Bộ lệnh này lên tới hàng ngàn và ngày càng

được mở rộng thông qua các hàm ứng dụng được tạo lập bởi người sử dụng hay

thông qua thư viện trợ giúp.

Bên cạnh đó, Matlab cho phép xử lý dữ liệu, biểu diễn đồ họa một cách mềm

dẻo, đơn giản và chính xác trong khơng gian hai chiều cũng như ba chiều, giúp

người sử dụng có thể quan sát kết quả một cách trực quan và đưa ra giải pháp tốt

nhất. Được tích hợp một số ngơn ngữ lập trình thơng dụng như C, C++, Fortran,

Java… do đó những ứng dụng của Matlab có thể được chuyển đổi một cách dễ

dàng, mềm dẻo sang những ngơn ngữ đó.

Trong lĩnh vực xử lý ảnh số, Matlab được xem là một công cụ rất mạnh trong

thời gian qua. Hiện nay, ở Việt Nam và trên thể giới đã có nhiều ứng dụng từ việc

xử lý ảnh với Matlab như: Các hệ thống giữ xe tự động, nhận diện khuôn mặt…

Phiên bản mới nhất tính đến tháng 3/2014 là bảng R2014a (8.3).

III.1.2. Các thành phần cơ bản của Matlab.

Phần này trình bày các yếu tố cơ bản của Matlab gồm: Môi trường làm việc,

các kiểu dữ liệu và sự hoạt động của các dòng lệnh.

III.1.2.1. Môi trường làm việc.

Môi trường làm việc của Matlab bao gồm:

 Matlab Desktop: thông thường gồm 5 của sổ chính: Command Window,

Workspace Browser, Current Directory Window, Command History Window

và một hoặc nhiều Figure Window – để hiển thị hình ảnh hoặc đồ thị.

 Matlab Editor: Dùng để tạo và chỉnh sửa các M-files. Bao gồm các hàm để

lưu, xem và sửa lỗi các M-files.

 Help System: Là cửa sổ trợ giúp được hiển thị dưới dạng trình duyệt HTML,

bao gồm các chức năng tìm kiếm và trợ giúp.



32



Hình 3.2: Cửa sổ làm việc

III.1.2.2. Kiểu dữ liệu.

Matlab hổ trợ các kiểu dữ liệu được liệt kê ở Bảng 3.1. Tám kiểu dữ liệu đầu

trong bảng là kiểu số. Trong Matlab kiểu dữ liệu mặt định là Double cho kiểu số. Có

thể chuyển đổi giữa các kiểu dữ liệu trong Matlab. Một chuổi (string) trong Matlab

đơn giản là một mảng 1x n ký tự.

Bảng 3.1: Các kiểu dữ liệu của Matlbab.

Kiểu dữ

liệu

unit8

unit16

unit32

int8

int16

int32

single

double

logical

char



Diễn tả

8-Bit số nguyên không dấu (1byte cho mỗi phần tử)

16-Bit số nguyên không dấu (2byte cho mỗi phần tử)

32-Bit số nguyên không dấu (4byte cho mỗi phần tử)

8-Bit số nguyên có dấu (1byte cho mỗi phần tử)

16-Bit số nguyên có dấu (2byte cho mỗi phần tử)

32-Bit số nguyên có dấu (4byte cho mỗi phần tử)

Số thập phân với độ chính xác đơn (4byte cho mỗi phần tử)

Số thập phân với độ chính xác kép (8byte cho mỗi phần tử)

Kiểu logic có giá trị 0 (fales) hoặc 1 (true) (1byte cho mỗi phần tử)

Kiểu ký tự (2byte cho mỗi phần tử)



33



III.1.2.3. Mảng và ma trận.

Một trong những điểm mạnh của Matlab là khả năng xử lý một tập số được

sặp xếp theo một thứ tự nào đó (gọi là mảng) như là một biết đơn (single variable).

Khả năng này làm cho chương trình viết bằng Matlab rất gọn và dễ hiểu. Mảng là

một đối tượng cơ sở của Matlab.

3.2.3.1. Mảng một chiều: Véc tơ

Mảng kiểu dòng (Véc tơ dòng): Các phần tử được ngăn cách bằng khoảng

trắng hoặc dấu phẩy hoặc cả hai cho dễ nhìn. Tất cả các phần tử được đặt trong dấu

ngoặc vuông [ ]. Matlab hiển thị véc tơ dòng theo hàng ngang.

Mảng kiểu cột (Véc tơ cột): Các phần tử được ngăn cách bằng dấu chẩm

phẩy (;). Matlab hiển thị véc tơ cột theo phương dọc.

Mảng có các phần từ cách đều: Khi muốn khai báo một mảng có các phần tử

cách đều theo số gia q: Tên_mảng = [phần tử đầu: số gia q: phần tử cuối].

3.2.3.2. Mảng hai chiều: Ma trận

Một mảng trong Matlab có thể có nhiều dòng, nhiều cột. Một mảng hai chiều

như vậy được gọi là ma trận.

Một ma trận có kích thước m x n, chính là một mảng có n dòng, m cột.

Các véc tơ được Matlab xem là các mảng hai chiều đặc biệt: chúng có kích

thước 1 x n (véc tơ dòng) hoặc m x 1 (véc tơ cột). Matlab xếp véc tơ và ma trận vào

lớp double array trong workspace.

Có thể chỉnh sửa các phần tử của ma trận bằng cú pháp:

open(‘ten_ma_tran’).

3.2.3.3. Các hàm thông dụng đối với đối số là mảng.

 Hàm size(X): trả về một véc tơ dòng [m n] chứa kích thước của mảng X

có m dòng, n cột.

 Hàm length(X): trong đó X là một ma trận, sẽ trả về số dòng hoặc số cột

lớn nhất.

 Hàm max(X) :

o Nếu X là một véc tơ, sẽ trả về phần tử lớn nhất trong X.



34



o Nếu X là một ma trận, sẽ trả về một véc tơ dòng chứa các phần tử lớn

nhất trong mỗi cột.

 Hàm min(X) : tương tự hàm max(X) nhưng sẽ trả về phần tử bé nhất.

 Hàm sum(X) : tính tổng các phần tử trong từng cột của ma trận X, kết quả

chứa trong một véc tơ dòng.

 Hàm sort(X) : sắp xếp mỗi phần tử của ma trận X theo thứ tự tăng dần từ

dòng 1 đến dòng cuối, kết quả là một ma trận cùng kích thước với X.

 Lệnh [x, k] = max(X): tương tự max(X) nhưng giá trị của phần tử

lớn nhất được lưu trong véc tơ dòng x, và các chỉ số tương ứng được lưu

trong véc tơ dòng k.

 Lệnh [u, v, w] = find(X) : tìm những phần tử khác 0 của ma trận X,

véc tơ u chứa chỉ số dòng, v chứa chỉ số cột của những phần tử khác 0, véc tơ

w chứa các phần tử khác 0 của X.

3.2.3.4. Mảng nhiều chiều.

Một mảng ba chiều sẽ có kích thước m x n x q, một mảng bốn chiều sẽ có

kích thước m x n x q x p… . Hai chiều đầu tiên là dòng và cột, còn các chiều lớn

hơn được gọi là trang. Để truy xuất tất cả các phần tử ở trang 2 của mảng X, dùng

cú pháp: X(:, :, 2).

Hàm ndims( ) sẽ trả về số chiều của một mảng.

III.1.2.4. Chỉ số mảng và ma trận trong Matlab.

Các phần tử của mảng (ma trận và véc tơ) được đánh chỉ số bắt đầu từ 1. Do

đó, a(1) là cú pháp để gọi phần tử dầu tiên của mảng một chiều a, f(1,1) là cú pháp

để gọi phần tử đầu tiên của mảng hai chiều f, chẳng hạn như các điểm ảnh bên trái

của một ảnh đơn sắc f.

Matlab không giới hạn số chiều của mảng, nhưng có một giới hạn trong số

phần tử của mảng. Và giá trị giới hạn đó phụ thuộc vào máy tính và phiên bản

Matlab đang sử dụng. Để kiểm tra, sử dụng cú pháp:

>> [c, maxsize] = computer

III.1.2.5. Các mảng chuẩn

Matlab có một vài mảng tiêu chuẩn được xây dựng sẳn:



35

















zeros(m,n) tạo ra một ma trận mxn phần tử 0.

ones(m,n) tạo ra một ma trân mxn phần tử 1.

true(m,n) tạo ra một ma trận mxn phẩn tử logic 1.

fales(m,n) tạo ra một ma trận mxn phẩn tử logic 0.

eye(n) trả về một ma trận đơn vị nxn.

magic(m) trả về một ma trận vng có tổng các phần tử trên một hàng,



một cột hoặc trên đường chéo bằng nhau.

 rand(m,n) tạo một ma trận mxn mà các phần tử là các giá trị ngẫu nhiên

nằm trong đoạn [0,1].

III.1.2.6. Các cơng cụ lập trình: Scrip và Function

Chúng ta có thể tính tốn và lập trình trong Matlab bằng hai cách: 1-Vào các

lệnh trực tiếp trên cửa sổ lệnh, đây là chế độ tương tác. 2-Chạy một chương trình

Matlab, gồm các dòng lệnh được soạn trước trong một tập tin lệnh (script file).

Chế độ tương tác chỉ thích hợp với những bài tốn nhỏ, với những bài tồn

phức tạp và các lệnh lặp đi lặp lại nhiều lần thì nên dùng cách 2. Chính là phương

thức viết và lưu các chương trình Matlab trong những tập tin có phần đi dạng .m,

được gọi là các M-Files.

a) M-Files.

M-files trong Matlab có thể là Script-files (tập tin lệnh) để thực hiện một loạt

các lệnh hoặc các tập lệnh của Matlab hoặc là Function-liles (tập tin hàm) để nhận

đối số và xuất ra một hoặc nhiều giá trị.

Khi M-files là một Script, nó bao gồm một chuỗi các lệnh được phiên dịch

và thực hiện. Ngồi ra, chúng còn chứa các hàm dựng sẵn của Matlab hoặc các hàm

do người dùng tạo ra. Để tạo một M-files có nhiều cách : 1)gõ lệnh edit trong cửa sổ

lệnh. 2) Từ cửa sổ lệnh nhấn tổ hộp phím Ctrl+N. 3) Nhấn vào biểu tượng New

Script. 4)Menu NewScript. Sau khi soạn thảo xong, lưu thành files có phần mở

rộng là .m. Để chạy một M-files chỉ cần vào folder chứa M-files và gõ tên M-file

vào cửa sổ lênh.

Khi M-file là một Function-files, sẽ có dạng :

Function [outputs] = function_name(inputs)



36



Từ khóa Function là yêu cầu bắt buộc. Các đối số đầu ra được kèm theo

trong dấu ngoặc vuông trong khi các tham số đầu vào được đặt trong dấu ngoặc

đơn. Nếu Function không trả về bất kỳ một giá trị nào thì khơng cần các dấu ngoặc

và dấu bằng, chỉ cần tên hàm. Tên hàm phải bắt đầu bởi một ký tự chữ và khơng

được có khoảng trắng, độ dài tối đa là 63 ký tự.

b) Các toán tử.

Toán tử trong Matlab có thể được nhóm thành 3 nhóm chính :

 Tốn tử số học (Arithmetic Operators): Thực hiện các tính tốn số trên ma

trận.

 Tốn tử quan hệ (Relational Operators): So sánh các toán hạng.

Các hàm số học bổ sung:

Tên hàm

iabsdiff

imadd

imcomplement

imdivide

imlincom

immultyply



Mô tả

Sai phân tuyệt đối hai ảnh

Cộng hai ảnh hoặc cộng ảnh với hằng số

Bù ảnh

Chia hai ảnh hoặc chia ảnh cho hằng số

Tổ hợp tuyến tính các ảnh

Nhân hai ảnh hoặc nhân ảnh với hằng

số

imsubtract

Trừ hai ảnh hoặc trừ ảnh với hằng số

 Toán tử logic (Logical Operators): Thực hiện các chức năng logic.

Hàm

xor

all

any



Diễn tả

Còn gọi là OR có loại trừ. Thực hiện tính tốn với hai toán hạn. Trả về 1

nếu chỉ một trong hai phần tử của toán hạn là 1, ngược lại, trả về 0.

Kiểm tra vector hay ma trận có giá trị 0 hay không. Trả về 1 nếu tất cả

các phần tử trong véc tơ khác 0, ngược lại, trả về 0.

Kiểm tra véc tơ hay ma trận có giá trị khác 0 hay khơng. Trả về giá trị 1

nếu có 1 phần tử bằng khác, ngược lại, trả về 0.



c) Các biến và hằng quan trọng.

Hàm

ans

eps

i (hoặc j)

Inf



Giá trị trả về

(answer) Biến tạm chứa kết quả gần nhất sau cùng nhất.

Số nhỏ nhất khi cộng vào 1 sẽ cho một số lớn hơn 1. Độ

chính xác của dấu chấm động.

Đơn vị ảo ().

Vơ cùng lớn (Ví dụ 5/0).



37



NaN (hoặc nan)

d) Biểu diễn số.



Kết quả số khơng xác định.



Matlab có thể biểu diễn số dưới hai dạng, dạng thông thường và dạng khoa

học. Trong dạng khoa học thường dùng ký tự e để biểu diễn một số nhân với công

bội của 10. Số phức thường được biểu diễn bằng hai ký tự i và j.

e) Cấu trúc điều khiển.

Ngơn ngữ lập trình Matlab cung cấp những cấu trúc điều khiển thông thường

như những ngơn ngữ lập trình cấp cao khác đó là:

Cấu trúc điều kiện IF (với tùy chọn ELSE và ELSEIF) :

if biểu thức logic 1

Lệnh hoặc nhóm lệnh 1

elseif biểu thức logic 2

Lệnh hoặc nhóm lệnh 2

else

Lệnh hoặc nhóm lệnh 3

end

Cấu trúc lựa chọn SWITCH :

switch biểu thức đầu vào %vơ hướng hoặc chuổi

ký tự

case giá trị 1

nhóm lệnh 1

case giá trị 2

nhóm lệnh 2



case giá trị n

nhóm lệnh n

otherwise

nhóm lệnh n+1

end

Chú ý: Trong cấu trúc này, chỉ có một nhóm lệnh được thi hành.



38



Cấu trúc vòng lặp FOR và WHILE và các câu lệnh liên quan (BREAK và

CONTINUE):

-



-



Vòng lặp FOR: Được sử dụng khi số lần lặp lại được biết trước.

for n = array (một mảng bất kỳ, không nhất thiết phải là số tự nhiên)

Lệnh hoặc nhóm lệnh

end

Vòng lặp WHILE: Được sử dụng khi số lần lặp không biết trước, quá trình

lặp sẽ chấm dứt khi một điều kiện xác định nào đó được thoả.

while biểu thức logic (biểu thức khiểm tra thực hiện vòng lặp)

Lệnh hoặc nhóm lệnh

end

Lệnh BREAK cho phép chấm dứt sớm vòng lặp FOR hoặc WHILE khi thoả



một điều kiện nào đó bên trong vòng lặp.

Chú ý: Trong cấu trúc vòng lặp while, nhất thiết phải có một lệnh làm thay

đổi giá trị biểu thức kiểm tra sau một số lần hữu hạn vòng lặp được thực thi, nếu

khơng sẽ rơi vào vòng lặp vơ hạn, chương trình khơng kết thúc được. Để chấm dứt

chương trình Matlab khi rơi vào vòng lặp vơ hạn, ta nhấn cặp phím Ctrl+C.

Cấu trúc ngoại lê TRY … CATCH :

try

Lệnh hoặc nhóm lệnh

catch ngoại trừ

Lệnh hoặc nhóm lệnh

end

f) Input và Output

Chức năng xuất nhập cơ bản nhất của được thực hiền bằng các hàm INPUT

và DISP. Ngoài ra, Matlab còn hổ trợ rất nhiều hàm xuất nhập khác tùy thuộc vào

từng ứng dụng cụ thể.

III.1.3. Malab GUI

Matlab GUI là giao diện hình ảnh của chương trình, chúng bao gồm các nút

bấm, các thanh trượt, các cửa sổ, menu… được sử dụng để cung cấp cho người

dùng một môi trường làm việc đơn giản và thuận tiện.



39



Để bắt đầu, sử dụng lệnh

>> guide



-



Hình 3.3: Của sổ GUIDE Quick Start.

Blank GUI (Default): Hộp hội thoại GUI trống, khơng có một điều khiển



-



nào.

GUI with Uicontrols: Hộp hội thoại GUI với một vài điều khiển, chương



-



trình có thể chạy ngay.

GUI with Axes Menu: Hộp hội thoại GUI với một uicontrol axs và button,



-



các menu để hiển thị đồ thị.

Modal Question Dialog: Hộp hội thoại đặt câu hỏi Yes, No.

Để thực thi một chương trình GUI, phải bao gồm hai tập tin:



-



Tập tin có phần mở rộng .fig chứa nội dung giao diện.

Tập tin có phần mở rộng .m chứa những đoạn mã liên quan đến giao diện.

Trong phần menu, quan trọng nhất là munu Tools:



-



Run (Ctrl+T) : Chạy chương trình đã viết.

Align Object : Canh dọc các điều khiển.

Grid and Rulers: Hiển thị lưới trợ giúp để vẽ giao diện.

Menu Editor: Tạo menu cho điều khiển.

Gui Options: tuỳ chỉnh khác.



40



Hình 3.4: Cửa sổ tương tác.

III.1.4. Phân đoạn và tách đường viền trong Malab.

Ý tưởng tổng quát cho việc phân đoàn và tách đường viền đều xuất phát từ

những ứng dụng thực tế. Chẳng hạn như trong truyền hình hay cơng nghệ mắt nhìn

nhân tạo. Việc xử lý và truyền dẫn một lượng rất lơn các dữ liệu hình ảnh từ nhiều

kênh, nhiều chiều là rất phức tạp. Để đáp ứng thực tế đó, cần phải giảm bớt dữ liệu

trong từng hình ảnh. Chỉ dữ lại những thông tin quan trọng đáp ứng nhu cầu mà

người sử dụng quan tâm nhưng không làm sai lệch hay thay đổi thơng tin. Mục đích

của việc phân đoạn và tách đường bao là trích ra những vùng ở trong ảnh, tức là

chia ảnh thành những vùng được biểu thị bằng giá trị của các pixel chung nhất.

Chẳng hạn như chúng có cùng độ sang, cùng màu sắc.

Một trong những phương pháp đơn giản nhất để thực hiện phân đoạn và tách

đường viền là kỹ thuật lập hồnh đồ (histogramming) và đặt ngưỡng (thresholding).

Vì hồnh đồ của một ảnh đặc trưng cho mật độ xác suất xuất hiện của giá trị mức

xám xác định. Các ảnh thì được tạo thành bởi các đối tượng sáng trên một nền tối,

vì tách ảnh tức là trích các đối tượng sáng ra. Với một ảnh như vậy thì hồnh đồ của

nó ln có hai đỉnh cực đại và một chỗ lõm giữa hai cực đại đó. Sau khi vẽ được



41



hồnh đồ của ảnh, thì bước tiếp theo là chọn giá trị ngưỡng để trích ra giá trị đỉnh

và các giá trị mức xám của nền. Với cách làm này thì giá trị ngưỡng ít nhất cũng

bằng giá trị các mức xám của vùng lõm giữa các đỉnh của hoành đồ của ảnh gốc.

Bước tiếp theo là đánh dấu chỉ số cho các pixels có giá trị mức xám lớn hơn giá trị

ngưỡng như là các pixels của đối tượng, còn các pixels có giá trị nhỏ hơn ngưỡng là

các pixel của ảnh nền.

Phương pháp phân đoạn ảnh và tách các đường viền được tập hợp thành hai

loại chính. Đó là phương pháp dựa trên sự lấy ngưỡng các pixels và phương pháp

dựa trên sự biến đổi, trong đó có hai phép biến đổi quan trong là biến đổi Hough và

biến đổi Watershed. [13]

Trong Matlab, để tính ngưỡng tồn cục (Th) cho một ảnh, dụng hàm

graythresh. Hàm này có cú pháp: Th = graythresh(f)

Đầu tiên graythresh tính hồnh đồ của ảnh f, sau đó mới tính giá trị ngưỡng

Th. Giá trị ngưỡng Th được chuẩn hoá trong vùng từ 0 đến 1.

Và việc tách đường viền được thực hiện nhờ hàm edge với cú pháp:

[BW,th] = edge(f, ‘mask’, parameters)

Trong đó BW là ảnh nhị phân lối ra, th là tham số chức năng, nó cho biết

ngưỡng được sử dụng để xác định sự sai khác về cường độ đủ mạnh để phát hiện

đường viền. BW là một mảng logic có giá trị 1 tại những nơi có đường viền và giá

trị 0 tại các nơi khác. f là ảnh cường độ lối vào, còn ‘mask’ là bộ lọc, ở đây có các

bộ lọc như: ‘Sobel’, ‘Prewitt’, ‘Roberts’, ‘Laplacian of Gausian (LoG)’, ‘Zero

Crossings’ và ‘Canny’. Trong đó phương pháp ‘Canny’ là phương pháp khá hiệu

quả. [13]

Ví dụ:

>> I = imread('C:\Users\HO VAN THU\Desktop\spkt.jpg');

>> BW = im2bw(I);

>> BW1 = edge(BW,'canny');

>> imshow(BW1)

Kết quả :



42



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Chương 3 PHẦN MỀM ỨNG DỤNG

Tải bản đầy đủ ngay(0 tr)

×