Comments
Description
Transcript
Slides ed esercizi File - 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