jueves, 10 de noviembre de 2016

ECUALIZACIÓN DE UN HISTOGRAMA

Veamos que cambios se obtienen en el Histograma al ecualizar la imagen.


import numpy as np
from matplotlib import pyplot as plt                                             #Impportamos las librerias
import cv2

img=cv2.imread('C:\Users\L\Desktop\python\lobo.jpg',0)          #Abrimos una imagen
ecu=cv2.equalizeHist(img)                                                           #Ecualizamos el histograma
ed=np.hstack((ecu,img))                                                               #Lo almacenamos en una variable
cv2.imwrite('ed.png',ed)                                                                #Muestra las imagenes juntas

cv2.imshow('ECUA',ed)                                                                #Muestra la imagen original
cv2.imshow('ECUA',ecu)                                                              #Muestra la nueva imagen
hist=cv2.calcHist([ecu],[0],None,[256],[0,256])          #Grafica el histograma de la imagen ecualizada
plt.hist(ecu.ravel(),256,[0,256]);plt.show()                                   #Muestra el histograma ecualizado
k=cv2.waitKey(0)
cv2.destroyAllWindows()


VISUALIZACIÓN:

Imagen normal:

Imagen Ecualizada: 



Histograma Normal:

Histograma Ecualizado:

CASO 3 

Cambiaremos el valor de la variable para visualizar las diferencia en la imagen.

import numpy as np                                                 #Importamos las librerias
import cv2

img=cv2.imread('C:\Users\L\Desktop\python\pag,jpg',0)          #Agregamos una imagen
row,col=img.shape                                                                       #Tamaño de la imagen
caso=np.zeros((row,col),dtype=np.uint8)                                     #Creamos matriz
a=130                                                                                          #Asignamos valor
for i in range (0,row):
     for j in range (0,col):                                                              #Recorremos la matriz
          x=img[i,j]                                                                          #Guardamos la imagen en una variable
          if a<x:                                                                                #Verificamos las condiciones
               caso[i,j]=0
          elif a>x:
               caso[i,j]=255

cv2.imshow('IMAGEN',img)                                                     #Mostramos la imagen original
cv2.imshow('NUEVA',caso)                                                      #Mostramos la nueva imagen
k=cv2.waitKey(0)
cv2.destroyAllWindows()


VISUALIZACIÓN:
'a'  con valor de 130


                      'a' con valor de 60 


CASO 2

Se pueden cambiar los valores de x y n para cambiar la nueva apariencia en la imagen nueva.


import numpy as np
import cv2                                                                 #Importamos librerias

img=cv2.imread('C:\Users\L\Desktop\python\galaxy.jpg',0)
row,col=img.shape                                                   #Tamaño de la imagen
caso=np.zeros((row,col),dtype=np.uint8)                   #Creamos la matriz
x=50
n=200                                                                        #Asignamos los valores
for a in range (0,row):
       for b in range (0,col):                                           #Recorremos la matriz
             f=img[a,b]                                                      #Almacenamos la imagen en una variable
             if  x<f  and  f<=n:                                           #Comparamos las condiciones
                  caso[a,b]=255
             else:
                   caso[a,b]=img[a,b]

cv2.imshow('IMAGEN',img)                                    #Mostramos la imagen original
cv2.imshow('NUEVA',caso)                                     #Mostramos la nueva imagen
k=cv2,waitKey(0)
cv2.destroyAllWindows()


VISUALIZACION:




HISTOGRAMA DE UNA IMAGEN


Un histograma es un gráfico en el cual se da una idea de la distribución de los niveles que tiene la imagen. Una gráfica con los valores de píxeles que van de 0 a 255 (aunque no siempre es así).

NOTA: es necesario instalar la librería matplotlib para mostrar el histograma.


