Si profundizamos un poco más en el significado del histograma nos damos cuenta que si dividimos cada componente del mismo por el número total de pixels que tiene la imagen, obtenemos una funcion de probabilidad (fdp) de cierto tono de gris en la imagen. Podemos hallar la función de distribución (FD) de esta fdp. Pues si usamos la FD como función de transferencia de la imágen de entrada, obtendremos una imagen igualada o ecualizada.
Con la ecualización lo que conseguimos es obtener un histograma más uniforme, distribuyéndose las gamas de tonos que más aparecen por todo el histograma. Esto logra una aumento del contraste en ciertas zonas de la imagen, resaltando detalles que antes no se veía. De hecho, si en vez de trabajar con variables discretas lo hiciéramos con contínuas, lo que obtendríamos sería una señal de salida con su histograma (contínuo) plano.
La diferencia con una simple modificación del contraste además de mejores resultados es que tal y como está construida la función de transferencia, no se pierde información y por tanto siempre podríamos recuperar la imagen original. Se podría decir que lo que se obtiene con la igualación es un aumento de contraste enlas zonas de la imagen más necesarias.
A continuación presentamos una applet en la que se obtiene los
ecualizados de varias imágenes, pudiendose observar tanto la imagen
como el histograma, tanto el original como el igualado.
A continuación nos pararemos un poco más en la formulación y programación del ecualizado. Supongamos un histograma con L nivels de gris siendo estos niveles de valor Nk con k=0,1,...,L-1. Sea N el total de pixels de la imagen. La función de probabilidad que sacamos del histograma será:
pr(Rk)=Nk/N con k=0,1,...,L-1
Con esto podemos obtener una función de transferencia:
T(Rk)=sum(j=0,k,Nj/N)=sum(j=0,k,pr(Rj))
siendo sum(j=a,b,F(j)) el sumatorio con cotas a y b de la función discreta F(j).
Esta función está definida entre 0 y 1 así debemos multiplicarlo por (L-1) para poder aplicarla a nuestra imagen. Aplicando esta función de transferencia nuestra imagen, obtenemos como imagen de salida una ecualización del histograma de la de entrada. El pseudocódigo para hallar esta función de transferencia podría ser:
ft[0]=Histograma_Entrada[0]/n_maximo_pixels;
for (i=1;i<Tamaño_Maximo_Histograma;i++)
ft[i]=ft[i-1]+Histograma_Entrada[i]/n_maximo_pixels;
Siendo ft[] la función de tranferencia, Histograma_Entrada[] la matriz que tiene el histograma de la imagen de entrada y n_maximo_pixels el número de pixels que tiene dicha imagen. Hay que tener en cuenta que si queremos usar ft[] con una imagen habría que multiplicar cada elemento por el número de niveles de gris que estemos trabajando(que es Tamaño_Maximo_Histograma).
![]() |
![]() |
![]() |