Я использую SIFT для обнаружения функции и calcOpticalFlowPyrLK для отслеживания функций на изображениях. Я работаю над изображениями с низким разрешением (590x375 после обрезки), взятыми из Microsoft kinect.Отслеживание функций не работает правильно на изображениях с низким разрешением
// 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);
Я побежал это на consective образы установившемся сцены (только, чтобы получить представление) взяты из той же позиции камеры со скоростью 30 кадров в секунду. Для глаз изображения выглядят одинаково, но каким-то образом calcOpticalFlowPyrLK не в состоянии отслеживать одни и те же функции с одного изображения на другое. Позиция (координаты x, y) должна быть одинаковой для обнаруженной функции и отслеживаемой функции. Как-то это не так.
В соответствии с предложением AldurDisciple, я считаю, что я обнаруживаю шум как функции. Черные изображения ниже - разница между кондуктивными элементами, показывает шум. Следующими являются оригинальные изображения, а затем изображения с обнаруженными функциями.
Моя цель - использовать информацию для поиска изменений в позиции робота с течением времени.
Я использовал
GaussianBlur(currImageDepth, currImageDepth, Size(9,9), 0, 0);
для шума, но это не помогло.
Распечатайте расстояния (норма L2) между входными и выходными точками и посмотрите, имеют ли они смысл. Если движения малы, вы можете уменьшить размер окна поиска и проверить. Также наведите на экран свои ключевые точки FAST и посмотрите, достаточно ли они для отслеживания. – dhanushka
Я нарисовал линии между обнаруженными и отслеживаемыми координатами. Это имеет смысл, когда я перемещаю камеру, но когда я этого не делаю, я все еще вижу несколько строк, которые дают мне неправильный результат. Я пробовал рисовать круг вокруг обнаруженных точек, они не имели большого смысла для меня. – Ruturaj
Когда нет движения, какая часть точек показывает движение, и как насчет их величины? Возможно, вы можете использовать эту информацию, чтобы отказаться от этих движений. Во всяком случае, избавление от ложных тревог может быть невозможно. FAST был разработан для работы в режиме реального времени и может быть не очень точным. Используйте детектор, такой как SIFT или SURF, и сравните качество ключевых точек. Вы можете настроить параметры FAST на основе этого сравнения, если вы должны использовать FAST. – dhanushka