import numpy as np
from matplotlib import pyplot as plt                  #Importamos las librerias necesarias
import cv2
img =cv2.imread('C:\Users\L\Desktop\python\lobo.jpg',0)
cv2.imshow('IMAGEN',img)                              #Mostramos la imagen original
hist=cv2.calcHist([img],[0],None,[256],[0,256])       #Calcula el histograma de rango [0:256]
plt.hist(img.ravel(),256,[0,256]);plt.show()          #Muestra la gráfica del Histograma
print hist                                            #Muestra los valores del Histograma
k = cv2.waitKey(0)
cv2.destroyAllWindows()

Visualización:



CASO 1


import numpy as np
import cv2                                                                 #Importamos las librerias

img = cv2.imread('C:\Users\L\Desktop\python\gatonegro.jpg',0)
row,col=img.shape                                                 #tamaño de la imagen

caso1=np.zeros((row,col),dtype=np.uint8)                  #Creamos la matriz
a=30
b=80                                                                    #Damos los valores a los intervalos
for i in range(0,row):
    for j in range(0,col):                                           #Recorremos la matriz
        x=img[i,j]                                                       #Almacenamos en una variable la imagen principal
        if a < x and x < b:
            caso1[i,j]=255                                            #Aplicamos la Formula
        else:
            caso1[i,j]=0
cv2.imshow('IMAGEN',img)                                  #Mostramos la imagen original
cv2.imshow('CASO1',caso1)                                 #Mostramos la nueva imagen
k=cv2.waitKey(0)


Visualizacion:



martes, 8 de noviembre de 2016

AUMENTAR CONTRASTE

El contraste es una cierta forma de medir el rango dinámico de los colores de la imagen, si la imagen esta poco contrastada su margen dinámico es muy pequeño, en cambio si la imagen esta bastante contrastada tiene una amplia diversidad de colores con valores altos y bajos.


import numpy as np
import cv2                                                  #Importamos las librerias

img = cv2.imread('C:\Users\L\Desktop\python\cubos.jpg', 0)
row, col = img.shape                                                     #Tamaño de la imagen
contraste = np.zeros((row, col), dtype=np.uint8)         #Creamos la matriz
np.amin(img)                                             #Minimo de la imagen
a=np.amin(img)                                         #Guardamos el valor minimo en una variable
np.amax(img)                                            #Valor maximo
b = np.amax(img)                                      #Guardamos el valor maximo en una variable
for i in range(0, row):                                 #Recorremos la matriz
    for j in range(0, col):
        contraste[i, j] = (img[i, j] - b) * 255 / (a - b)                 #Formula para el contraste

cv2.imshow('ESCALA DE GRISES',img)              #Mostramos la imagen original
cv2.imshow('CONTRASTADA',contraste)             #Mostramos la imagen mejorada
k=cv2.waitKey(0)
cv2.destroyAllWindows()


VISUALIZACIÓN:


TRANSFORMACIÓN LOGARÍTMICA

La transformación logarítmica es similar ala exponencial, solo que sin el problema de desbordes.
En el siguiente programa podemos mirar como mejora el contraste y brillo de la imagen, permitiéndonos visualizar detalles que no se apreciaban antes de ello. 


import numpy  as np
import cv2                                                                           #Importamos las librerias
import math
img = cv2.imread ('C:\Users\L\Desktop\python\cubos.jpg',0)                      
row, col=img.shape                                                            #Tamaño de la imagen
log=np.zeros((row,col),dtype=np.uint8)                            #Creamos la  matriz
np.amax(img)                                                                    #máximo de la imagen
f=np.amax(img)                                                                 #guardamos el maximo en una variable
c=255/math.log10(1+b)                                                   #se calcula C= 255/log10(1|R|)
                                                                                                
for a in range(0,row):                                                     #Recorremos la matriz
      for b in range (0,col):
               log[a,b]= c*math.log10(1+img[a,b])           #se aplica la formula S(x,y)=Clog10(1+r)
                              
cv2.imshow ('IMAGEN',img)                                                       #Muestra la imagen original
cv2.imshow ('TRANSFORMACIÓN', log)                                  #Muestra la mejora de la imagen
k=cv2. waitKey(0)
cv2.destroyAllWindows()

VISUALIZACIÓN: