Introduzione a Matlab Contrasto, Soglia, Rumore Fondamenti di Visione Artificiale a.a. 2015/2016 07/04/16 Introduzione a Matlab 1
Istogramma di un immagine Conta il numero di occorrenze di ciascuna tonalità, all interno dell immagine. Bianco 255 Nero 0 Count: 0 1 255 h = imhist(i); 07/04/16 Introduzione a Matlab 2
Contrast Stretching (1) 07/04/16 Introduzione a Matlab 3
Contrast Stretching (2) Max (A) Min (A) h = imhist(uint8(a)); A = double(imread( Trees.tif ) ) + 20; minimo = min(min(a)) massimo = max(max(a)) Nota: double(a) converte in double i valori contenuti in A. uint8(a) converte in unsigned char (8 bit) i valori contenuti in A. 07/04/16 Introduzione a Matlab 4
Contrast Stretching (2) Sottraiamo ad A il suo valore minimo: A = A minimo; Ora il minimo di A è zero. 07/04/16 Introduzione a Matlab 5
Contrast Stretching (3) Dividiamo A per la dimensione dell intervallo [minimo,massimo] : A = 255*(A-minimo)/(massimo-minimo) A = A / (massimo minimo); Ora il massimo di A è uno. A(i,j) [0,1] i,j Moltiplichiamo A per 255 e otteniamo valori in [0, 255] 07/04/16 Introduzione a Matlab 6
Contrast Stretching (4) E possibile aggiustare il contrasto di una immagine attraverso le funzioni fornite per il corso (che vi passerò durante la/le lezione/i): B = operazione_contrasto(a); imshow(uint8(b)); imhist(uint8(b)); 07/04/16 Introduzione a Matlab 7
La funzione imcontrast La funzione imcontrast apre una finestra in cui è possibile gestire interattivamente i parametri per il contrast stretching. imcontrast imcontrast(h) hfigure = imcontrast(...) 07/04/16 Introduzione a Matlab 8
La funzione imadjust La funzione imadjust effettua il contrast stretching sull immagine passata come input. I = imread('pout.tif'); J = imadjust(i); imshow(i), figure, imshow(j) 07/04/16 Introduzione a Matlab 9
La funzione imadjust Con la funzione imadjust è possibile specificare quale intervallo dell istogramma dell immagine in input [low_in, high_in] deve essere distribuito sull intervallo dell immagine di output [low_out, high_out]. Gli estremi iniziali vengono determinati dalla funzione: LOW_HIGH = stretchlim(i) RGB1 = imread('football.jpg'); RGB2 = imadjust(rgb1,[.2.3 0;.6.7 1],[]); imshow(rgb1), figure, imshow(rgb2) 07/04/16 Introduzione a Matlab 10
La funzione histeq La funzione histeq modifica la distribuzione dei toni di grigio di un immagine I, in modo che il suo istogramma h I diventi simile ad uno dato h O. I = imread('pout.tif'); J = imread('tire.tif'); h = imhist(i); K=histeq(J, h); figure, imshow(i); figure, imshow(j); figure, imshow(k); 07/04/16 Introduzione a Matlab 11
La funzione adapthisteq La funzione adapthisteq partiziona l immagine in sottoregioni disgiunte ed equalizza l istogramma per ciascuna di esse. Successivamente compensa le discrepanze lungo i bordi delle sottoregioni [Contrastlimited Adaptive Histogram Equalization (CLAHE)]. I = imread('tire.tif'); A=adapthisteq(I,'clipLimit',0.02,'Distribution','rayleigh'); figure, imshow(i); figure, imshow(a); 07/04/16 Introduzione a Matlab 12
Aritmetica delle immagini: Somma Un esempio è il seguente: Date due immagini A e B, C = operazione_somma(a,b) crea una nuova immagine data dalla somma delle immagini in input. 07/04/16 Introduzione a Matlab 13
Aritmetica delle immagini: Negativo In alcuni casi è utile rendere scuri i toni chiari e viceversa. Questa operazione prende il nome di negativo: B = operazione_negativo(a) crea una nuova immagine data un immagine in input 07/04/16 Introduzione a Matlab 14
Estrazione di Caratteristiche: Soglia Semplice A = imread( Monete.tif ); h = imhist(a); Le monete sono scure (primo picco) e lo sfondo è chiaro (secondo picco) Come separare le monete dallo sfondo? 07/04/16 Introduzione a Matlab 15
Estrazione di Caratteristiche: Soglia Semplice B = operazione_soglia(a, 155); C = operazione_negativo(255*b); D = operazione_prodotto(a,c); 07/04/16 Introduzione a Matlab 16
Estrazione di Caratteristiche: Soglia Semplice B = operazione_soglia(a); C = operazione_negativo(b); D = operazione_prodotto(a,c); 07/04/16 Introduzione a Matlab 17
Estrazione di Caratteristiche: Soglia Semplice B = operazione_soglia_intervallo(a, 60, 200); D = operazione_prodotto(a,c); 07/04/16 Introduzione a Matlab 18
Applicazione del rumore Peggiorare la qualità di un immagine intenzionalmente intuitivamente non ha senso. Conoscere la tipologia e la quantità di rumore presente in un immagine ci permette di mettere a confronto i diversi filtri. Filtri diversi hanno prestazioni differenti a seconda del tipo di rumore. 07/04/16 Introduzione a Matlab 19
Rumore Casuale La distribuzione dei pixel rumore non segue alcuna legge. I pixel rumore sono distribuiti sull immagine in maniera uniforme e casuale: ogni pixel dell immagine ha la stessa probabilità di essere rumore o informazione. L unico parametro che abbiamo a disposizione è la densità del rumore. Una densità alta implica un rumore più fitto, una densità bassa è indice di un rumore rado. 07/04/16 Introduzione a Matlab 20
Rumore Casuale %carichiamo e visualizziamo l immagine sorgente I = imread('eight.tif'); subplot(2,1,1); hold on; imshow(i); rand(n) genera una matrice di dimensioni n riempita con valori x [0,1]. I valori x [0,1] sono equiprobabili ed equidistribuiti. % generiamo la matrice contenente il rumore con densità delta Casuale = rand( size(i) ) ; % annulliamo tutti i valori con valre minore di delta Casuale = Casuale > delta; 07/04/16 Introduzione a Matlab 21
Rumore Casuale % riportiamo I valori nell intervallo [0,255] Casuale = 255*Casuale; % sommiamo il rumore generato all immagine sorgente I = operazione_somma(i, Casuale); % visualizziamo l immagine con rumore Subplot(2,1,2); hold on; Imshow(uint8(I)); 07/04/16 Introduzione a Matlab 22
Rumore Casuale 07/04/16 Introduzione a Matlab 23
Rumore Casuale % questo stesso risultato si ottiene con la funzione per il rumore casuale I = imread('eight.tif'); subplot(2,1,1); hold on; imshow(i); I = rumore_casuale(i, delta); subplot(2,1,2); hold on; imshow(i); 07/04/16 Introduzione a Matlab 24
Rumore Gaussiano % il rumore gaussiano può essere aggiunto mediante l omonima funzione I = imread('eight.tif'); subplot(2,1,1); hold on; imshow(i); Funzione Gaussiana: I = rumore_gaussiano(i, media, varianza); subplot(2,1,2); hold on; imshow(i); 07/04/16 Introduzione a Matlab 25
Rumore Gaussiano (1) 07/04/16 Introduzione a Matlab 26
Rumore Sale e Pepe % il rumore gaussiano può essere aggiunto mediante l omonima funzione I = imread('eight.tif'); subplot(2,1,1); hold on; imshow(i); I = rumore_salepepe(i, intensita); subplot(2,1,2); hold on; imshow(i); 07/04/16 Introduzione a Matlab 27
Rumore Sale e Pepe 07/04/16 Introduzione a Matlab 28