Ich versuche, ein Programm zu implementieren, das zwei Bilder eingibt, eines ist ein Bild einer Box allein und eines, das die Box in der Szene enthält. Grundsätzlich soll das Programm Schlüsselpunkte in diesen beiden Bildern finden und die Bilder mit angepassten Schlüsselpunkten zeigen. Am Ende erwarte ich ein angehängtes Bild von zwei Eingabebildern zusammen mit ihren übereinstimmenden verbundenen Schlüsselpunkten. Mein Code ist wie folgt:
%Vor%Das Problem ist, es gibt zwei viele Übereinstimmungen als erwartet. Ich habe versucht, das Programm zu debuggen und schaute, was in den Vektoren der Schlüsselpunkte ist und so weiter, alles scheint in Ordnung zu sein, zumindest denke ich, dass sie sind, die Schlüsselpunkte werden mit Ausrichtung usw. erkannt.
Ich benutze OpenCV v2.3 und überprüfte seine Dokumentation für die Arten der Klassen, die ich benutze und versuchte, das Problem zu lösen, aber das hat nicht funktioniert. Ich arbeite seit 3 Tagen daran und habe nicht viel verbessert.
Hier ist eine Ausgabe, die ich von meinem Programm bekomme.
Ich hätte das Bild entfernen sollen.
Ich weiß, das sollte mir nicht zu viele Übereinstimmungen geben, weil ich genau die gleichen Bilder mit einer anderen Implementierung in Matlab getestet habe, die ziemlich gut war.
Anstatt BruteForceMatcher zu verwenden, versuchen Sie, FlannBasedMatcher zu verwenden und Max- und Min-Abstände zwischen den Schlüsselpunkten zu berechnen, um nur die guten Übereinstimmungen beizubehalten. Siehe " Feature-Matching mit FLAN " für ein Beispiel.
Ich hatte dasselbe Problem für SIFT. Ich habe knmatcher (K = 3) benutzt. und befolgte das folgende Verfahren iterativ
%Vor%Tags und Links c++ opencv image-processing sift