Introduzione a Matlab Image Processing Toolbox - e

Transcript

Introduzione a Matlab Image Processing Toolbox - e
Image Processing Toolbox
Imaging Digitale
a.a. 2014/2015
Silvia Corchs
Image Processing Toolbox
Operazioni sulle immagini
 Lettura
• variabile=imread(nomefile)
 Scrittura
• imwrite(variabile,nomefile,parametri)
 Informazioni
• imfinfo(nomefile,parametri)
 Visualizzazione
• imshow(variabile)
• imagesc(variabile)
• imageview(variabile)
Image Processing Toolbox
q=5
q=10
q=30
q=50
Image Processing Toolbox
 Le immagini sono viste come matrici di uint8
• Immagini a colori sono matrici MxNx3
• Immagini a livelli di grigio sono matrici MxN
 La maggior parte delle operazioni su matrici in MATLAB sono
definite su double
• Necessario trasformare uint8 in double
• im2double trasforma tutte le matrici in double (tra 0 e 1).
• im2uint8 trasforma tutte le matrici (double) in uint8 (tra 0 e 255).
 Esistono diverse funzioni specifiche per le immagini
• imhist, imadd, imsubtract, imrotate, imresize,…
Image Processing Toolbox
>> R=im(:,:,1);
Canale Red
im
>> G=im(:,:,2);
Canale Green
>> B=im(:,:,3);
Canale Blue
>> whos
Name
Size
B
512x768
G
512x768
R
512x768
im
512x768x3
Canale R
Bytes
Class
393216
uint8
393216
uint8
393216
uint8
1179648 uint8
Canale G
Canale B
Image Processing Toolbox
out(:,:,1)=G;
% canale Red
out(:,:,2)=B;
% canale Green
out(:,:,3)=R;
% canale Blue
originale
out
Image Processing Toolbox
im1
gray=rgb2gray(im1)
im2
gray=rgb2gray(im2)
8
imadd(im,im2)
imlincomb(0.2,im1,0.8,im2);
imsubtract(im,im2)
imlincomb(0.7,im1,0.3,im2);
9
Image Processing Toolbox
Ridimensionamento delle immagini:
imresize
diverse modalità di scaling possibili:
• Nearest
Il valore di destinazione è quello del pixel più vicino
• Bilineare
Il valore di destinazione è determinato da una media pesata dei
4 più vicini
• Bicubico
Il valore di destinazione è determinato da una media pesata dei
16 più vicini
Image Processing Toolbox
>> out = imresize(immagine,M,metodo)
• L’immagine di output ha dimensioni (n*M,m*M)
• Metodo=‘nearest’, ‘bilinear’ o ’bicubic’
>> out = imresize(immagine,[RIGHE COLONNE],metodo)
• L’immagine di output ha dimensioni (righe,colonne)
• Se le nuove dimensioni hanno rapporto diverso da quelle originali,
l’immagine è distorta
• Quando viene fatto un downscaling con i metodo bilinear o bicubic,
viene prima eseguito di default un filtro di anti-aliasing di dimensione
NxN
>> out = imresize(immagine,[RIGHE COLONNE],metodo,N)
• N=0 nessun filtro anti-aliasing
Image Processing Toolbox
Sottocampionamento
128x128, M=1/4
64x64, M=1/8
out=imresize(im,M,‘nearest’)
Ricampionamento a 512x512 dalla 256x256
512x512
Originale 512x512
512x512
im512=imresize(im256,’nearest’)
Francesca Gasparini
512x512
im512=imresize(im256,’bilinear’)
Ricampionamento a 512x512 dalla 128x128
512x512
Originale 512x512
512x512
im512=imresize(im128,’nearest’)
Francesca Gasparini
512x512
im512=imresize(im128,’bilinear’)
Ricampionamento a 512x512 dalla 64x64
512x512
Originale 512x512
512x512
im512=imresize(im64,’nearest’)
Francesca Gasparini
512x512
im512=imresize(im64,’bilinear’)
Image Processing Toolbox
 Inversione scala di grigio:
im
s  L 1 r
0  r  L 1
gray=rgb2gray(im)
neg = 255-gray
 Sogliatura
>> out=gray;
>> out(gray>100)=255;
>> out(gray<100)=0;
>> figure, imshow(out)
16
Image Processing Toolbox
Istogramma: imhist
Visualizza l’istogramma di una immagine intensità
imshow(rgb2gray(immagine))
imhist(rgb2gray(immagine))
Image Processing Toolbox
Immagine ben contrastata
Image Processing Toolbox
Immagini poco contrastate
Image Processing Toolbox
 Gamma correction:
out  c . input 
 1
espansione della dinamica per
bassi valori di r, compressione
della dinamica per alti valori di r.
250
200
c  0,   0
  0.04
  0 .1
  0 .2   0 .4
150
 1
espansione della dinamica per
alti valori di r, compressione della
dinamica per bassi valori di r.
 1
100
  2.5   5
50
0
0
50
100
150
200
  10
