Come calcolare il vettore di spostamento 2D per la registrazione di immagini binarie?


8

I miei input sono diverse immagini binarie come:prima immagine binaria da registrareseconda immagine binaria da registrare

Hanno globalmente lo stesso contenuto ma potrebbero non essere registrati in quanto prodotti da una videocamera manuale. Quello che vorrei calcolare è il vettore di spostamento 2D dalla prima immagine alla seconda. Uso OpenCV e il mio primo tentativo è stato quello di calcolare i punti funzione (algoritmo SURF) e la trasformazione affine tra le due immagini. Ma, naturalmente, la descrizione delle caratteristiche è piuttosto scarsa su un'immagine binaria, quindi la corrispondenza è difficile e la mappa di corrispondenza molto imprecisa.

Qualcuno ha idea di come potrei farlo?

Risposte:


6

Sono un po 'sorpreso che i punti funzione non funzionino così bene. Ho avuto successo registrando forme come la tua usando entrambi

  • Punti Harris, questo è un rilevatore d'angolo, in combinazione con l'algoritmo RANSAC. Vedi il wiki o il suo sito Peter Kovesi
  • Utilizzo di un rilevatore di funzioni come SURF o SIFT in combinazione con una mappa dei bordi dell'immagine prima del rilevamento delle caratteristiche seguito da una forma di corrispondenza robusta.

MODIFICARE

Ho provato con matlab e ho provato alcune varianti su questo tema. Attualmente uso

  • Funzionalità SIFT dalla mappa laterale per accertare la rotazione e il ridimensionamento, sebbene siano molto piccole tra le immagini fornite
  • RANSAC per una corrispondenza robusta
  • Correlazione incrociata per accertare la traduzione tra le due immagini

Partita robusta Prima della registrazione Dopo la registrazione

Fonte su github .

Un'alternativa per RANSAC potrebbe essere l'approccio di trasformazione / binning di Hough che è stato proposto dall'inventore del SIFT, David Lowe.


Conosco Harris, ma non ho un algoritmo di adattamento rapido e robusto per essere sicuro di ottenere gli stessi punti da un'immagine all'altra. Inoltre, Ransac non è utilizzabile come in OpenCV ...
Stéphane Péchard

Grazie mille per il tuo impegno. Mostra un modo carino per farlo. Alla fine ho modificato il modo in cui faccio quello che devo fare, perché il calcolo e la corrispondenza delle funzioni richiedono troppo CPU. Grazie comunque, hai fatto un buon lavoro!
Stéphane Péchard,

Stephane, potresti per favore aggiungere anche la tua soluzione al sito?
Maurits,

1
beh, il fatto è che non rispondo alla domanda posta, quindi non è rilevante metterlo qui. Quello che ho fatto è un rilevamento dei blob dell'immagine e una descrizione di ciascun blob in base alla quantità minima di punti possibile. Volevo che lo spostamento 2D calcolasse un accumulo temporale, ma non lo farò più, poiché una descrizione vettoriale dei BLOB è sufficiente.
Stéphane Péchard,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.