Corso di Visione Artificiale. Matlab per Visione. Samuel Rota Bulò



Documenti analoghi
MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

Introduzione al MATLAB c Parte 2

Lab. 1 - Introduzione a Matlab

Laboratorio di Matematica Computazionale A.A Lab. 1 - Introduzione a Matlab

Matlab: Strutture di Controllo. Informatica B

Finestre grafiche. >> figure >> figure(n)

Rapida Introduzione all uso del Matlab Ottobre 2002

4 3 4 = 4 x x x 10 0 aaa

Informatica. Rappresentazione dei numeri Numerazione binaria

2.1 Definizione di applicazione lineare. Siano V e W due spazi vettoriali su R. Un applicazione

Laboratorio Algoritmi 2014 Secondo Semestre

4. Operazioni elementari per righe e colonne

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

Introduzione allo Scilab Parte 1: numeri, variabili ed operatori elementari

Richiesta pagina PHP (es: index.php)

3. La sintassi di Java

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

A destra è delimitata dalla barra di scorrimento verticale, mentre in basso troviamo una riga complessa.

Introduzione al Linguaggio C

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Aritmetica dei Calcolatori 2

Appunti sull uso di matlab - I

Funzioni in C. Violetta Lonati

Dati importati/esportati

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

MATLAB (1) Introduzione e Operazioni con array

Variabili e tipi di dato

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

if t>=0 x=1; else x=0; end fornisce, nella variabile x, il valore della funzione gradino a tempi continui, calcolata in t.

Laboratorio di Informatica

Esame di Informatica CHE COS È UN FOGLIO ELETTRONICO CHE COS È UN FOGLIO ELETTRONICO CHE COS È UN FOGLIO ELETTRONICO. Facoltà di Scienze Motorie

Grafici tridimensionali

Introduzione al Python

12 Funzioni e Strutture con MATLAB

Un ripasso di aritmetica: Rappresentazione binaria - operazioni. riporti

Le variabili. Olga Scotti

FORMULE: Operatori matematici

Microsoft Excel. Il foglio elettronico Microsoft Excel Cartelle, Fogli di lavoro e celle Contenuto delle celle. Numeri, date, formule, testo, funzioni

Funzioni matlab per la gestione dei file. Informatica B Prof. Morzenti

Lezione 8. La macchina universale

Laboratorio di Matlab

Alcune regole di base per scrivere un programma in linguaggio C

Un ripasso di aritmetica: Conversione dalla base 10 alla base 16

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali

RICHIAMI SULLE MATRICI. Una matrice di m righe e n colonne è rappresentata come

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

8.9 CREARE UNA TABELLA PIVOT

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

DISPENSE. sull uso di GRASS e QGIS per l analisi del territorio

Linguaggio C - Stringhe

(71,1), (35,1), (17,1), (8,1), (4,0), (2,0), (1,0), (0,1) 0, = 1, 431 0, = 0, 862 0, = 1, 792 0, = 1, 448 0, = 0, 896

Fondamenti di Programmazione

Nell esempio verrà mostrato come creare un semplice documento in Excel per calcolare in modo automatico la rata di un mutuo a tasso fisso conoscendo

BOZZA Introduzione a MATLAB

CONTROLLI AUTOMATICI E AZIONAMENTI ELETTRICI Ingegneria Meccatronica

Lezione 9: Cambio di base

La grafica. La built-in funzione grafica plot. x spezzata poligonale. discretizzato

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

Introduzione al linguaggio C Gli array

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

22 Introduzione all uso di MatLab

Protezione. Protezione. Protezione. Obiettivi della protezione

Prof.ssa Paola Vicard

Università degli Studi di Ferrara - A.A. 2014/15 Dott. Valerio Muzzioli ORDINAMENTO DEI DATI

SISTEMI DI NUMERAZIONE E CODICI

Arduino: Programmazione

Interpolazione di immagini

Excel. Excel. Videata iniziale Fogli elettronici. Fogli elettronici. Come si inserisce un dato