250
>> gray=rgb2gray(immagine);
>> graynorm=im2double(gray); % è in [0,1]
>> graynew=im2uint8(graynorm.^0.5);
  0 .5
>> gray=rgb2gray(immagine);
>> graynorm=im2double(gray); % è in [0,1]
>> graynew=im2uint8(graynorm.^1.7);
  1.7
Image Processing Toolbox
Applicare la gamma su tutti i canali di una
immagine RGB
function [out]=applygamma(in,gamma)
%supponiamo di avere in input immagini
a 3 canali
c1=im2double(in(:,:,1));
c2=im2double(in(:,:,2));
c3=im2double(in(:,:,3));
>> applygamma(im,1.7)
c1=c1.^gamma;
c2=c2.^gamma;
c3=c3.^gamma;
out(:,:,1)=im2uint8(c1);
out(:,:,2)=im2uint8(c2);
out(:,:,3)=im2uint8(c3);
Image Processing Toolbox
Equalizzazione
dell’istogramma: idealmente
produce una immagine con
istogramma piatto, cioè con
livelli di grigio uniformemente
distribuiti sui pixel.
dark
bright
Low-contrast
High contrast
Image Processing Toolbox
Contrast enhancement
>> J=histeq(im);
>> figure, subplot(2,2,1) imshow(im);
>> hold on
>> subplot(2,2,2), imhist(im);
>> subplot(2,2,3), imshow(J);
>> subplot(2,2,4), imhist(J);
imhist(im)
im
1500
1000
500
0
0
50
100
150
200
250
200
250
imhist(J)
J=histeq(im)
2000
1500
1000
500
0
0
50
100
150
Contrast stretching
J = imadjust(im)
>> J = imadjust(im);
l'1% dei dati è saturato
alle basse ed alte
intensità.
>> J = imadjust(im,[low_in; high_in],[low_out; high_out],gamma);
[low_in; high_in]: range dei livelli di grigio dell’immagine in ingresso
[low_out; high_out]: range dei livelli di grigio immagine di uscita.
Valori di default: sono [0 1].
gamma descrive la curva di saturazione. Default: gamma = 1
Contrast stretching
Per le immagini a colori, low_in e high_in sono vettori di tre elementi:
>> J = imadjust (im, [0.2 0.3 0; 0.6 0.7 1], []);
Image Processing Toolbox
Filtraggio
Elaborazioni locali: coinvolge i vicini di un pixel.
Vengono utilizzati i filtri spaziali o le maschere di convoluzione.
9
Maschera lineare:
R  w1 z1  w2 z 2  ....  w9 z9   wi zi
i 1
R è il valore calcolato
rispetto al pixel centrale z5.
Coinvolge gli otto vicini
rispetto ai parametri di
maschera w1…,w9.
Esempio di maschere non lineare:
R1=max{zk|k=1,2,….,9}
R2=min{zk|k=1,2,….,9}
z1
z2
z3
z4
z5
z6
w1
w2
w3
z7
z8
z9
w4
w5
w6
w7
w8
w9
maschera
Image Processing Toolbox
Creare filtri lineari: fspecial:
h = fspecial (tipo, parametri);
•
'average': filtro medio;
•
'disk': filtro medio circolare;
•
'gaussian': filtro passa-basso gaussiano;
•
'laplacian': approssimazione dell'operatore Laplaciano;
•
'log': Laplaciano del filtro gaussiano;
•
'motion': approsimazione di un movimento della fotocamera;
•
'prewitt': Prewitt horizontal edge-emphasizing filter
•
'sobel': Sobel horizontal edge-emphasizing filter
•
'unsharp': filtro per l'enhancement del contrasto.
Image Processing Toolbox
Dopo avere creato una maschera di filtraggio spaziale con la funzione fspecial
si filtra l’immagine con questa maschera, utilizando la funzione imfilter:
>> h = fspecial(‘tipo’);
>> out = imfilter(im,h);
im
>> h=fspecial('average',[5 5])
h=
0.0400
0.0400
0.0400
0.0400
0.0400
0.0400
0.0400
0.0400
0.0400
0.0400
0.0400
0.0400
0.0400
0.0400
0.0400
>> out=imfilter(im,h);
0.0400
0.0400
0.0400
0.0400
0.0400
0.0400
0.0400
0.0400
0.0400
0.0400
out
Image Processing Toolbox
Filtro Gaussiano
h = fspecial('gaussian',HSIZE,SIGMA) returns a rotationally
symmetric Gaussian lowpass filter of size HSIZE with standard deviation
SIGMA (positive). HSIZE can be a vector specifying the number of rows
and columns in H or a scalar, in which case H is a square matrix.
The default HSIZE is [3 3], the default SIGMA is 0.5.
N=2*fix(2.5*sigma)+1 2*fix(2.5*0.5)+1 2*fix(1.25)+1=3
H=
0.0113
0.0838
0.0113
0.0838
0.6193
0.0838
0.0113
0.0838
0.0113
sum(H(:))=1
Image Processing Toolbox
>> h1= fspecial('gaussian‘,[5 5],1);
>> out1=imfilter(im,h1);
>> h2 = fspecial('gaussian', [15 15], 3);
>> out2=imfilter(im,h2);
out1
im
out2
Image Processing Toolbox
Sharpening:
0.5
4
>> f=fspecial('unsharp')
f=
-0.1667 -0.6667 -0.1667
-0.6667 4.3333 -0.6667
-0.1667 -0.6667 -0.1667
1
3.5
3
1.5
2.5
2
2
1.5
2.5
1
0.5
>> imagesc(f);
>> colorbar;
>> out=imfilter(im,f);
3
0
3.5
0.5
im
-0.5
1
1.5
2
out
2.5
3
3.5
Image Processing Toolbox
>> f=fspecial('laplacian')
f=
0.1667 0.6667
0.6667 -3.3333
0.1667 0.6667
0.1667
0.6667
0.1667
>> out=imfilter(im,f);
>> figure, imshow(out)
im
out
Image Processing Toolbox
Filtri speciali: Edge
>> out=edge(rgb2gray(im),'sobel');
Canny
Laplacian of Gaussian
Image Processing Toolbox
Filtri non lineari:
– medfilt2
– ordfilt2
Filtro mediano
Filtro ad ordinamento statistico
• ordfilt2(im,5,ones(3,3)) Filtro mediano (su 3x3)
• ordfilt2(im,1,ones(3,3)) Filtro di minimo (su 3x3)
• ordfilt2(im,9,ones(3,3)) Filtro di massimo (su 3x3)
Il filtro mediano per ciascuna finestra di
dimensione nxn dell’immagine, ordina i pixel in
essa contenuti e ne seleziona il valore mediano,
che viene sostituito alla posizione corrente.
Image Processing Toolbox
im
differenza
mediano
Image Processing Toolbox
ordfilt2(im,9,ONES(3,3))
im
max
ordfilt2(im,1,ONES(3,3))
min
Esercizio 4
• Creare una funzione showhist che data una immagine a livelli di grigio, la
visualizza in un finestra con il suo istogramma.
• imshow, subplot, imhist, bar/plot
Introduzione a MATLAB - Image Processing Toolbox
39
Esercizio 5
• Caricate l’immagine aerial.jpg, trasformatela a livelli di grigio e
visualizzatene l’istogramma con la funzione creata showhist.m
• Osservate e commentate l’istogramma
• Modificate il contrasto dell’immagine usando la funzione imadjust.
Questa funzione rimappa linearmente il range di valori dell’immagine in
un nuovo range
– Guardando l’istogramma dell’immagine originale scegliete opportunamente gli
intervalli di valori da rimappare per incrementare i dettagli osservabili.
Introduzione a MATLAB - Image Processing Toolbox
40
Esercizio 6
• Modificate il contrasto dell’immagine usando la funzione histeq di
MATLAB. Questa funzione rimappa i valori dell’immagine tramite
equalizzazione dell’istogramma
• Visualizzate l’istogramma dell’immagine equalizzata
• Osservate e commentate l’istogramma
• Confrontate tra loro gli istogrammi delle due immagine modificate
Introduzione a MATLAB - Image Processing Toolbox
41
Esercizio 7
• Modificate il contrasto dell’immagine
usando il metodo della gamma correction
Ricordate che l’immagine deve avere valori
compresi tra 0 e 1.
•
•
•
•
Determinate un valore opportuno di  e correggete l’immagine
Visualizzate l’istogramma dell’immagine corretta
Osservate e commentate l’istogramma
Confrontate tra loro gli istogrammi delle tre immagine modificate
Introduzione a MATLAB - Image Processing Toolbox
42
Esercizio 8
• Recuperate i comandi dell’esercizio precedente e metteteli in un file di
script.
• Eseguite l’esercizio precedente per le seguenti immagini:
– pyramids.jpg,
– isola.jpg
– mercpulci.jpg
• Quale delle 3 metodologie di correzione del contrasto funziona meglio per
ciascune delle tre immagini? Perche?
Introduzione a MATLAB - Image Processing Toolbox
43
Esercizio 9
• Aiutandovi con l’help, create dei filtri spaziali con fspecial
• Testate l’effetto di alcuni dei filtri creati caricando delle immagini a scelta
• Quale filtro è più indicato per elaborare le seguenti immagini?
- Castle.gif
- Castle2.gif
- Casaneve.jpg
Introduzione a MATLAB - Image Processing Toolbox
44
Esercizio 10
• Un esempio di filtro non lineare è il filtro mediano medfilt2
• Testate il filtro mediano sulle seguenti due immagini:
– Tree1.tif
– Tree2.tif
• In quale delle due immagini il filtro funziona meglio?
•
Provate ad aplicare più volte un filtro mediano 3x3. Che considerazioni
potete fare sul risultato?
Esercizio 11
• Usare la funzione edge che applica diverse metodologie per creare
un’immagine binaria degli edge (vedere help)
1.
2.
3.
4.
5.
Sobel
Prewitt
Roberts
Log
Canny
• Testate alcune metodologie sull’immagine rat.jpg confrontando i resultati