sábado, 19 de octubre de 2019

Ecualizar una imagen con Python

Introducción


Python es un lenguaje de programación interpretado con una sintaxis que favorece un código legible. Soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. También posee licencia de código abierto. 
Una de sus grandes virtudes es la posibilidad de automatizar procesos que se hacen de manera mecánica. Reducirlos a unas líneas de código que podremos insertar donde necesitemos, ahorrando mucho tiempo que podremos aprovechar para otras tareas más interesantes.

Dentro de los lenguajes de programación, Python destaca por su sencillez, legibilidad y precisión de sintaxis. Es un lenguaje de muy alto nivel, por lo que con pocas líneas de código es posible programar tareas bastante complejas. Este lenguaje es práctico en cuanto  al uso del código.
 En este ejemplo de utilización de Python ecualizaremos una imagen con unas pocas líneas de código.
La ecualización del histograma de una imagen es una transformación para obtener un histograma con una distribución uniforme. Es decir, que exista el mismo número de pixels para cada nivel de color del histograma 
El resultado de la ecualización maximiza el contraste de una imagen sin perder información.
Antes de nada nos descargaremos a nuestro equipo Anaconda, que es una distribución gratuita y de código abierto de los lenguajes de programación Python y R para aplicaciones relacionadas con ciencia de datos y aprendizaje automático. 

Pasos prácticos


Descargamos anaconda de 


Una vez instalado Anaconda veremos una pantalla similar a esta.

Panel de entrada de Anaconda



Anaconda incluye El Notebook Jupyter  que es una aplicación web de código abierto que le permite crear y compartir documentos que contienen códigos, ecuaciones, visualizaciones y textos narrativos. Se puede utilizar para limpieza y transformación de datos, simulación numérica, modelado estadístico, visualización de datos y aprendizaje entre otras cosas.
Lanzamos el editor Jupyter pulsando el botón Launch de la aplicación que aparece en la pantalla de entrada de Anaconda. Hecho esto veremos los directorios de la instalación, elegimos el directorio pictures. 

Panel de entrada de Jupyter


Previamente habremos dejado en este directorio una imagen cualquiera en formato .jpg para ecualizar. De tal modo que al elegir pictures veamos nuestro fichero cargado. Ahora pulsamos el combo de la derecha donde dice New.

Directorios en Jupyter

Elegimos nuestro lenguaje de programación, en este caso Python3 que será con el que trabajaremos.

Lenguaje en Jupyter


Hecho esto, el editor jupyter nos abre un editor de líneas de código, sobre el que escribiremos nuestras instrucciones. 

editor de código Jupyter


Tecleamos:
import sys
sys.version

Y pulsamos sobre el botón Run de la barra superior para ejecutar la instrucción, esto como salida nos mostrará la versión de Anaconda instalada.

ejecutar una instrucción phyton en Jupyter

Como es un lenguaje interpretado, podemos ir escribiendo trozos de código y ejecutándolos sin necesidad de escribir un programa completo. 
Después escribimos las siguientes líneas.

Import numpy as np
Import matplotlib.pyplot as plt
From PIL import Image, ImageOps
%matplotlib inline

Y lo ejecutamos.

ejecutar Phyton en Jupyter


Buscamos la ubicación física de la imagen

Buscamos la ubicación física de la imagen

También podemos ver si está, desde el editor haciendo %ls.

%ls Phython

Al elegirla nos muestra sus datos.

Datos de imagen jpg en Python

Ahora escribimos

type(img)
img.shape
img_pil = Image.fromarray(np.uint88(img))
img_pil = ImageOps.equalize(img.pil)
plt.imshow(img_pil)

Ecualizar una imagen con Python


Al escribir estas líneas y pulsar Run vemos la imagen ecualizada.

Ahora podemos ver el histograma inicial tecleando:

img2 = np.asarray(img_pil)
plt.imshow(img2)
plt.hist(img.ravel())

Ecualizar una imagen con Python



Histograma de una foto
Y poniendo plt.hist(img2.ravel()) vemos el histograma ecualizado.

Histograma ecualizado de una foto

Finalmente podemos guardar la imagen ecualizada haciendo:

np.save(‘mi_imagen’, img2) #.npy
%ls 
np.load(‘mi_imagen.npy’)

Guardar una foto en Python

De este modo la imagen  ecualizada se guarda en formato Pyhton.

No hay comentarios:

Publicar un comentario