L'istogramma di un'immagine indicizzata è un grafico bidimensionale nel quale sull'asse orizzontale ci sono i valori di luminosità (brightness) dell'immagine e sull'asse verticale il numero di pixel dell'immagine che hanno tale luminosità.

Nel caso di immagini RGB l'istogramma viene realizzato sull'immagine trasformata in scala di grigi. Se si vuole analizzare l'esposizione per ogni singolo colore è necessario indicizzare l'immagine a associarvi una sola componente di colore alla volta (in questo caso immagine RGB presenta tre istogrammi, uno per colore).

Gli algoritmi dell'editing delle immagini permettono all'utente, tra l'altro, di variare la luminosità dei pixel e dinamicamente di mostrare l'effetto di tali variazioni (permettendo di accettarle o scartarle). In questo modo è possible ottenere miglioramenti in temini di luminosità e contasto.

Nell'ambito della visione artificiale, gli istogrammi sono utili nel thresholding (individuazione di valori di soglia); l'analisi dei picchi e delle valli dell'istogramma permette infatti di determinare dei valori di soglia.  Il valore soglia si può utilizzare per la segmentazione di immagini, la matrice di co-occorrenza e il riconoscimento dei contorni.

In Matlab la funzione imhist() permette di visualizzare l'istogramma di un'immagine indicizzata. Esistono vari metodi per richiamarla:

  • Se I è un'immagine, imhist(I) formisce l'istogramma. Ad esempio:
I = imread('peppers.png');
imshow(I);
figure;
imhist(I);
 

pepper.png è un'immagine di default di Matlab.

  • Se imhist() viene chiamata chiedendo di restituire due vettori
[conteggio, luminosita] = imhist(I);
vengono restituiti i valori di luminosità e il conteggio dei pixel che hanno tale livello di luminosità, ad esempio:
 
>> I = imread('peppers.png');
>> [conteggio, luminosita] = imhist(I);
>> bar(luminosita,conteggio);
 
  • imhist() può essere chiamata con due argomenti indicando anche il numero di livelli luminosità sui quali realizzare l'istogramma. Ad esempio:
>> I = imread('peppers.png');
>> imhist(I,20);
  • Se l'immagine è indicizzata, quindi possiede una matrice della luminosità A e la relativa colormap cmap, imhist(A, cmap)  restituisce il relativo istogramma. Ad esempio nel caso dell'immagine indicizzata (di default) di Matlab trees.tif
>> [X ,map] = imread('trees.tif');
>> imshow(X,map);
>> figure
>> imhist(X,map);
 
nel caso specifico l'istogramma assume un aspetto così strano perché l'immagine è indicizzata con una colormap a 128 valori.
 
Aumentare il contrasto di un'immagine IN SCALA DI GRIGI

Il contrasto dell'immagine in scala di grigi, prima dell'elaborazione, può essere incrementato utilizzando la funzione imadjust() .

La funzione accetta come input un'immagine e restituisce un'immagine di output modificata in modo che l'intervallo di intensità dei pixel dell'immagine in modo che l'1% dei dati sia saturato a bassa e alta intensità.

Lo script qui sotto riportato illustra gli effetti della funzione, si ricorda che funziona solo su immagini in scala di grigi.

 

I = imread('peppers.png');
I2 = rgb2gray(I);
[conteggio2, luminosita2] = imhist(I2);
I3 = imadjust(I2);
[conteggio3, luminosita3] = imhist(I3);
figure
imshow(I2)
title('Immagine di partenza')
figure
imshow(I3)
title('Immagine più contrastata')
figure
subplot(2,1,1)
bar(luminosita2,conteggio2);
title('Istogramma prima della correzione');
subplot(2,1,2)
bar(luminosita3,conteggio3);
title('Istogramma dopo della correzione');
 

Ultime modifiche: lunedì, 1 gennaio 2024, 21:20