Elaborazione immagini Introduzione a Matlab Matlab Matrix Laboratory
Elaborazione immagini
Introduzione a Matlab • Matlab== Matrix Laboratory • Ambiente per il calcolo numerico e statistico; scritto in C; si possono elaborare matrici, visualizzare funzioni e dati • Funziona su diversi sistemi operativi tra i quali: Windows, MAC OS, GNU/LINUX, UNIX
Immagini e matrici • Le immagini digitali possono essere rappresentate in Ma. Tlab ed elaborate come matrici • Un'immagine digitale monocromatica può essere rappresentata in Matlab come una matrice bidimensionale il cui generico elemento x(m; n) è chiamato pixel • Per poter conoscere le caratteristiche di un’immagine da manipolare, bisogna leggerla con Ma. Tlab
Lettura immagine • Supponiamo di voler leggere un’immagine chiamata ‘aereo. jpg’ • Bisogna posizionare prima il file dell’immagine in un determinato percorso; • Nel caso di Matlab, i file vengono letti automaticamente in /Documenti/MATLAB • La cartella MATLAB viene creata automaticamente in fase di installazione • Per leggere quindi l’immagine in questione, basta digitare il seguente codice dal prompt dei comandi di matlab: u=imread(‘aereo. jpg’); u è un nome qualsiasi che è stato dato all’immagine letta
• Sia A(m; n) = B • il comando imshow disegna nel punto (m; n) un pixel con il colore specificato. • Se A è di tipo double, 0 viene visualizzato come nero, 1 come bianco e tutti i valori intermedi come grigi su 256 possibili valori. • Se, invece, B è uint 8 (uint 16), 255 (65535) 0 è visualizzato come bianco • Un’immagine con uno dei seguenti formati: jpg, TIF, GIF, BMP, è tipo uint 8 oppure uint 16
Caratteristiche dell’immagine • Per conoscere le dimensioni dell’immagine, si possono digitare uno dei seguenti comandi: z=size(u) [m, n]=size(u) Entrambe danno come risposta il numero di righe ed il numero di colonne della matrice corrispondente; il primo comando specifica anche il numero di colori RGB; il secondo comando specifica il valore di m ed il valore di n.
Comando whos() • Il comando whos() ci dice cosa c’è in memoria
Visualizzare l’immagine imshow(u)
Ingrandire o rimpicciolire un’immagine Per avere un formato diverso dell’immagine si utilizza il seguente comando: imtool(u) Il risultato è questo
Per rimpicciolire o ingrandire
Tagliare una parte dell’immagine for i=200: 1200 for j=500: 1500 estr(i, j)=I(i, j); end imshow(estr)
Costante di scurimento Sia k un valore costante>0; sia p=k*u l nuova immagine ottenuta dalla vecchia matrice per una costante K=0. 2; p 1=u*k imshow(p 1)
Costante di scurimento Sia k un valore costante>0; sia p=k*u l nuova immagine ottenuta dalla vecchia matrice per una costante K=0. 9; p 1=u*k imshow(p 1)
Costante di scurimento Sia k un valore costante>0; sia p=k*u l nuova immagine ottenuta dalla vecchia matrice per una costante K=10; p 1=u*k imshow(p 1)
Filtro Si possono applicare dei filtri all’immagine con valori che variano in un range Es: h=[2, 3]; I 9=imfilter(u, h); imshow(I 9); Filtri di piccolo valore <1 immagini molto scure; filtri con valori >1 danno immagini schiere
Filtro [2 3] originale Filtro [-1 1] Filtro [3 4]
Immagine in scale di grigio t=rgb 2 gray(u); Imgshow(t);
Immagini in scale di grigio È possibile visualizzare un’immagine in scale di grigio secondo scale di grigio Se l’immagine caricata si chiama u, allora, per visualizzarla in grigio: gray=rgb 2 gray(u); Per visualizzare le percentuali di grigio presenti nella figura sottoforma di istogramma: I 2=imhist(gray); Per aumentare i contrasti di grigio: I 3=isteq(gray); Per visualizzare in una sola figura : Immagine in scale di grigio Istogramma con percentulali di grigio Immagine equalizzata stogramma con percentulali di grigio subplot(2, 2, 1) imshow(gray); subplot(2, 2, 2) imhist(gray); subplot(2, 2, 3) imshow(I 3); Subplot(2, 2, 4) imhist(I 3);
Immagini in scale di grigio+istogramma
Sovrapporre le immagini Si vogliono sovrapporre due immagini di dimensioni uguali. Si ci assicura che l’orientamento sia uguale Es: I=imread(‘mare. jpg); I 1=imread(‘studente. jpg’); I 2=imrotate(I 1, -90); I 3=immadd(I 1, I 2); subplot(2, 2, 1); imshow(I); subplot(2, 2, 2); imshow(I 1); subplot(2, 2, 3); imshow(I 2); subplot(2, 2, 4); imshow(I 3); Una volta che si sommano le immagini, si possono anche sottrarre con la funzione imsubtract(I 3, I 2);
Sovrapposizioni di immagini Le immagini possono essere sovrapposte anche in maniera differente es. I=imread(‘mare. jpg’); I 2=imread(‘studente. jpg’); I 3=imlincomb(0. 2, I, 0. 8, I 1); I 4=imlincomb(0. 5, I, 0. 5, I 1); I 5=imlincomb(0. 6, I, 0. 4, I 1); subplot(2, 2, 1); imshow(I 3); subplot(2, 2, 2); imshow(I 4); subplot(2, 2, 3); imshow(I 5); subplot(2, 2, 4); imshow(I 6);
Ridurre il numero di pixel con il metodo nearest out 1=imresize(im, 0, 25, ’nearest’); out 2=imresize(im, 0, 025, ’nearest’); imshow(out 1); imshow(out 2); Il comando imsize(out 1) da come risultato 360 640 3 Contro la dimensione originale 1440 2560 3 Le dimensioni di out 2 sono: 72 128 3
Visualizzare i contorni in scale di grigio BW=im 2 bw(I 1, graythresh(I 1));
Profilo di intensità Il profilo di intensità può essere fatto su un segmento dell’immagine digitando il comando: C=improfile(n); In questo caso, compare l’ultima immagine; si clicca su due punti estremi di un segmento e, si digita poi plot(C); Infatti, bisogna prima digitare la seguente sequenza di comandi: >>I 1=imread('aereo 1. jpg'); >> BW=im 2 bw(I 1, graythresh(I 1)); >> imshow(BW); Comparirà l’immagine nella slide successiva E poi C=improfile(n); In questo caso, comparirà di nuovo l’immagine e sarà possibile selezionare gli estremi del segmento o dei segmenti come mostrato nella slide 30 plot(C); al plot(C); compare il diagramma delle intensità su dieci punti nei segmenti selezionati
Profilo di intensità
Plot(c)
improfile Se si conoscono le coordinate dei punti, è possibile avere il profilo su punti specifici >> c = improfile (I, xi , yi); >> c = improfile (I, xi , yi , n);
Aggiungere rumore tipo ‘salt & pepper’ I 2=imnoise(I 1, ’salt & pepper’);
Rumore di tipo gaussiano Si vuole inserire un rumore di tipo gaussiano con media M e devianza N. Il codice da inserire è: G=immnoise(‘figura_originale’, ’gaussian’, M, N) Supponiamo di avere la nostra immagine I 1 e di imporre un rumore con M=0 e N=0. 05 G=imnoise(I 1, ’gaussian’, 0, 0. 05); imshow(G);
Filtro Per ripulire dall’errore, si può utilizzare un filtro gaussiano Si costruisce il parametro h=fspecial(‘gaussian’, hsize, sigma); T 1=imfilter(G, ‘replicate’, h); Es: h=fspecial(‘gaussian’, 1, 0. 5); T 1=imfilter(G, h);
- Slides: 37