Comment calculer le vecteur de déplacement 2D pour l'enregistrement d'images binaires?

8

Mes entrées sont plusieurs images binaires comme:première image binaire enregistréedeuxième image binaire à enregistrer

Ils ont globalement le même contenu mais peuvent ne pas être enregistrés car ils sont produits à partir d'une caméra à main. Ce que je voudrais calculer, c'est le vecteur de déplacement 2D de la première image à la seconde. J'utilise OpenCV et ma première tentative a été de calculer les points caractéristiques (algorithme SURF) et la transformation affine entre les deux images. Mais bien sûr, la description des fonctionnalités est un peu médiocre sur une image binaire, donc la correspondance est difficile et la carte de correspondance très inexacte.

Quelqu'un a-t-il une idée de comment je pourrais faire cela?

Stéphane Péchard
la source

Réponses:

6

Je suis quelque peu surpris que les points caractéristiques ne fonctionnent pas si bien. J'ai réussi à enregistrer des formes comme la vôtre en utilisant soit

  • Harris pointe, il s'agit d'un détecteur de coin, en combinaison avec l'algorithme RANSAC. Voir le wiki ou Peter Kovesi son site
  • Utilisation d'un détecteur de caractéristiques comme SURF ou SIFT en combinaison avec une carte de bord de l'image avant la détection de caractéristiques suivie d'une forme de correspondance robuste.

ÉDITER

Je l'ai essayé avec matlab et j'ai essayé quelques variations sur ce thème. Actuellement j'utilise

  • Fonctionnalités SIFT de la carte de bord pour vérifier la rotation et la mise à l'échelle, bien qu'elles soient très petites entre les images que vous avez fournies
  • RANSAC pour un appariement robuste
  • Corrélation croisée pour vérifier la traduction entre les deux images

Match robuste Avant l'inscription Après l'inscription

Source sur github .

Une alternative pour RANSAC pourrait être l'approche de vote / binning de transformation de Hough qui a été proposée par l'inventeur de SIFT, David Lowe.

Maurits
la source
Je connais Harris, mais je n'ai pas d'algorithme de correspondance rapide et robuste pour être sûr d'obtenir les mêmes points d'une image à l'autre. De plus, Ransac n'est pas utilisable comme c'est le cas en OpenCV ...
Stéphane Péchard
Merci beaucoup pour vos efforts. Cela montre une belle façon d'effectuer cela. J'ai finalement modifié la façon dont je fais ce que je dois faire, car le calcul et la correspondance des fonctionnalités sont trop gourmands en ressources processeur pour moi. Merci quand même, vous avez fait du bon travail!
Stéphane Péchard
Stéphane, pourriez-vous également ajouter votre solution sur le site?
Maurits
1
eh bien, le fait est que je ne réponds pas à la question posée, donc ce n'est pas pertinent de le mettre ici. Ce que j'ai fait, c'est une détection des taches de l'image et une description de chaque goutte par le minimum de points possible. Je voulais que le déplacement 2D calcule une accumulation temporelle, mais je ne le ferai plus, car une description vectorielle des taches est suffisante.
Stéphane Péchard