Istogrammi per Aumentare la Qualità delle Immagini

Un istogramma, in ambito di image processing, è un grafico che mostra quanti pixel di un’immagine hanno una certa intensità di colore. Prendiamo ad esempio un’immagine con 256 colori, si va dal nero ( valore 0 ) al bianco ( valore 255 ), in questo caso per costruire un istogramma occorre una sola passata dei valori. In pratica si prende ogni pixel dell’immagine e lo si mette in un array di valori, un algoritmo in C/C++ potrebbe essere questo:

int istog[255];

for (int i = 0; i < 256; i++)
   isto[i] = 0;

for (int x = 0; x < img.width; x++)
{
   for (int y = 0; y < img.height; y++)
   {
       clr = img[x][y];
       isto[clr]++;
   }
}

Al termine del doppio ciclo l’array istog conterrà un valore indicante quanti pixel dell’immagine hanno il colore n. Un istogramma fornisce quindi delle informazioni sul grado di nitidezza di un’immagine, in quanto a seconda della dimensione del picco centrale avremo degli sbalzi di colore ridotto rispetto ad un grafico con un picco molto più ampio.

Istogrammi

Due istogrammi di immagini con meno definizione di colore ed una con più definizione di colore

L’idea di fondo dell’histogram equalization è quindi quella di modificare l’istogramma dell’immagine rendendolo più ampio possibile in modo da renderlo equi-distribuito. Sono presenti tre fasi distinte in questo algoritmo:

  1. Costruzione dell’istogramma dall’immagine di partenza
  2. Modifica dell’istogramma
  3. Applicazione dell’istogramma all’immagine

La prima fase è stata già descritta in precedenza, la seconda non è complicata ed in pratica avviene in questo modo: dato un singolo colore i, il suo nuovo valore è dato dalla somma dei precedenti valori, moltiplicato per una certa quantità N = 256 / W * H.

nuovo valore i = ( istog[0] + … + istog[i] ) * N

La terza fase serve per ottenere la nuova immagine ed è molto semplice, infatti basta scandagliare il nuovo array istog_new ed assegnare ad ogni pixel il nuovo valore di colore.
L’histogram equalization è un semplice, ma efficace algoritmo che consente di migliorare il contrasto delle immagini. Ovviamente in questa sede ho spiegato soltanto la base di questo algoritmo, esistono anche delle note varianti e ci sono altri algoritmi molto conosciuti che si basano proprio su questo.

Informazioni su Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.
Questa voce è stata pubblicata in Grafica. Contrassegna il permalink.