Esercitazione 1 - Introduzione MATLAB MATrix LABoratory Matlab Contenuto cartella corrente Current Directory Variabili correnti editor Command window Comandi recenti Matrici • MATLAB tratta tutte le variabili come matrici • I vettori sono forme speciali di matrici con una sola riga o colonna • Gli scalari sono trattati come vettori con una sola riga e una sola colonna v_riga = [1 2 3]; v_colonna = [1; 2; 3]; matrice = [1 2 3; 4 5 6; 7 8 9]; 123 1 2 3 1 2 3 4 5 6 7 8 9 Operatori Trasposizione (‘) a’ Potenze (^ o .^) Moltiplicazione (* o .*) Divisione (/ o ./) a^b o a.^b a*b o a.*b a/b o a./b 1 2 3 A = 1 0 1 2 4 3 Addizione (+) Sottrazione (-) Assegnamento (=) 1 2 2 B = 2 3 1 0 1 2 A*B = 5 11 10 1 3 4 8 17 15 A .* B = 1 4 6 2 0 1 0 3 8 a+b a-b a=b Linearita degli operatori (1) 1 2 3 A = 1 0 1 2 4 3 1 2 2 B = 2 3 1 0 1 2 mean(3A+2B) = mean 3 6 9 3 0 3 6 12 9 mean(3A)+mean(2B) = mean H(αA+βB) = H(α A)+H(βB) 2 4 4 4 6 2 0 2 4 3 6 9 3 0 3 + mean 6 12 9 5 10 13 7 6 5 6 14 13 = mean 2 4 4 4 6 2 0 2 4 = 8.78 = 5.67+3.11= 8.78 operatore lineare Linearita degli operatori (2) 1 2 3 A = 1 0 1 2 4 3 1 2 2 B = 2 3 1 0 1 2 median(3A+2B) = median median(3A)+median(2B) = median H(αA+βB) ≠ H(α A)+H(βB) 5 10 13 7 6 5 6 14 13 3 6 9 3 0 3 + median 6 12 9 = 7 2 4 4 4 6 2 = 6+4 = 10 0 2 4 operatore non lineare Estrazione di sotto-matrici A = 1 2 3 1 0 1 2 4 3 A (:) = A(1) A(1,1) A(4) A(1,2) A(7) A(1,3) A(2) A(2,1) A(5) A(2,2) A(8) A(2,3) A(3) A(3,1) A(6) A(3,2) A(9) A(3,3) 1 2 3 1 0 1 2 4 3 A (: ,1) = 1 1 2 A (2 ,3) = 4 A (1 ,:) = 1 2 3 A (6) = 4 [I,J] = ind2sub(siz,ind) [I,J] = ind2sub([3 3], [5 6]) IND = sub2ind(siz,I,J) ind = sub2ind([3 3], 3, 2) I=23 J=22 ind = 6 Creazione di matrici da sottomatrici B= 1 1 2 C= F = [B, C, D] H = [F, G] 0 2 3 F = H = D= 1 0 1 1 2 0 2 3 0 1 0 1 1 1 0 1 2 0 1 0 0 2 3 0 2 0 1 1 0 0 E= 1 0 0 0 0 1 G = [B, E] H(1:3,2:3)=E; G = H = 1 1 0 1 0 0 2 0 1 1 1 0 1 1 0 1 0 0 1 0 0 2 0 1 2 0 1 Operazioni su matrici size (A) 1 2 3 A = 1 0 1 2 4 3 length (A) min (A) max (A) 3x3 9 101 243 max (A(:)) 4 mean(A(:)), std(A(:)), var(A(:)), … sum(A(:)), abs(A(:)) Matrici “notevoli” zeros (3) 0 0 0 0 0 0 0 0 0 ones (3) 1 1 1 1 1 1 1 1 1 rand (3) 0.8147 0.9134 0.2785 0.9058 0.6324 0.5469 0.1270 0.0975 0.9575 distribuzione uniforme [0 1] randn(3) distribuzione gaussiana a media nulla Istruzioni if e for if expression1 % is true % execute these commands elseif expression2 % is true % execute these commands else % the default % execute these commands end for x = 1: p : M % comandi end L’istruzione find ind = find(condizione) 1 2 3 A = 1 0 1 2 4 3 ind1 = find(A==2) ind1 = [3 4] ind2 = find(A<2) ind2 = [1 2 5 8] A(ind2) = 0; 0 2 3 A = 0 0 0 2 4 3 Funzioni function [output1, output2] = name (input1, input2, input3) (il nome della funzione deve avere lo stesso nome del file .m in cui viene salvata) [output1, output2] = name (input1, input2, input3); function [minimo, massimo] = minmax (A) minimo = min(A); massimo = max(A); Sul workspace Dall’editor si salva come “minmax.m” A=[1 2 3; 1 0 1; 2 4 3]; [m, M] = minmax (A); x = (m + M)/2 Immagini 1 x 1 b = a(21:36,9:24) uint8 a = im2double(a) double y Immagini a colori size(a) [384 512 3] size(b) b=rgb2gray(a); [384 512] Operazioni base con le immagini a = imread(‘icona.pgm’); imshow(a); figure(); imshow(a); b=1-a; figure(); subplot(1,2,1); imshow(a); subplot(1,2,2); imshow(b); title(‘esempio’); imwrite (b, ‘icona2.pgm') .pgm .jpg .png … Connessione tra pixel A B i E=0 E = -1 E=2 • quante sono le regioni 8-connesse? • quante sono le regioni 4 connesse? • qual è il numero di Eulero nei due casi? Distanza tra pixel D = √(39-4)²+(11-31)² = 40.31 D = sqrt((39-4)^2+(11-31)^2)); D = |39-4|+|11-31| = 55 D = abs(39-4)+abs(11-31); D = max(abs(39-4),abs(11-31)) L’istogramma e la binarizzazione figure(); imhist(a) f = find(a<0.3); z = ones(size(a)); z(f) = 0; imshow(z); bw = im2bw(a, 0.3); Funzioni MATLAB viste oggi • • • • • • • • • • ind2sub, sub2ind mean, median size, length min, max, mean, std, var sum, abs zeros, ones, rand, randn find im2double imread, imwrite imshow, subplot, figure