¿Cómo calcular el vector de desplazamiento 2D para el registro de imágenes binarias?


8

Mis entradas son varias imágenes binarias como:primera imagen binaria que se registrarásegunda imagen binaria que se registrará

A nivel mundial tienen el mismo contenido, pero pueden no estar registrados ya que se producen a partir de una cámara de mano. Lo que me gustaría calcular es el vector de desplazamiento 2D de la primera imagen a la segunda. Utilizo OpenCV y mi primer intento fue calcular puntos de características (algoritmo SURF) y la transformación afín entre ambas imágenes. Pero, por supuesto, la descripción de las características es un poco pobre en una imagen binaria, por lo tanto, la coincidencia es difícil y el mapa de coincidencia es muy inexacto.

¿Alguien tiene una idea de cómo podría hacer esto?

Respuestas:


6

Estoy algo sorprendido de que los puntos característicos no funcionen tan bien. He tenido éxito registrando formas como la tuya usando

  • Harris señala que este es un detector de esquina, en combinación con el algoritmo RANSAC. Ver la wiki o Peter Kovesi su sitio
  • Usar un detector de características como SURF o SIFT en combinación con un mapa de bordes de la imagen antes de la detección de características seguido de alguna forma de coincidencia robusta.

EDITAR

Lo probé con matlab y probé algunas variaciones sobre este tema. Actualmente uso

  • SIFT características del mapa de borde para determinar la rotación y el escalado, aunque son muy pequeños entre las imágenes que proporcionó
  • RANSAC para una combinación robusta
  • Correlación cruzada para determinar la traducción entre las dos imágenes.

Partido robusto Antes del registro Después del registro

Fuente en github .

Una alternativa para RANSAC podría ser el enfoque de votación / binning de transformación Hough propuesto por el inventor de SIFT, David Lowe.


Conozco a Harris, pero no tengo un algoritmo de coincidencia rápido y robusto para asegurarme de obtener los mismos puntos de una imagen a otra. Además, Ransac no se puede usar como está en OpenCV ...
Stéphane Péchard

Muchas gracias por su esfuerzo. Muestra una buena manera de realizar esto. Finalmente modifiqué la forma en que hago lo que necesito hacer, porque el cálculo de las características y la coincidencia requieren demasiado CPU para mí. Gracias de todos modos, hiciste un buen trabajo!
Stéphane Péchard

Stephane, ¿podría agregar también su solución al sitio?
Maurits

1
bueno, la cuestión es que no respondo a la pregunta que se hace, así que no es relevante poner eso aquí. Lo que hice fue detectar los blobs de la imagen y una descripción de cada blob por la mínima cantidad de puntos posible. Quería que el desplazamiento 2D calculara una acumulación temporal, pero ya no lo haré, ya que una descripción vectorial de los blobs es suficiente.
Stéphane Péchard
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.