# Ecualización del histograma

La ecualización del histograma de una imagen es una transformación que pretende obtener para una imagen un histograma con una distribución uniforme. Es decir, que exista el mismo número de píxeles para cada nivel de gris del histograma de una imagen monocroma.
La función de la ecualización es:
$v(i,j)={\frac {Fu(u(i,j)-Fu(a))}{1-Fu(a)}}(L-1)+0.5$
En teoría, la aplicación de esta operación debería transformar el histograma en otro con una forma perfectamente uniforme sobre todos los niveles de gris. Sin embargo, en la práctica esto no se va a poder conseguir pues se estaría trabajando con funciones de distribución discretas en lugar de continuas. En la transformación, todos los píxeles de un mismo nivel de gris se transformarán a otro nivel de gris, y el histograma se distribuirá en todo el rango disponible separando en lo posible las ocupaciones de cada nivel.
El resultado de la ecualización maximiza el contraste de una imagen sin perder información de tipo estructural, esto es, conservando su entropía (información).

## Análisis de los canales de color de una imagen haciendo uso de histogramas

Una imagen digital está compuesta por píxeles. Cada píxel es un punto con un valor de intensidad para cada canal y combinando los diferentes canales obtenemos el color deseado. En este caso se analiza el aporte de cada canal a la imagen. Estudiando los canales denominados RGB: rojo, verde y azul.
Cada píxel toma un valor entero entre 0 y 255 (píxeles de 8 bits) para asignarle un color, generando una escala entre estos valores para cada canal. De esta manera, las zonas más oscuras de una imagen estarán representadas por píxeles con valores cercanos a 0, mientras que las zonas más claras con píxeles cercanos a 255.
De este modo, al analizar los canales RGB de una determinada selección de una imagen podemos saber el número de píxeles con cada valor (entre 0 y 255) que hay para cada canal. Al graficar número de píxeles en función del valor dentro de la escala obtenemos un histograma (un conteo de píxeles para cada valor).
Haciendo uso del programa ImageJ se obtiene el histograma de manera directa. Para ello seleccionamos primero la región de interés, y luego hacemos click en el menú Analyze-->Histogram. Inmediatamente el programa abre una nueva ventana donde aparece un histograma promedio de todos los canales tal y como vemos a continuación.
| Imagen a usar. | Menú Analyze->Histogram. |
Accedemos al histograma.
Al hacer click en el botón RGB vamos cambiando a los diferentes canales, y sus respectivos histogramas.
En la ventana 'Histogramas' también se muestran los valores para diferentes parámetros, que se muestran a continuación:
* Mode: es el valor que más veces aparece —se ve como el máximo del histograma—.
* Mean: es el promedio de todos los valores —generalmente es cercano a la moda—.
* Count: es el número de píxeles analizados.
* StdDev: es la desviación estándar, que puede aproximarse como el error en la determinación de la media.
* Min: valor mínimo del histograma.
* Max: valor máximo del histograma.
Al hacer click en el botón Copy se copia una tabla de valores que puede copiarse, por ejemplo, a una planilla de cálculo. En dicha tabla aparecerá el valor dentro de la escala del canal elegido, y el número de píxeles con dicho valor. De este modo se pueden copiar todos los datos a una hoja de cálculo para su posterior análisis (incluso se pueden realizar gráficas del histograma por cuenta propia).
Por ejemplo, en la hoja de cálculo con los datos proporcionados de un determinado histograma. La columna 'A' adquiere los diferentes valores del color y la columna 'B' adquiere el número de píxeles para dichos valores.
De manera que se puede realizar un análisis RGB de los canales de una determinada imagen y volcar la información obtenida en una hoja de cálculo, para su posterior análisis.

## Ejemplos de ecualización de histogramas

Se presentan a continuación distintos ejemplos de ecualización de histogramas mediante el uso del software libre ImageJ.
* Realce de contraste
Mediante esta técnica se mejora el contraste de la imagen ampliando el rango del histograma. Por ejemplo en la imagen presentada a continuación, la figura del Maneki-Neko presenta un contraste bueno, sin embargo la mesa sobre la que está apoyada no presenta un contraste tan óptimo. Mediante realce de contraste, podemos observar como se redistribuyen los valores del histograma, para cubrir una mayor zona y mejorar el contraste de la mesa.
| Histograma imagen original | Histograma imagen realzada |
* Ecualización manual del histograma
Proceso básico utilizado por ejemplo en el mundo de la medicina, concretamente en radiología. Mediante la modificación del brillo y contraste de la imagen, se pueden observar tejidos de distintas densidades en las imágenes radiológicas, tanto en las modalidades de radiografía convencional, tomografía computarizada, mamografías, etc … A continuación podemos observar un corte de imagen de una exploración de tomografía computarizada. Variando el contraste y brillo de la imagen se pueden realzar las zonas óseas o los pulmones y sus bronquios.
| Imagen CT original | Imagen CT con realce de huesos | Image CT con realce para pulmón |
| Histograma imagen original | Histograma de CT con realce para huesos | Histograma de CT con realce de pulmón |

## Uso de ImageJ para Ecualizar histogramas

Como se ha mencionado más arriba la ecualización del histograma de una imagen (representación de cómo se distribuye la información de una imagen en forma de sucesos con una determinada frecuencia), sirve en primera instancia para mejorar el contraste de ésta sin perder la información de tipo estructural.
Hay dos modos sencillos de ecualizar un histograma en ImageJ, para ilustrarlos, partimos de una imagen de prueba de la que obtenemos su histograma de niveles de gris mediante los comandos:
| Imagen Original | Histograma Original |
* El primer modo consiste en ajustar manualmente el rango del histograma, para ello,usamos los siguientes comandos:
Nos aparecerá la siguiente ventana:
Variando los valores del mínimo y el máximo del histograma veremos como automáticamente van variando los valores de brillo y contraste. Ajustando el intervalo sobre la zona del histograma en la que tenemos señal, conseguimos una posterior redistribución de éstos niveles del histograma que abarcarán todo el rango inicial aumentando así el contraste entre píxels.
El resultado tanto de la imagen como del histograma es el siguiente:
| Imagen Ecualización Manual | Histograma Ecualización Manual |
Como podemos comprobar, ha aumentado el brillo de la imagen y se resuelven mejor los detalles.
2. El segundo modo de ecualizar el histograma de una imagen es más automático,mediante el uso de los comandos:
Nos aparece entonces el siguiente cuadro de diálogo:
En el que marcamos la opción de “Equalize histogram”.
El valor que introducimos en “Saturated pixels” indica que estamos dejando que en la nueva distribución de sucesos del histograma se tenga un 5% (en este caso) de píxels en el rango del valor máximo del histograma (255 en nuestro caso), es decir, que se puede regular el grado de saturación de la imagen.
El resultado de esta ecualización es el siguiente:
| Imagen Ecualización Automática | Histograma Ecualización Automática |
En este caso vemos como la ecualización automática ha repartido de un modo más eficiente los valores de gris entre los píxels de la imagen.
Podríamos haber obtenido este mismo resultado con el método anterior si, en la ventana B&C hubiésemos presionado el botón “Auto” que aparece en la parte inferior.
Comparando ambo métodos, vemos cómo la ecualización automática es más efectiva a la hora de optimizar el proceso para obtener el mejor contraste posible, mientras que la ecualización manual nos permite ajustar el histograma de la imagen en función de lo que realmente queramos resaltar de ella, nos da más libertad de ajuste aunque el resultado no sea el óptimo.