Java OpenCV - extrahiert gute Treffer aus knnMatch

8

Ich versuche ein sehr einfaches Programm zum Finden von Ähnlichkeiten zwischen zwei Bildern zu implementieren.

Ich verwende den ORB-Feature-Detektor und den Bilddeskriptor für diese Aufgabe und identifiziere die Übereinstimmungen mit knnMatch :

%Vor%

Ich kann die Matches wie folgt zeichnen:

%Vor%

Das Problem ist, dass es zu viele Übereinstimmungen gibt und auch solche, die weit entfernt sind. Ich kann anscheinend nicht finden, wie man nur die guten Übereinstimmungen herausholt (eine Schwelle überschreitend)? Könnte jemand mich in die richtige Richtung weisen oder mich zu einem grundlegenden Arbeitsbeispiel umleiten? Ich habe mehrere Stunden damit verbracht und scheint verloren zu sein.

BEARBEITEN:

Ich habe versucht, Keypoint Matching funktioniert einfach zwei Mal ... ? (java opencv) , aber die Standard (nicht-knn) Übereinstimmung verwendet verschiedene Strukturen und ich konnte es nicht funktionieren lassen.

    
Smajl 16.02.2016, 09:23
quelle

1 Antwort

9

Wie in anderen Antworten erwähnt, gibt es mehrere Methoden, um Ausreißer und schlechte Übereinstimmungen zu entfernen. Ich denke, Sie haben Beispiele und Tutorials mit match anstelle von knnMatch mit einigen dieser Methoden gefunden.

Wie Sie vielleicht wissen, gibt knnMatch die n-besten Treffer in descriptor2 für jeden Deskriptor in descriptor1 zurück. Das bedeutet, dass Sie anstelle einer Trefferliste eine Liste mit Übereinstimmungen erhalten. Ich schätze, das ist der Grund, warum du Probleme hattest.

Der Hauptvorteil von knnMatch besteht darin, dass Sie einen Verhältnistest durchführen können. Wenn also die Abstände von einem Deskriptor in descriptor1 zu den beiden besten Deskriptoren in descriptor2 ähnlich sind, deutet dies darauf hin, dass sich in Ihren Bildern repetitive Muster befinden (z. B. die Spitzen eines Palisadenzauns vor Gras). Daher sind solche Übereinstimmungen nicht zuverlässig und sollten entfernt werden. (Ich bin mir nicht sicher, warum Sie nach den fünf besten Übereinstimmungen suchen - Sie übergeben 5 an knnMatch - für jeden Deskriptor. Suchen Sie stattdessen nach zwei.)

Wenn Sie jetzt nur für jeden Deskriptor auf die beste Übereinstimmung zugreifen möchten, müssen Sie nur auf das erste Element der "Unterlisten" zugreifen. Im Folgenden finden Sie als Beispiel einen Verhältnis-Test und eine Homographie-Schätzung mit RANSAC (ich habe alles nach Ihrem knnMatch ersetzt):

%Vor%

Ich hoffe, das ist als Beispiel ausreichend. Andere Filtermethoden könnten analog angewendet werden. Zögern Sie nicht zu fragen, wenn Sie weitere Fragen haben.

BEARBEITEN: Die Homographie-Filterung ist nur dann gültig, wenn sich die meisten Ihrer Schlüsselpunkte auf derselben Ebene in der Szene befinden, wie eine Mauer usw.

    
gfkri 29.02.2016, 10:26
quelle

Tags und Links