Tutorial Matlab
Tutorial Matlab
Tutorial Matlab
Prof. F. G. B. De Natale
Autori:
Cristina Costa, Nicola Conci, Nicola Piotto
Revisioni:
02-05-2006 Nicola Conci ([email protected])
07-05-2007 Nicola Conci ([email protected])
01-04-2008 Nicola Piotto ([email protected])
15-03-2010 Mattia Daldoss([email protected])
Sommario
1. Introduzione .................................................................................................................. 3
Ambiente di lavoro ......................................................................................................... 3
Nota:................................................................................................................................. 4
2. Le variabili in Matllab: ................................................................................................... 4
Creazione di variabili: scalari ........................................................................................ 5
Creazione di variabili: vettori ........................................................................................ 5
Creazione di variabili: matrici ....................................................................................... 6
3. Ancora sulla matrici ...................................................................................................... 7
Generazione di matrici ................................................................................................... 8
4 Proprietà delle matrici ................................................................................................... 9
5 Operazioni e funzioni elementari ................................................................................ 11
6 Operazioni di controllo ................................................................................................ 16
If then else .................................................................................................................... 16
for .................................................................................................................................. 16
while .............................................................................................................................. 17
switch ............................................................................................................................ 17
7 m file ........................................................................................................................... 17
Script ............................................................................................................................. 18
Funzioni ........................................................................................................................ 18
8 Image processing toolbox ........................................................................................... 19
Lettura di un’immagine ................................................................................................ 19
Visualizzazione di un’immagine .................................................................................. 19
Salvataggio di un’immagine ........................................................................................ 20
Generazione di un’immagine ...................................................................................... 20
9 Esercitazione riepilogativa .......................................................................................... 21
1. Introduzione
Il nome MATLAB deriva da MATrix LABoratory, ed è stato sviluppato per essere utilizzato
nell’ambito della teoria delle matrici e dell’algebra lineare.
Matlab è un linguaggio di programmazione potente, così come un ambiente
computazionale interattivo. Comandi e programmi vengono interpretati e non compilati.
Ambiente di lavoro
Lanciando il programma si ottiene la seguente schermata:
Variabili in
memoria
Browser Finestra
directory di dei comandi
lavoro (File .m)
Nota:
Per cancellare la schermata nella Command Window usare il comando:
>> clc
2. Le variabili in Matllab:
In Matlab, tutte le variabili sono espresse come matrici:
• matrici 1 x 1 cioè SCALARI
• matrici 1 x n cioè VETTORI RIGA
• matrici n x 1 cioè VETTORI COLONNA
• matrici n x m nel senso classico della parola
NB: In MatLab gli indici delle matrici e dei vettori partono da 1, non da 0 come in C/C++.
- Vettore colonna:
>> c = [1; 2; 3; 4; 5; 6; 7];
Per quanto riguarda l’introduzione di vettori di grandi dimensioni, può essere utile
osservare che per continuare un’istruzione su una linea successiva dello schermo si
usano tre punti:
>> d=[2 3 8 9 ...
7 8 2 1];
equivalente a:
>> d=[2 3 8 9 7 8 2 1];
2 3
2 5
8 5
1 2 4
2 5 6
Generazione di matrici
Matlab fornisce quattro funzioni per generare le matrici base:
♦ zeros(N,M), genera una matrice NxM con tutti i coeff a 0
♦ ones(N,M), genera una matrice NxM con tutti i coeff a 1
♦ rand(N,M), genera una matrice NxM i cui valori sono numeri casuali distribuiti
uniformenente nell’intervallo [0.0,1.0]
♦ randn(N,M), genera una matrice NxM i cui valori sono numeri casuali con
distribuzione normale (gaussiana) con media 0 e varianza 1.
♦ per altre distribuzioni utilizzare la funzione random.
Esempi:
>> A = ones(2,3)
>> B = rand(3,3)
Concatenazione di matrici
E’ possibile concatenare matrici e/o vettori. Infatti, il comando
>> A=[1 2 3; 4 5 6; 7 8 9]
Se B è una matrice NxM, max(B) restituisce un vettore riga 1xM che riporta i valori
massimi di ogni colonna di B, e min(B) restituisce un vettore riga 1xM che riporta i valori
più bassi.
>> max(B)
ans =
7 9 8 19
>> max(max(B))
ans =
19
>> min(B)
ans =
3 1 2 10
>> min(min(B))
ans =
1
Nota:
>> [v r]= min(B)
v =
3 1 2 10
r =
2 1 1 3
Con questa notazione la funzione min ritorna nel vettore v i valori minimi delle colonne, e
nel vettore r gli indici di riga corrispondenti ai valori trovati. Lo stesso vale per la funzione
max.
Matrice trasposta
La matrice trasposta si ottiene con l’operatore ‘'’, per esempio:
>> C=B'
C =
5 3 7
1 9 6
2 4 8
14 19 10
♦ Operatori: somma (+), sottrazione (-), divisione (/), moltiplicazione (*), potenza (^),
ecc… (per una lista completa degli operatori in Matlab digitare: help +)
♦ Funzioni: seno (sin), esponenziale (exp), radice quadra (sqrt), ecc.
Nota: le operazioni +, -, /, *, ^, non possono essere usate con variabili di tipo intero (uint,
uint16, ecc.) nelle versioni piu’ vecchie di Matlab.
Datatypes
I datatypes più comuni sono:
Intero ad 8 bit: uint8 (1byte)
Intero ad 16 bit: uint16 (2byte)
Doppia precisione: double (8byte)
Carattere: char (1byte)
Per convertire da un tipo all’altro utilizzare le funzioni:
uint8()
uint16()
double()
E’ possibile, mediante l’operatore .*, eseguire una moltiplicazione puntuale tra elementi
corrispondenti di due vettori o matrici di uguali dimensioni:
Nota: l’utilizzo di operazioni puntuali è utile per evitare l’utilizzo di loop. Per esempio:
>> v1=[1 2 3];
>> v2=[1 3 4];
>> v1.*v2
ans =
1 6 12
Quando invece si moltiplica un vettore v per uno scalare a, la distinzione tra gli operatori
* e .* decade: in entrambi i casi ciascun elemento del vettore risultante è pari al
corrispondente elemento del vettore v moltiplicato per a:
>> v=[1 2 3];
>> a=2;
a*v = a.*v
Divisione
L’operatore / ha il significato di divisione tra matrici. Due vettori v1 e v2 di uguale
dimensione possono essere divisi tra loro, ma il risultato è uno scalare e non un vettore in
cui ciascun elemento è pari alla divisione tra i corrispondenti elementi di v1 e v2. Tra due
matrici A e B è definita l’operazione di divisione A/B solo se A e B hanno lo stesso
numero di colonne. Si tenga presente il messaggio di errore che MATLAB restituisce se si
tenta di eseguire la divisione tra matrici le cui dimensioni non lo consentono:
Matrix dimensions must agree.
Quando A è invertibile, l’espressioni B/A corrisponde formalmente alla moltiplicazione a
destra di B per l'inversa di A, cioé B*inv(A), evitando però il calcolo esplicito dell'inversa.
In generale X = A/B è una soluzione del sistema X*A=B.
Elevazione a potenza
L’operatore ^ seguito da un numero ha la funzione di elevazione a potenza. Per esempio
digitando A^2 si ottiene il quadrato della matrice A, nel senso che la matrice viene
moltiplicata per sé stessa con l’operazione di prodotto tra matrici.
Per maggiori informazioni: help mpower
Un vettore v non può essere elevato a potenza.
E’ possibile però, mediante l’operatore .^, ottenere un vettore in cui ciascun elemento sia
pari al corrispondente elemento di v elevato alla potenza indicata:
>> v=[1 2 3];
Funzioni elementari
Quella che segue è una lista delle più comuni funzioni elementari utilizzabili in Matlab. Si
intende che ciascuno degli operatori elencati, se applicato ad una matrice, un vettore o
uno scalare, applica la funzione considerata a ciascuno degli elementi dell’operando.
L’operando deve sempre essere racchiuso tra parentesi tonde, come per esempio:
>> sqrt(3)
Utilizza il comando help per avere una descrizione completa delle funzioni:
>> help sqrt
Per maggiori informazioni sugli operatori relazionali e logici in Matlab: help relop
If then else
k=1; l=3;
if k==l
A(k,l)= 2;
elseif abs(k-l) == 1
A(k,l) = -1;
else
A(k,l) = 0;
end
for
N=5;
for k = 1:N
for l = 1:N
A(k,l) = 1/(k+l-1);
end
end
Nota: Il comando break può essere utilizzato per terminare prematuramente il ciclo.
switch
Esempio:
colore = 'Rosso';
switch lower(colore)
case {'rosso','rosa'}
disp('Toni rossi')
case {'blu', 'azzurro'}
disp('Toni freddi')
otherwise
disp('Colore sconosciuto.')
end
7 m file
I file che contengono codice Matlab sono chiamati m-file. Essi hanno estensione .m e
possono essere usati come un comando o una funzione Matlab. Sono normali file di testo
e possono essere creati usando un qualsiasi editor di testo, o l’editor interno di Matlab (dal
menù di Matlab: FileNewM-file).
Ci sono due generi di M-file:
1- Script che non accettano argomenti d'entrata o argomenti di uscita e operano su
dati nel workspace.
2- Funzioni che possono accettare argomenti d'entrata e argomenti di uscita. Le
variabili interne sono locali.
Script
Gli script possono contenere qualunque comando, così come digitati nella finestra
Command Window.
♦ Per creare un m-file, scegliere New dal menu File e selezionare M-file; questa
procedura apre una finestra di un editor di testo nella quale è possibile immettere i
comandi del Matlab.
♦ Salvare l’m-file con estensione .m.
Il file, che verra’ salvato all’interno della directory corrente potra’ essere richiamato dalla
riga di comando o da qualsiasi altro file .m digitando semplicemente il nome del file (senza
estensione).
Funzioni
Le Funzioni sono M-file che possono accettare argomenti in ingresso e forniscono risultati
di uscita.
Il nome dell'M-file e della funzione deve essere lo stesso.
Le variabili usate all'interno della funzione sono locali. Infatti, le funzioni operano su
variabili definite nel proprio Workspace, che è separato dal Workspace a cui si accede
all'ingresso di Matlab:.
Alla nuova funzione deve essere assegnato un nome ed un'estensione '.m'.
La prima riga della funzione riporta la parola chiave function seguita dalle variabili di
uscita, il nome della funzione e le variabili in ingresso, con la seguente sintassi:
function [out1,out2] = function_name(in1,in2,in3)
Esempio:
Un esempio di funzione è la funzione di Matlab mean, che effettua la media dei valori di un
vettore.
Visualizza l’help:
>> help mean
Visualizza la funzione:
Nota: molti dei comandi di Matlab rappresentano delle funzioni: quando un comando
come roots, plot, step viene immesso in Matlab, in realtà viene fatto eseguire
tipicamente un m-file. Questi tipi di file sono simili ad un sottoprogramma di un linguaggio
di programmazione, in quanto essi hanno degli ingressi (parametri che sono passati all'm-
file), delle uscite (valori che ritornano dall'm-file), e un corpo di comandi che possono
contenere variabili locali.
Lettura di un’immagine
Il Toolbox fornisce alcune immagini di test.
Per leggere un’immagine, si utilizza il commando imread:
>> I=imread('pout.tif');
L’immagine ‘pout’ è infatti un’immagine a livelli di grigio a 8bit per pixel, per cui viene
salvata automaticamente in un array di tipo uint8, ed i livelli di grigio vengono espressi in
valori da 0 a 255.
Matlab è in grado di salvare immagini in memoria in matrici di tipo uint8, uint16 o
double.
Nota: Nel caso di una immagine salvata in una matrice di tipo double, si assume che i
valori siano normalizzati, ovvero compresi tra 0 ed 1.
Visualizzazione di un’immagine
L’immagine salvata in I può essere visualizzata utilizzando il comando imshow
>> imshow(I)
DISI – Universita’ degli Studi di Trento 19
Laboratorio di Elaborazione e Trasmissione delle Immagini
(F. De Natale – N. Conci – N. Piotto – M.Daldoss)
Nota: è anche possibile visualizzare l’immagine contenuta in un file, senza utilizzare la
matrice I:
>> imshow ('pout.tif');
Attenzione!
L’immagine in input può essere di tipo:
uint8, uint16, o double.
Se erroneamente un’immagine rappresentata da valori interi compresi tra 0 e 255 viene
salvata in un array di tipo double, imshow visualizzerà un’immagine bianca. Questo
perché quando imshow riceve come ingresso una matrice di tipo double, si aspetta una
matrice normalizzata, con valori compresi tra 0 e1, ponendo a 1 tutti i valori superiori a 1,
ed a 0 tutti i valori inferiori a 0.
Per verificare quanto detto, convertiamo la matrice I da uint8 in double con la funzione
di Matlab double():
>> I1=double(I)
>> imshow(I1)
Salvataggio di un’immagine
E’ possibile salvare un’immagine in diversi formati, utilizzando il comando imwrite:
>> imwrite(I1,’pippo.jpg’)
Generazione di un’immagine
– Quadrato bianco (100x100 pix)
– Immagine Random
– Seno
– Circonferenza
9 Esercitazione riepilogativa
Obiettivo: creare una funzione in grado di generare una matrice di dimensioni MxN con
distribuzione random. La funzione restituira’ la matrice di ingresso sottocampionata di un
fattore fac scelto arbitrariamente.
La funzione provvedera’ a suddividere l’immagine in blocchi di dimensione quadrata pari al
fattore di sottocampionamento.
Per ogni blocco verra’ calcolato il valor medio per mezzo di una seconda funzione
dichiarata internamente allo stesso file .m
La funzione originale provvedera’ a restituire due variabili contenenti il tempo di
elaborazione e la matrice sottocampionata.
function [val]=calcola_media(m)
% calcola la media di una matrice
val=mean2(m);