Ich verwende SIFT für die Merkmalserkennung und calcOpticalFlowPyrLK für die Merkmalverfolgung in Bildern. Ich arbeite an Bildern mit niedriger Auflösung (590x375 nach dem Zuschneiden), die von Microsoft kinect stammen.Feature-Tracking funktioniert bei Bildern mit niedriger Auflösung nicht richtig
// feature detection
cv::Ptr<Feature2D> detector = cv::xfeatures2d::SIFT::create();
detector->detect(img_1,keypoints_1);
KeyPoint::convert(keypoints_1, points1, vector<int>());
// feature tracking
vector<float> err;
Size winSize=Size(21,21);
TermCriteria termcrit=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01);
calcOpticalFlowPyrLK(img_1, img_2, points1, points2, status, err, winSize, 1, termcrit, 0, 0.001);
Ich laufe dies auf consective Bildern von stationärer Szene (nur Idee zu bekommen) aus derselben Kameraposition mit einer Geschwindigkeit von 30 Bildern pro Sekunde aufgenommen. Für die Augen sehen Bilder gleich aus, aber irgendwie kann calcOpticalFlowPyrLK die gleichen Funktionen nicht von einem Bild zum anderen verfolgen. Die Position (x, y-Koordinaten) sollte in der erkannten Funktion und der verfolgten Funktion identisch sein. Irgendwie ist es nicht.
Gemäß AldurDisciple Vorschlag, ich denke, ich erkenne Rauschen als Funktionen. Die schwarzen Bilder unten sind Unterschiede zwischen den konsuktiven Elementen, zeigt Rauschen. Die nächsten sind Originalbilder und dann Bilder mit erkannten Merkmalen.
Mein Ziel ist es, Informationen zu verwenden, um Veränderungen der Roboterposition über die Zeit zu finden.
benutzte ich
GaussianBlur(currImageDepth, currImageDepth, Size(9,9), 0, 0);
für Lärm, aber es hat nicht geholfen.
Drucken Sie die Abstände (L2-Norm) zwischen den Eingabe- und Ausgabepunkten und prüfen Sie, ob sie sinnvoll sind. Wenn die Bewegungen klein sind, können Sie die Größe des Suchfensters reduzieren und überprüfen. Zeichnen Sie auch die FAST-Schlüsselpunkte in Ihrem Bild und sehen Sie, ob sie für das Tracking gut genug sind. – dhanushka
Ich zeichnete Linien zwischen erkannten und verfolgten Koordinaten. Es macht Sinn, wenn ich die Kamera bewege, aber wenn ich das nicht kann, sehe ich immer noch ein paar Zeilen, die mir ein falsches Ergebnis liefern. Ich habe versucht, einen Kreis um die erkannten Punkte zu ziehen, sie ergaben für mich keinen Sinn. – Ruturaj
Wenn es keine Bewegung gibt, welcher Anteil der Punkte zeigt eine Bewegung und was ist mit ihrer Größe? Möglicherweise können Sie diese Informationen verwenden, um diese Bewegungen zu verwerfen. Auf jeden Fall ist es vielleicht nicht möglich, Fehlalarme loszuwerden. FAST wurde entwickelt, um in Echtzeit ausgeführt zu werden, und ist möglicherweise nicht sehr genau. Verwenden Sie einen Detektor wie SIFT oder SURF und vergleichen Sie die Qualität der Schlüsselpunkte. Möglicherweise können Sie die FAST-Parameter basierend auf diesem Vergleich anpassen, wenn Sie FAST verwenden müssen. – dhanushka