ORB erkennt keyPoints nicht in opencv 2.4.9

8

Ich versuche Schlüsselpunkte mit ORB zu erkennen, alles ist in Ordnung, bis ich zu Opencv 2.4.9 gewechselt habe.

Vorne scheint die Anzahl der Tasten verringert zu sein, und für einige Bilder wurden keine Schlüsselpunkte erkannt:

Dies ist mein Code, der mit zwei Versionen kompiliert wurde: (2.3.1 und 2.4.9)

%Vor%

Ergebnis: 2.3.1: Gefunden 152 Schlüsselpunkte

2.4.9: Gefunden 0 Schlüsselpunkte

Ich habe auch mit einem anderen ORB-Konstruktor getestet, aber ich bekomme das gleiche Ergebnis, keine KPts. Die gleichen Konstruktorwerte wie im Konstruktor von 2.3.1 default: 2.4.9 benutzerdefinierte Konstruktion:

%Vor%

Hast du eine Idee, was passiert? Und wie kann ich es beheben?

Danke.

    
rednaks 03.05.2014, 18:36
quelle

2 Antworten

9

Die Implementierung von ORB in OpenCV hat sich zwischen Version 2.3.1 und 2.4.9 erheblich geändert. Es ist schwer festzustellen, dass eine Änderung das beobachtete Verhalten erklären kann.

Wenn Sie jedoch den Wert des Kantenschwellwerts ändern, können Sie die Anzahl der erkannten Features erneut erhöhen.

Unten ist eine angepasste Version Ihres Codes, um zu zeigen, was ich meine (Vorsicht, ich konnte es nur mit OpenCV 3.0.0 testen, aber ich schätze, Sie bekommen den Punkt).

%Vor%     
nils 24.03.2015 23:05
quelle
1

In OpenCV 3.1 ist der Parameter edgeThreshold tatsächlich die "Größe des Rahmens, an dem die Features nicht erkannt werden". Eine Möglichkeit, zusätzliche Funktionen zu erkennen, besteht darin, den Parameter fastThreshold zu verringern. Es ist ein irreführender Name, da dieser Schwellenwert die Anzahl der erkannten Ecken beeinflusst, selbst wenn ORB::HARRIS_SCORE verwendet wird. Dies sind Harris-Schlüsselpunkte und nicht nur FAST-Schlüsselpunkte, wie Sie vielleicht aufgrund des Argumentnamens denken. Es ist auch ein wenig irreführend, weil edgeThreshold selbst bei Harris Corner Detection wie ein Schwellenwert klingt, nicht auf dem Teil des Bildes, der zum Erkennen von Punkten verwendet wird.

Siehe: Ссылка .

Darüber hinaus könnte die Erhöhung der Anzahl der Pyramidenebenen nlevels Ihnen mehr Schlüsselpunkte geben, auch wenn Ihre Bildgrößen gleich sind und der einzige Unterschied Ihre OpenCV-Version ist, ist es unwahrscheinlich, dass sie hier hilft.

Ich stieß auf das gleiche Problem und hier ist der Code, der funktioniert:
std::vector<KeyPoint> kpts1; Mat desc1; Ptr<ORB> orb = ORB::create(100, 2, 8, 31, 0, 2, ORB::HARRIS_SCORE, 31, 20); orb->detectAndCompute(input_image, Mat(), kpts1, desc1);

Das letzte Argument (20, oben) ist die fastThreshold zu verringern, um neue Schlüsselpunkte zu erhalten .

    
chloelle 23.02.2016 21:30
quelle

Tags und Links