L amministratore di dominio

Gestione dei File in C

Il seguente esempio ha lo scopo di illustrare i 3 tipi di relazione 1:1,1:N,N:N. Tabella Conto: Tabella Conto:

Metodi Stocastici per la Finanza

Introduzione alla programmazione in C

Parte 1. Vettori di bit - AA. 2012/13 1.1

Test Excel conoscenze di Base

APRIRE UN PROGRAMMA DI FOGLIO ELETTRONICO

Corso di Sistemi Operativi Ingegneria Elettronica e Informatica prof. Rocco Aversa. Raccolta prove scritte. Prova scritta

Struttura logica di un programma

MODULO 4: FOGLIO ELETTRONICO (EXCEL)

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C

WORD per WINDOWS95. Un word processor e` come una macchina da scrivere ma. con molte più funzioni. Il testo viene battuto sulla tastiera

Parte 2. Determinante e matrice inversa

ECDL - Database. European Computer Driving Licence - Modulo 5 - Database LEZIONE 2

Architettura degli Elaboratori I Esercitazione 1 - Rappresentazione dei numeri

PULSANTI E PAGINE Sommario PULSANTI E PAGINE...1

Corso di Visione Artificiale. Filtri parte I. Samuel Rota Bulò

Informa(ca Appun% dal laboratorio 2

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Convertitori numerici in Excel

Elaborazioni nel dominio spaziale (1) Soluzioni

MATRICI E DETERMINANTI

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Microsoft Excel. Sommario. Cosa è un foglio elettronico. L interfaccia Utente. La cartella di Lavoro. Corso di introduzione all informatica

I file di dati. Unità didattica D1 1

Compilatore risorse display grafico LCD serie IEC-line

Syllabus (estratto) Foglio elettronico. Excel. Open office - Office. Principio e funzionamento 26/11/2012. A. Ferrari

Appunti di: MICROSOFT EXCEL

Transcript:

Corso di Visione Artificiale Matlab per Visione Samuel Rota Bulò

Cos'è Matlab? MATLAB MATLAB - - MATrix MATrix LABoratory LABoratory Ambiente Ambiente di di sviluppo sviluppo ed ed esecuzione esecuzione Linguaggio Linguaggio di di programmazione programmazione (principalmente (principalmente vettoriale) vettoriale) Manipolazione Manipolazione dei dei dati dati in in forma forma matriciale. matriciale. Diffuso Diffuso in in ambiente ambiente accademico/scientifico. accademico/scientifico. Largamente Largamente utilizzato utilizzato per per visione visione artificiale. artificiale.

Il desktop di Matlab Directory di lavoro Ambiente delle variabili Storico dei comandi Finestra dei comandi

L'HELP di Matlab Matlab Matlab mette mette a a disposizione disposizione un'ottima un'ottima documentazione. documentazione. Dal Dal menu menu Help Product Help Product Help Help Se Se vogliamo vogliamo ottenere ottenere informazioni informazioni riguardo riguardo ad ad un un certo certo comando comando possiamo possiamo invocare invocare >> help comando per per ottenere ottenere la la documentazione documentazione testuale testuale del del comando comando nella nella finestra finestra dei dei comandi comandi >> doc comando per per aprire aprire una una finestra finestra con con la la documentazione documentazione più più dettagliata dettagliata

Matrici Una matrice è una griglia bidimensionale di numeri, caratterizzata da un numero M di righe e N di colonne. In Matlab creiamo una matrice racchiudendo una sequenza di numeri tra parentesi quadre [ ]. Gli elementi di una riga sono separati da virgola o spazio. Le righe sono separate da ; o un invio. >> [1 2 3 4; 5 6 7 8] ans = 1 2 3 4 5 6 7 8

Scalari e Vettori Un numero scalare è una matrice 1x1. In Matlab scrivendo un numero automaticamente creiamo una matrice 1x1. >> 1 ans = 1 Un vettore riga è una matrice 1xN. >> [1 2 3 4] ans = 1 2 3 4 Un vettore colonna è una matrice Mx1. >> [1; 2; 3] ans = 1 2 3

Variabili Le matrici che abbiamo creato finora sono anonime. Per assegnare un nome ad una matrice scriviamo il nome della variabile seguito da = e la matrice. >> A=[1 2 3 4; 5 6 7 8] A = 1 2 3 4 5 6 7 8 Ora la variabile A è nell'ambiente delle variabili e può essere riutilizzata. Ogni volta che scriviamo la variabile A è come se avessimo scritto la matrice associata. >> A A = 1 2 3 4 5 6 7 8 >> B=A B = 1 2 3 4 5 6 7 8 Se assegniamo ad una variabile un nuovo valore quello precedente verrà perso.

Variabili Ogni assegnamento di variabile produce implicitamente un output. Per sopprimerlo basta terminare l'assegnamento con un ; Anche quando scriviamo un matrice senza assegnarla ad una variabile, in realtà, matlab effettua un assegnamento implicito di variabile. Infatti crea una variabile chiamata ans >> [1 2 3 4; 5 6 7 8] ans = 1 2 3 4 5 6 7 8 >> ans ans = 1 2 3 4 5 6 7 8 >> A=[1 2 3 4; 5 6 7 8]; >> [1 2 3; 4 5 6]; >> ans 1 2 3 5 6 7 Possiamo eliminare variabili dall'ambiente con la funzione clear clear elimina tutte le variabili nell'ambiente clear A B C elimina tutte le variabili elencate.

Tipi di dato primitivi Tipo double uint8 uint16 uint32 int8 int16 int32 single Descrizione Floating-points in precisione doppia (8 bytes) Intero a 8-bit senza segno (1 byte) Intero a 16-bit senza segno (2 bytes) Intero a 32-bit senza segno (4 bytes) Intero a 8-bit con segno (1 byte) Intero a 16-bit con segno (2 bytes) Intero a 32-bit con segno (4 bytes) Floating-points in precisione singola (4 bytes) char Caratteri (2 bytes). Es: 'a', 'b', 'c',... logical Valori booleani 0/1 (1 byte) Possiamo avere matrici di diverso tipo. Il nome di ciascun tipo può essere utilizzato come funzione di conversione di tipo: >> A=[1.1 2.5 3.6 0]; >> uint8(a) ans = 1 3 4 0 >> logical(a) ans = 1 1 1 0 Le stringhe in Matlab sono sequenze di caratteri tra apici e corrispondono a vettori riga di tipo char. >> 'prova' ans= prova >> ['p' 'r' 'o' 'v' 'a'] ans= prova

Immagini digitali Un'immagine (di intensità) in Matlab è rappresentata da una matrice, dove il primo pixel ha coordinate (1,1). Se la matrice è di tipo uint8/uint16/uint32, allora l'immagine si intende a 8/16/32 bit. Se la matrice è di tipo double/single allora l'immagine è considerata a valori reali nell'intervallo [0,1]. Quindi intensità >1 sono bianche, <0 sono nere. Se la matrice è logica, l'immagine si intende in bianco e nero. 255 255 255 255 255 255 255 255 255 255 255 255 221 77 12 7 72 233 255 255 255 255 42 189 246 240 111 91 255 255 255 255 255 255 255 255 245 21 255 255 255 255 197 60 11 0 0 1 255 255 255 255 27 168 240 254 241 0 255 255 255 255 18 176 248 221 87 0 255 255 255 255 175 34 3 30 146 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255

Immagini digitali Per caricare un'immagine da file utilizziamo la funzione imread. >> I=imread('filename'); Per visualizzare un'immagine utilizziamo la funzione imshow. >> imshow(i) Per salvare un'immagine su file utilizziamo la funzione imwrite. >> imwrite(i,'filename') Per ottenere le dimensioni di una qualunque matrice (e quindi anche immagini) utilizziamo la funzione size: >> A=[1 2 3; 4 5 6]; >> size(a) ans = 2 3 >> [M,N]=size(A) M= 2 N= 3

Conversioni di tipo per immagini Tipo Descrizione im2uint8 Converte un'immagine qualsiasi in un'immagine a 8-bit im2uint16 Converte un'immagine qualsiasi in un'immagine a 16-bit mat2gray Converte una matrice double in un'immagine a valori reali, ovvero una matrice double on valori in [0,1] im2double Converte un'immagine qualsiasi in un'immagine a valori reali. im2bw Converte un'immagine qualsiasi in un'immagine in bianco e nero.

Funzioni per creazione di matrici a:b a:i:b Comando linspace(a,b,n) zeros(m,n) Descrizione [a a+1 a+2 a+n] dove n=floor(b-a) [a a+i a+2i a+ni] dove n=floor( (b-a)/i ) a:(b-a)/(n-1):b Crea una matrice MxN di zeri. ones(m,n) Crea una matrice MxN di 1 eye(m,n) rand(m,n) randn(m,n) Crea una matrice MxN di zeri con 1 sulla diagonale. Se M=N abbiamo la matrice identica Crea una matrice MxN di valori random con distribuzione uniforme tra 0 e 1 Crea una matrice MxN di valori random con distribuzione normale di media 0 e varianza 1. true(m,n) Crea una matrice logica MxN di 1 false(m,n) Crea una matrice logica MxN di 0

Indicizzazione di vettori Sia v un vettore e i l'indice di un elemento di v. Con v(i) selezioniamo l'i-esimo elemento di v. >> v=[2 4 6 8]; >> v(2) ans= 4 Ora, i non deve necessariamente essere uno scalare, ma può essere un vettore di indici. In questo caso, v(i) rappresenta il sotto-vettore di v composto dai soli elementi di v indicizzati da i. >> v([1 3 4]) ans = 2 6 8 Tra gli indici utilizzabili per indicizzare un elemento di un vettore c'è end che rappresenta l'indice dell'ultimo elemento. >> v(2:end) ans = 4 6 8 >> v([1 end 1]) ans = 2 6 >> v(1:2:end) ans = 2 6

Indicizzazione di vettori Sia v un vettore. Con v(:) otteniamo v come vettore colonna. >> v=[2 4]; >> v(:) ans= 2 4 L'indicizzazione di un vettore non è solo utile in lettura ma anche in scrittura. >> v=[1 2 3 4]; >> v(1)=0 v = 0 2 3 4 >> v(2:end)=[2 1 0] v = 1 2 1 0 >> v=[2; 4]; >> v(:) ans= 2 4 >> v=[1 2 3 4]; >> v([1 end])=1 v = 1 2 3 1 >> v=[1 2]; >> v(4)=5 v = 1 2 0 5 Se scriviamo in una locazione che è fuori dal vettore, questo viene ridimensionato automaticamente inizializzando a 0 i nuovi elementi.

Indicizzazione di matrici Sia M una matrice e i,j le coordinate di un elemento di M. Con M(i,j) selezioniamo l'(i,j)-esimo elemento di M. >> M=[1 2 3; 4 5 6]; >> M(1,2) ans= 2 Come abbiamo visto per i vettori, se gli indici i,j sono vettori, M(i,j) seleziona una sotto-matrice di M >> M=[1 2 3; 4 5 6]; >> M(1:end,2:3) ans= 2 3 5 6 >> M(:,end) ans= 3 6 >> M=[1 2 3; 4 5 6]; >> M(1,:) ans= 1 2 3 >> M(:,:) ans= 1 2 3 4 5 6 Possiamo usare : invece di 1:end

Indicizzazione di matrici Come abbiamo visto per i vettori, l'indicizzazione delle matrici è utile anche in scrittura. >> M=[1 2 3; 4 5 6]; >> M=[1 2 3; 4 5 6]; >> M(1,2)=0 >> M(:,[1 3])=[0 1; 1 0] M= M= 1 0 3 0 2 1 4 5 6 1 5 0 Un altro sistema di indicizzazione utilizza matrici logiche. Se abbiamo una matrice M e una matrice logica D della stessa dimensione di M con M(D) indicizziamo gli elementi corrispondenti a 1 in D. >> M=[1 2 3; 4 5 6]; >> D=logical([1 0 1; 0 1 0]); >> M(D) ans= 1 5 3 >> M=[1 2 3; 4 5 6]; >> D=logical([1 0 1; 0 1 0]); >> M(D)=0 M= 0 2 0 4 0 6 M(D) genera un vettore colonna selezionando gli elementi colonna per colonna.

Indicizzazione di matrici Possiamo infine linearizzare una matrice M in un vettore colonna scrivendo M(:) >> M=[1 2 3; 4 5 6]; >> M(:) ans= 1 4 2 5 3 6 Di nuovo gli elementi sono selezionati colonna per colonna.

Immagini e indicizzazione >> I=imread('flower.jpg'); >> imshow(i); >> imshow(i(end: 1:1,:)); >> [M,N]=size(I); >> ir=50:m 50; >> ic=50:n 50; >> imshow(i(ir,ic)); >> ir=1:2:m; >> ic=1:2:n; >> imshow(i(ir,ic)); >> plot(i(m/2,:))

Addizione Siano A=(a ij ),B=(b ij ) matrici MxN Sia c uno scalare. >> A+B >> c+a >> A+c

Sottrazione Siano A=(a ij ),B=(b ij ) matrici MxN Sia c uno scalare. >> A B >> c A >> A c

Moltiplicazione puntuale Siano A=(a ij ),B=(b ij ) matrici MxN Sia c uno scalare. >> A.*B >> c.*a >> A.*c

Moltiplicazione Sia A=(a ij ) matrice MxN Sia B=(b ij ) matrice NxL Sia c uno scalare. >> A*B >> c*a >> A*c

Trasposizione Sia A=(a ij ) matrice MxN >> A.' >> A' coniugato complesso nota che

Inversione Sia A=(a ij ) matrice NxN >> inv(a)

Divisione (a destra) puntuale Siano A=(a ij ), B=(b ij ) matrici MxN Sia c uno scalare. >> A./B >> c./a >> A./c

Elevamento a potenza puntuale Siano A=(a ij ) e B=(b ij ) matrice MxN Sia c uno scalare. >> A.^c >> A.^B

Operazioni con matrici Comando Descrizione A Nega gli elementi della matrice A A' A*B a*b B*a A.*B a.*b B.*a A/B a/b B/a A./B a./b B./a A\B a\b B\a A.\B a.\b B.\a A+B a+b B+a A B a B B a a^b B^a a.^b B.^a Trasposta di A Moltiplicazione tra matrici, matrice/scalare Moltiplicazione puntuale di matrici, matrice/scalare Divisione a destra tra matrici, matrice/scalare Divisione a destra puntuale tra matrici, matrice/scalare Divisione a sinistra tra matrici, matrice/scalare Divisione a sinistra puntuale tra matrici, matrice/scalare Addizione tra matrici, matrice/scalare Sottrazione di matrici, matrice/scalare Elevamento a potenza matrice/scalare Elevamento puntuale di potenza matrice/scalare

NOT Sia A=(a ij ) matrice logica MxN >> ~A

AND Siano A=(a ij ) e B=(b ij ) matrici logiche MxN >> A&B

OR Siano A=(a ij ) e B=(b ij ) matrici logiche MxN >> A B

Operatori relazionali Siano A=(a ij ), B=(b ij ) matrici MxN Sia c uno scalare. Gli operatori relazionali danno origine a matrici logiche. >> A==B >> A~=B >> c==a >> A==c >> c~=a >> A~=c >> A>B >> c>a >> A>c >> A>=B >> c>=a >> A>=c >> A<B >> c<a >> A<c >> A<=B >> c<=a >> A<=c

if,elseif,else if espressione1... elseif espressione2... elseif...... else... end

for e while for indice=vettore end... while espressione end...

funzioni function [r1,r2,..]=nome(a1,a2,...) end...