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