Wie berechnet man einen 2D-Verschiebungsvektor für die Registrierung von Binärbildern?

8

Meine Eingaben sind mehrere Binärbilder wie:erstes zu registrierendes Binärbildzweites zu registrierendes Binärbild

Sie haben global den gleichen Inhalt, sind jedoch möglicherweise nicht registriert, da sie mit einer Handkamera hergestellt werden. Was ich berechnen möchte, ist der 2D-Verschiebungsvektor vom ersten zum zweiten Bild. Ich benutze OpenCV und mein erster Versuch war, Feature-Punkte (SURF-Algorithmus) und die affine Transformation zwischen beiden Bildern zu berechnen. Aber natürlich ist die Beschreibung der Merkmale auf einem Binärbild etwas schlecht, daher ist die Übereinstimmung schwierig und die Übereinstimmungskarte sehr ungenau.

Hat jemand eine Idee, wie ich das machen könnte?

Stéphane Péchard
quelle

Antworten:

6

Ich bin etwas überrascht, dass Feature-Punkte nicht so gut funktionieren. Es ist mir gelungen, Formen wie Ihre mit beiden zu registrieren

  • Harris zeigt, dies ist ein Eckendetektor in Kombination mit dem RANSAC-Algorithmus. Siehe das Wiki oder Peter Kovesi auf seiner Seite
  • Verwenden eines Feature-Detektors wie SURF oder SIFT in Kombination mit einer Kantenabbildung des Bildes vor der Feature-Erkennung, gefolgt von einer robusten Anpassung.

BEARBEITEN

Ich habe es mit Matlab versucht und einige Variationen dieses Themas ausprobiert. Derzeit benutze ich

  • SIFT-Funktionen aus der Randkarte, um die Drehung und Skalierung festzustellen, obwohl sie zwischen den von Ihnen bereitgestellten Bildern sehr klein sind
  • RANSAC für robustes Matching
  • Kreuzkorrelation zur Ermittlung der Übersetzung zwischen den beiden Bildern

Robustes Match Vor der Registrierung Nach der Registrierung

Quelle auf Github .

Eine Alternative für RANSAC könnte der vom Erfinder von SIFT, David Lowe, vorgeschlagene Hough-Transformations-Abstimmungs- / Binning-Ansatz sein.

Maurits
quelle
Ich kenne Harris, aber ich habe keinen schnellen und robusten Matching-Algorithmus, um sicherzugehen, dass ich von einem Bild zum anderen die gleichen Punkte bekomme. Außerdem ist Ransac nicht wie in OpenCV verwendbar ...
Stéphane Péchard
Vielen Dank für Ihre Mühe. Es zeigt einen guten Weg, dies durchzuführen. Ich habe endlich die Art und Weise geändert, wie ich das tue, was ich tun muss, weil die Berechnung und Anpassung von Funktionen für mich zu CPU-intensiv ist. Trotzdem danke, du hast gute Arbeit geleistet!
Stéphane Péchard
Stephane, könnten Sie bitte auch Ihre Lösung zur Website hinzufügen?
Maurits
1
Nun, die Sache ist, ich beantworte die gestellte Frage nicht, daher ist es nicht relevant, das hier zu setzen. Was ich getan habe, ist eine Erkennung der Blobs des Bildes und eine Beschreibung jedes Blobs durch die minimal mögliche Anzahl von Punkten. Ich wollte, dass die 2D-Verschiebung eine zeitliche Akkumulation berechnet, aber das werde ich nicht mehr tun, da eine vektorielle Beschreibung der Blobs ausreicht.
Stéphane Péchard