domingo, 23 de octubre de 2016

ECUALIZACIÓN DEL HISTOGRAMA DE UNA IMAGEN

Ecualización del histograma

Dada una imagen MxN, con nk píxeles para cada nivel rk, la ecualización del histograma consiste en realizar la siguiente transformación sobre los niveles de intensidad de la imagen:[1]



Foto 1. Función para la ecualización del histograma 

El fundamento se basa en realizar una conversión en el histograma de forma que la probabilidad de cualquier nivel de gris en la imagen sea idéntica.

Lo que resulta en una dispersión del histograma en un rango mayor dentro del intervalo [0,L-1]. La principal ventaja de este método es que es completamente “automático”.[1]

 Pseudocodigo para la función  ecualización del histograma de una imagen

1. Leemos la imagen en escala de grises.
2. Se obtiene el tamaño de la imagen.
3. Creamos la matriz de tipo uint8 con el tamaño de la imagen .
5.Creamos los vectores Histograma, Probabilidad, SAcumula estos de ceros con un rango de 256  y una nueva matriz para realizar la función de ecualización.
6. Se realiza el recorrido de la matriz con dos ciclos for, una para filas y otro para columnas.
6.1.Realizamos la función correspondiente para calcular las ocurrencias de nivel de gris en este caso el histograma:
    V = img[i, j] 
         Histograma[V] = Histograma[V] + 1.
7. Realizamos el recorrido  del vector probabilidad con un for solo para filas.
7.1 Realizamos la función correspondiente para calcular la probabilidad en este caso:
        Probabilidad[i]= ( Histograma[i]/Tpixel).
8. Realizamos el recorrido  del vector SAcomula con un for solo para filas.
8.1 Realizamos la función correspondiente para calcular la suma acumulativa en este caso:
        SAcomula[i]= SAcomula[i-1]+Probabilidad[i]
9. Se realiza el recorrido de la matriz nueva para realizar la función de la ecualización con dos ciclos for, una para filas y otro para columnas.
9.1 Realizamos la función correspondiente para calcular la ecualización del histograma  en este caso: 
         imgEcualizada[i,j]=SAcomula [img[i,j]]*255
10. Mostramos la imagen original.
11. Mostramos su histograma con  parámetros necesarios usando la librería Maplotlip.
12. Mostramos la imagen ecualizada.
13. Mostramos su histograma ecualizado con parámetros necesarios usando la librería Maplotlip.
 9. Guardamos Imagen o el histograma si así lo requerimos.
10. Cerramos ventanas.
11. Fin


Código de la función ecualización del histograma de una imagen 


import numpy as np
import numpy 
import cv2
from matplotlib import pyplot as plt

img = cv2.imread ('C:\Users\EROS\Pictures\Procesamiento Digital\Caballo2.jpg',0)
reg,col=img.shape
g = np.zeros((reg,col), dtype = np.uint8)

Tpixel=reg*col


Histograma = np.zeros([256],int)
Probabilidad = np.zeros(256)
SAcomula = np.zeros(256)

imgEcualizada=np.zeros((reg,col),dtype=np.uint8)

for in range (reg):
    for j in range (col):
       V = img[i, j]
         Histograma[V] = Histograma[V] + 1

for in range (256):

         Probabilidad[i]= ( Histograma[i]/Tpixel)

for in range (256):

         SAcomula[i]= SAcomula[i-1]+Probabilidad[i]

for in range (reg):
    for j in range (col):
        imgEcualizada[i,j]=SAcomula [img[i,j]]*255

cv2.imshow ('Caballo',img)                         
plt.hist(img.ravel(),256,[0,256], width=5, color='r')
plt.show()    

cv2.imshow('Ecualizada',imgEcualizada)
plt.hist(imgEcualizada.ravel(),256,[0,256], width=5, color='b')
plt.show()    
                
k=cv2. waitKey(0)
if k == ord ('e'):
    cv2.destroyAllWindows()
elif k == ord('s'):
    plt.imwrite('C:\Users\EROS\Pictures\Procesamiento Digital\Foto1.jpg',g)

    cv2.destroyAllWindows()





    Foto 2. Ejemplo de una imagen original poco contrastada  y su respectivo histograma  



                     
              
                  Foto 3. Ejemplo de la imagen ya ecualizada  y su respectivo histograma 




Referencias

[1]http://alojamientos.us.es/gtocoma/pid/tema1-2.pdf

  Consulta 21 de octubre del 2016





No hay comentarios.:

Publicar un comentario