martes, 18 de octubre de 2016

Aplicando métodos a una imagen poco contrastada

Imagen Poco contrastada



Histograma:

El histograma es de gran utilidad en el tratamiento de imágenes ya que con él se puede variar el aspecto de las imágenes.

La probabilidad P(g) de ocurrencia de un determinado nivel g se define como:

donde M es el número de píxeles en la imagen y N(g) es el número de píxeles en el nivel de intensidad g.

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

function
hist = Histograma(imagen)
im = cv2.imread('C:\Python2\piramid.jpg', 0)
imD = double(im);
[f, c] = size(imD);

for i=1:256h(i) = 0;
end

for i=1:f
for j=1:c
k = imD(i, j);
h(k + 1) = h(k + 1) + 1;
end
end
plot(h);
hist = h;
cv2.imshow('original', im)
print hist
k = cv2.waitKey(0)
cv2.destroyAllWindows()   

Brillo:

Se define el brillo de la imagen como el valor medio de la imagen que coincide con el valor medio del histograma.

Varianza:

Mide la dispersión de los alrededores de la media; está definida por:

            Una varianza alta corresponde a una imagen con contraste alto, y viceversa.

Asimetría:

            Mide la propiedad de su mismo nombre. Tiene como referencia la media en la distribución de los niveles de gris, está definida por:

Un valor absoluto alto de a indica una gran asimetría y un valor bajo, una asimetría pequeña.

Energía:

Nos informa sobre la distribución de los niveles de gris:
 

La energía tiene valor máximo 1 para una imagen con un único nivel de gris y disminuye a medida que aumenta el número de niveles de gris.

Entropía: 

También nos informa sobre la distribución de los niveles de gris:

Cuanto mayor es el número de niveles de gris en la imagen, mayor es la entropía. Esta medida tiende a variar inversamente con la energía.


Ecualización del Histograma:

En cualquier función de densidad probabilística que es transformada a uniforme se maximiza la explotación de la información. Este fenómeno que rige a los procesos continuos también se puede aplicar sobre información discreta.

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

img = cv2.imread ('C:\Python2\piramide.jpg',0)
equ = cv2.equalizeHist(img)
res = np.hstack((img,equ)) 
cv2.imwrite('res.png',res)


print ('en proceso...')

cv2.imshow('Piramid', img)cv2.imshow('resultado', res)
print ('Valores:')


plt.hist(equ.ravel(),256,[0,256])
plt.title('Histogram  equalice for gray scale Piramid')
plt.show()

hist = cv2.calcHist([equ],[0],None,[256],[0,256])

while True:
    k = cv2.waitKey(0) & 0xFF         if k == 17: break             cv2.destroyAllWindows()

print ('fin')