Compensazione del Background
Un metodo alternativo per arrivare all'identificazione degli oggetti dell'immagine grani-riso.png si avvale della capacità di imopen di trattare anche immagini a grayscale. Mentre con un'immagine binaria l'operazione i pixel vengono semplicemente posti a 0 dall'operazione di erosione nel caso di un'immagine grayscale la funzione sceglie tra i pixel adiacenti un'intensità luminosa e l'attribuisce al pixel che viene così ridefinito con un nuovo valore, invece che essere semplicemente posto a 0. Questo l'effetto
%
% -- rmbackground.m
%
% Applicazione dell'opening di un'immagine grayscale per stimare l'illuminazione
% dello sfondo dell'immagine nel caso di illuminazione variabile
%
% Prendiamo la solita immagine dei grani di riso
%
img = imread('grani-riso.png');
img = mat2gray(rgb2gray(img));
figure(1); imshow(img)
% e facciamo l'operazione di 'opening' (erosione seguita da dilatazione)
% usando un elemento strutturante a forma circolare con raggio 15.
% Essendo così grande il raggio l'effetto finale è di cancellare tutti
% i grani rimpiazzandoli con l'intensità dello sfondo adiacente ad essi.
background = imopen(img,strel('disk',15));
figure(2); imshow(background)
% I livelli di intensità possono essere visualizzati anche con un grafico 3D
% (il numero di punti viene decimato per questioni di velocità)
figure(3); surf(background(1:8:end,1:8:end)));
% andiamo a sottrarre il background e mostrare il risultato
figure
img2 = imsubtract(img,background)
imshow(img2)
% riproviamo a determinare una soglia per questa immagine corretta
% Prima di tutto la convertiamo nel range [0,1]
img2 = mat2gray(img2);
% quindi calcoliamo la soglia semplicemente con il metodo di Otsu
soglia = graythresh(img2);
% quindi creiamo la nuova immagine binaria: Una piccola correzione
% morfologica sarebbe in grado di individuare tutti i grani presenti
% nel campo dell'immagine
bwimg2 = im2bw(img2,soglia);
imshow(bwimg2);
% -- rmbackground.m
La sequenza di comandi che elabora la nuova immagine dopo aver fatto il detrending
del background è equivalente a usare la funzione
imtophat
.
L'immagine ottenuta dalla sottrazione potrebbe ulteriormente essere
migliorata usando la funzione di aumento del contrasto
imadjust
con uno dei suoi metodi