Funzioni Matlab per la manipolazione e l'elaborazione delle immagini digitali: le basi.
Questo articolo vuole essere un'introduzione ai comandi di base per manipolare delle immagini mediante Matlab.
Per caricare un'immagine presa dal disco nell'area di lavoro di Matlab, bisogna utilizzare la funzione:
imread('nomefile.estensione'); .
Ovviamente, così facendo non depositeremo l'immagine da nessuna parte, per cui è necessario creare una variabile, ad esempio 'immagine', e scrivere:
immagine = imread('nomefile.estensione'); .

'immagine' diverrà quindi una matrice (potete averne conferma, e leggere alcuni dati, consultando il Workspace), di dimensioni mxn, con m numero di righe (ossia: l'altezza, in pixel, dell'immagine) ed n di colonne (la larghezza, in pixel, dell'immagine). Ogni cella della matrice, richiamabile con:
immagine(x,y)
(con x e y coordinate del pixel nell'immagine) conterrà il valore associato a quel pixel, utile soprattutto se la vostra immagine è in scala di grigi in bianco e nero; le immagini a colori (RGB) o con alpha (RGBA) vengono memorizzate come matrici MxNxd, dove d è il numero di livelli: 3 se RGB, 4 se RGB con Alpha.
Scrivendo:
immagine(x,y,2)
otterrete il valore dell'intensità DEL COLORE VERDE (canale 2, cioè G, verde), espresso generalmente con un valore uint8 (cioè unsigned int 8 bit: da 0 a 255, per intenderci), del pixel di posizione x (coordinata verticale), y (coordinata orizzontale).
Per memorizzare i valori di altezza e larghezza dell'immagine nelle variabili M ed N rispettivamente, potete utilizzare il comando:
[M, N] = size(immagine) ; .
Scrivendo semplicemente M o N nella finestra dei comandi, e premendo invio, vi verrà mostrato a video il valore dell'altezza o della larghezza in pixel dell'immagine.
Potete creare una nuova variabile-immagine a partire da un'altra, ad esempio per effettuare test diversi senza dover ricaricare il file, semplicemente con = :
immagine2 = immagine; .
A questo punto, per effettuare 'operazioni puntuali' (pixel per pixel, per intenderci) sull'immagine, potete 'scorrere' la stessa con, ad esempio, uno o più cicli for, per elaborare tutta l'immagine o parti di essa, o ancora tutti i canali o solo un canale-colore.
La porzione di script seguente illustra, ad esempio, come rendere tutta l'immagine interamente bianca:
for m=1:M for n=1:N immagine2(m,n) = 255; end; end; .
E per visualizzare quanto fatto? Utilizzate il comando:
imshow([nomeVariabileImmagine]);
imshow(immagine2).
Per salvare l'immagine così prodotta su disco, utilizzate la funzione:
imwrite(variabile, '[nomeDelFile]', '[formatoDelFile]');
imwrite(immagine2, 'immagine2.jpg', 'jpg'); .
che salverà l'immagine nella directory dell'area di lavoro di Matlab. Attenzione: Matlab non vi chiederà il permesso di sovrascrivere eventuali file omonimi, ma lo farà e basta, senza avvertirvi nè prima nè dopo averlo fatto!
Potete anche salvare parti o parti di canali dell'immagine, semplicemente depositando queste sezioni in una nuova variabile e salvando quest'ultima su disco, utilizzando ad esempio uno script del genere, che ricopia un quadrato di dimensioni 30x30 pixel preso a partire dal vertice (101,301) (con 101 coordinata verticale) di immagine, METTENDO PERO' A ZERO (cioè annullandolo) IL CONTRIBUTO DEL CANALE VERDE (2) DELL'IMMAGINE ORIGINALE:
porzione = ones(30,30,3); % Crea una matrice di dimensioni 30x30x3 porzione = uint8(porzione); % Rende la matrice una matrice di uint8 (il tipo di dati di default di una matrice-immagine) for m=101:130 for n=301:330 porzione(m-100,n-300,1) = immagine(m,n,1); porzione(m-100,n-300,2) = 0; porzione(m-100,n-300,3) = immagine(m,n,3); end; end; imwrite(porzione, 'porzione.jpg', 'jpg');
(ovviamente, per poter utilizzare questo script così come l'ho scritto, la vostra immagine dovrà essere più larga di 330 pixel e più alta di 130 pixel).
Questi sono solo alcuni (pochissimi, per la verità !) dei comandi utilizzabili in Matlab per l'elaborazione delle immagini digitali; ne troverete altri negli articoli che pubblicherò in futuro e, ovviamente, nella documentazione del programma. Vi ricordo che per ottenere ulteriori informazioni su di un comando è sufficiente digitare:
help nomecomando;
help imwrite; .
nella Command View di Matlab.
A presto!
Risorse consigliate su Matlab:
|