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]
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.
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
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 pltimport numpy
import cv2
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 i in range (reg):Probabilidad = np.zeros(256)
SAcomula = np.zeros(256)
imgEcualizada=np.zeros((reg,col),dtype=np.uint8)
for j in range (col):
V = img[i, j]
Histograma[V] = Histograma[V] + 1
for i in range (256):
Probabilidad[i]= ( Histograma[i]/Tpixel)
for i in range (256):
SAcomula[i]= SAcomula[i-1]+Probabilidad[i]
for i in range (reg):
for j in range (col):
imgEcualizada[i,j]=SAcomula [img[i,j]]*255
for i in range (256):
Probabilidad[i]= ( Histograma[i]/Tpixel)
for i in range (256):
SAcomula[i]= SAcomula[i-1]+Probabilidad[i]
for i 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()
cv2.imshow('Ecualizada',imgEcualizada)
plt.hist(imgEcualizada.ravel(),256,[0,256], width=5, color='b')
plt.show()
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