junio 4, 2020 10:00 am

Jesús

>>> Descarga el código de este post aquí <<<

Durante las últimas semanas hemos estudiado extensamente diversos algoritmos para describir una imagen en términos de regiones de interés, conocidas como puntos clave, los cuales, a su vez, tornamos en vectores binarios o de números reales, que luego podemos emplear con el fin de determinar qué tan similares son dos imágenes.

El día de hoy nos enfocaremos en una aplicación práctica de los conceptos aprendidos hasta los momentos. 

Específicamente, implementaremos un script para llevar a cabo “feature matching”, una técnica que juega un rol fundamental en la detección de objetos, y en la verificación espacial.

Con tal objeto en mente, nos centraremos en:

  • Extraer los puntos clave y descriptores binarios de dos imágenes con el mismo contenido, pero capturadas usando diferentes sensores, bajo condiciones de iluminación diferente.
  • Aplicar feature matching para vincular los puntos clave y descriptores de ambas imágenes.

¡Empecemos! 

Código

>>> Descarga el código de este post aquí <<<

Lo primero que debemos hacer es instalar las librerías necesarias. Para ello, crearemos el entorno virtual, e instalaremos los paquetes listados en el archivo requirements.txt:

Estas son las dependencias:

A continuación, tenemos el script encargado de instanciar el detector de puntos clave, crear el descriptor binario, cargar las imágenes a comparar, calcular los puntos clave y vectores descriptivos de cada una, usarlos para llevar a cabo feature matching y, finalmente, mostrar gráficamente la correspondencia entre los features de ambas imágenes. Lee detenidamente el programa, así como los comentarios que acompañan cada sección, ya que estos explican en profundidad el funcionamiento del código.

Podemos ejecutar el código con el siguiente comando: 

Como podemos observar, estamos extrayendo los puntos clave usando FAST, mientras que como descriptor binario optamos por BRIEF. Para determinar los matches entre ambas imágenes, nos apoyamos en la distancia de Hamming (BrufeForce-Hamming).

Las imágenes comparadas son, en primer lugar:

Y en segundo:

El resultado de correr el programa es este:

En la terminal veremos el siguiente reporte:

>>> Descarga el código de este post aquí <<<

A pesar de los cambios en las condiciones de iluminación, perspectiva y textura, nuestro programa fue capaz de vincular regiones de interés o, de manera más precisa, puntos clave entre ambas fotografías. Esto pone en evidencia el poder de los detectores y descriptores que hemos estudiado a lo largo de las últimas semanas. 

¿Por qué no descargas el código, y lo aplicas sobre tus propias imágenes? También puedes probar diferentes combinaciones de detectores, extractores y matchers.

Déjame conocer tus resultados en los comentarios.

¡Hasta pronto!

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.

Paso 2/2: Celebra tu NUEVO EMPLEO en Machine Learning ?

A %d blogueros les gusta esto: