febrero 1, 2021 10:00 am

Jesús

Si se trata de computer vision, tiene sentido que nos apoyemos en mecanismos visuales para comprar imágenes y entender el resultado de las operaciones que llevamos a cabo, ¿cierto?

Por este motivo, en el artículo de hoy exploraremos tres mecanismos de comparación visual de dos imágenes:

  1. 1
    Comparación de Tablero de Ajedrez.
  2. 2
    Comparación por Diferencia.
  3. 3
    Comparación por Mezcla.

En el video de abajo puedes ver el resultado del script que implementaremos prontamente.

Al final de este post habrás aprendido

  • Cómo funciona la comparación de tablero de ajedrez, por diferencia y por mezcla.
  • Cómo implementar un script para demostrar estos métodos de comparación en scikit-image.

Creación del Entorno Virtual con virtualenv

Como de costumbre, empecemos echando un vistazo rápido a la estructura del proyecto:

datasmarts
└── compare.py

Como habrás advertido, la implementación de nuestro programa vivirá en el archivo datasmarts/compare.py.

Procedamos a crear y a activar el entorno de desarrollo con estos comandos:

Ahora, veamos las dependencias del proyecto:

Para instalar la lista ut supra, corremos esta instrucción en la terminal:

pip install -r requirements.txt

¡Esto es todo!

Implementación del Script de Comparación Visual con scikit-image

Abre el archivo datasmarts/compare.py e inserta estas líneas para importar los módulos de los que depende el programa:

Como indican los comentarios, la función más importante para generar los gráficos comparativos es compare_images. En breve le daremos uso. Mientras, creemos el menú del programa, el cual se compone únicamente del parámetro -o/--output, que indica la ruta al directorio donde se guardarán los gráficos:

Definimos la función plot_comparison(), la cual produce una visualización con base a una imagen inalterada, la misma imagen modificada, y el gráfico comparativo de ambas:

Para mantener la lógica del programa lo más limpia posible, no usaremos imágenes externas, sino una que ya viene con scikit-image, la cual cargamos en el siguiente bloque:

Ahora, aplicamos ecualización de histogramas a la imagen:

Posteriormente, rotamos la imagen original 2º:

La primera comparación que crearemos será entre la imagen original y la ecualizada, utilizando el método del tablero de ajedrez. En esta comparación, cada espacio del tendrá una sección de la imagen original alternada con la de la imagen modificada:

La segunda comparación será entre la imagen original y la rotada, utilizando el método de la diferencia. Como su nombre indica, el gráfico mostrará la diferencia (literalmente la resta) entre los píxeles de la segunda y la primera imagen:

La última comparación, nuevamente entre la imagen original y la rotada, la hacemos mediante el método de la mezcla, el cual trabaja calculando el promedio entre la primera y la segunda imagen:

Por último, generaremos y guardaremos en disco los gráficos de cada comparación visual:

Ejecución del Script de Comparación Visual con scikit-image

Hora de poner a prueba el código. Para ello, corre el comando:

python datasmarts/compare.py

En el primer gráfico veremos la comparación visual mediante el tablero de ajedrez:

En la primera fila del gráfico vemos la imagen original a mano izquierda, y la ecualizada a la derecha, la cual es más brillante en determinadas áreas. En la parte inferior observamos el un tablero de ajedrez, donde cada casilla alterna un segmento de la imagen original con uno de la ecualizada, lo que facilita una comparación más detallada.

Después, veremos el resultado del segundo método:

Nuevamente, en la parte superior se ve la imagen original acompañada de la rotada. En la parte de abajo nos topamos con la diferencia absoluta entre las imágenes de arriba.

Por último, tenemos la mezcla o blend:

Esta vez el gráfico comparativo resulta del promedio de la imagen original y la rotada, lo que produce ese extraño efecto cinético.

Resumen

En el artículo de hoy aprendimos a comparar dos imágenes de manera visual, lo cual tiene mucho sentido en el contexto de la visión artificial.

De manera más concreta, descubrimos que:

  1. 1
    La comparación de tablero de ajedrez alterna porciones de la primera imagen con porciones de la segunda.
  2. 2
    La comparación por diferencia calcula la diferencia absoluta entre la primera y la segunda imagen.
  3. 3
    La comparación por mezcla produce el promedio de las dos imágenes contrastadas.

¿Por qué no te descargas el código y pruebas con tus propias imágenes? Cuéntame sobre tu experiencia en los comentarios.

¡Un abrazo!

Sobre el Autor

Jesús Martínez es el creador de DataSmarts, un lugar para los apasionados por computer vision y machine learning. Cuando no se encuentra bloggeando, jugando con algún algoritmo o trabajando en un proyecto (muy) cool, disfruta escuchar a The Beatles, leer o viajar por carretera.