Elaborazione digitale delle immagini: l’istogramma

L’istogramma di un immagine è una stima a posteriori del numero di pixel avente stesso livello di grigio nel caso di un immagine monocromatica e più in generale avente lo stesso valore. Esso risulta molto comodo per diversi scopi dato che fornisce un rappresentazione alternativa e globale dell’immagine, risulta ad esempio utile per comprendere quale algoritmo applicare per il miglioramento di un immagine, per esempio un istogramma di questo tipo

ist.jpg

mostra un gran numero di pixel concentrati nei livelli bassi, l’immagine risulterà molto scura, al contrarioun istogramma di questo tipo

ist2.jpg

indicherà un immagine bilanciata su più livelli.

Possiamo calcolare l’istogramma mediante matlab in due modi, uno seguendo la definizione data all’inizio di questo articolo, uno utilizzando una funzione che matlab ci mette a disposizione. Utilizzando la definizione non dobbiamo far altro che leggere l’immagine e controllare valore per valore assunto dal pixel presente nell’immagine, raggrupparli per valori e tenere il conto, poi non resta che stampare il grafico utilizzando le barre:

%leggo l’immagine
f=imread(‘img.jpg’);
%ottengo le dimensioni e il numero di colori
[m,n,col]=size(f);
%se è monocromatica
if col==1
vet=0;
%analizzo ogni pixel
for i=0:1:255
%cerco nell’immagine altri pixel con lo stesso valore
flag=find(f==i);
%ottengo il numero dei pixel trovati
n=length(flag);
%catalogo il numero
vet(i+1)=num;
end;
%visualizzo l’immagine originale
imshow(f);
%visualizzo l’istogramma mediante le barre
figure, bar(vet);
end

il secondo metodo è quello che prevede l’utilizzo della funzione imhist ben documentata quì.

Annunci

Elaborazione digitale delle immagini: Filtri lineari e non lineari

 

In elaborazione digitale delle immagini si è soliti dividere i filtri da applicare alle immagini in lineari e non lineari, il filtro lineare più utilizzato e quello di media. Esso sostituisce al pixel centrale nel quale è centrata la maschera la media dei valori di tuti i pixel che ricadono nella stessa. Vediamo come applicare tale filtro in matlab (sito del produttore, scilab valida alternativa free a matlab):

f = imread(‘bimba.tif’);

m = ones(3)/9;

g = imfilter(f,m);

imshow(f), title(‘immagine originale’)

figure, imshow(g), title(‘immagine filtrata’);

la spiegazione è abbastanza semplice, applicando una maschera 3×3 la media mobile si realizzare attraverso l’istruzione

m = ones(3)/9;

il valore di m sarà:

>> m

m =

0.1111 0.1111 0.1111

0.1111 0.1111 0.1111

0.1111 0.1111 0.1111

l’applicazione del filtro avviene attraverso l’istruzione imfilter.

Un filtro non lineare molto importante è il filtro mediano, esso è molto utile per la riduzione del rumore impulsivo, esso msostituisce al pixel in esame un valore che ricade nella maschera tale che metà dei valori risulti inferiore ad esso e metà superiore, l’implementazionein matlab è:

%carico l’immagine

f = imread(‘monete.tif’);

%genero un rumore impulsivo

h = imnoise(f,'salt & pepper',0.02);

%applico il filtro mediano

g = medfilt2(h);

imshow(h), title(‘immagine con rumore’)

figure, imshow(g), title(‘immagine filtrata’)

l’effetto è il seguente: