|
Matlab per l'elaborazione delle immagini digitali: elementi strutturali e operatori morfologici per modificare le immagini
Lo script qui presentato modella, con degli operatori morfologici, un'immagine di input (creata, in questo caso, all'interno dello script).
Verrà fatto uso, quindi, di 'operatori morfologici' messi a disposizione da Matlab (ne verranno mostrati solo tre: imerode, imdilate e imclose; sono disponibili altri strumenti, per i quali si rimanda, però, alla documentazione di Matlab) e di elementi strutturali per la modellazione, creati mediante la funzione di libreria strel (per maggiori informazioni, digitate 'help strel' , senza apici, nella Command View di Matlab).
L'analisi della teoria che sta alla base della modifica delle immagini digitali mediante elementi strutturali e operatori morfologici esula da questa trattazione.
NOTA IMPORTANTE: utilizzare, con questo script, solo immagini in scala di grigi a 8 bit, o Matlab restituirà un errore per via delle dimensioni delle matrici, che non coincideranno.
Per alcuni comandi di manipolazione delle immagini in forma di matrici (size, cicli for, uint8, ...) si rimanda all'articolo, pubblicato precedentemente, sulle basi dell'elaborazione delle immagini digitali mediante Matlab.
Ecco il codice dello script:
% Creo un'immagine in bianco e nero all'interno di Matlab
clear;
immagine = zeros(250,250);
immagine(50:150, 50:100) = 1;
immagine(150:200, 50:200) = 1;
immagine(50:150, 150:200) = 1;
% Prima applicazione ('caso A') di operatori morfologici, in realtà doppia: un passo di erosione con elemento strutturante di forma rettangolare seguito da un passo di dilatazione con elemento strutturante di forma circolare
matrice1c = ones(52, 51);
elementoStrutturante1a = strel('arbitrary', matrice1c);
casoAprimoPasso = imerode(immagine, elementoStrutturante1a);
elementoStrutturante2a = strel('disk', 15);
casoAsecondoPasso = imdilate(casoAprimoPasso, elementoStrutturante2a);
% Seconda applicazione ('caso B') di operatori morfologici, anche questa doppia: dilatazione con elemento circolare seguita da chiusura con elemento circolare
elementoStrutturante1b = strel('disk', 10);
casoBprimoPasso = imdilate(immagine, elementoStrutturante1b);
elementoStrutturante2b = strel('disk', 15);
casoBsecondoPasso = imclose(casoBprimoPasso, elementoStrutturante2b);
% Mostro a video l'immagine originale e i risultati ottenuti, mostrando anche i passaggi intermedi (primo e secondo passo, per entrambi i casi, un caso per riga)
subplot(2,3,1); imshow(immagine);
subplot(2,3,2); imshow(casoAprimoPasso);
subplot(2,3,3); imshow(casoAsecondoPasso);
subplot(2,3,4); imshow(immagine);
subplot(2,3,5); imshow(casoBprimoPasso);
subplot(2,3,6); imshow(casoBsecondoPasso);
Bye !
|