I am working with low resolution (VGA) and jpg-compressed sequences of images for visual navigation on a mobile robot. At the moment I am using SURF for detecting keypoints and extracting descriptors out of the images, and FLANN for tracking them. I am getting 4000-5000 features per image, and usually 350-450 matches are made per pair of consecutive images, before applying RANSAC (which usually reduces 20% the number of matches)
I am trying to increase the number (and quality) of the matches. I have tried two other detectors: SIFT and ORB. SIFT increases the number of features noticeably (35% more of tracked features, overall), but it is much slower. ORB extracts roughly as many features as SURF, but the matching performance is much poorer (~100 matches, in the best cases). My implementation in opencv of ORB is:
cv::ORB orb = cv::ORB(10000, 1.2f, 8, 31);
orb(frame->img, cv::Mat(), im_keypoints, frame->descriptors);
frame->descriptors.convertTo(frame->descriptors, CV_32F); //so that is the same type as m_dists
And then, when matching:
cv::Mat m_indices(descriptors1.rows, 2, CV_32S);
cv::Mat m_dists(descriptors1.rows, 2, CV_32F);
cv::flann::Index flann_index(descriptors2, cv::flann::KDTreeIndexParams(6));
flann_index.knnSearch(descriptors1, m_indices, m_dists, 2, cv::flann::SearchParams(64) );
What is the best feature detector and extractor when working with low resolution and noisy images? Should I change any parameter in FLANN depending on the feature detector used?
EDIT:
I post some pictures of a fairly easy sequence to track. The pictures are as I give them to the feature detector methods. They have been preprocessed to eliminate some noise (by means of cv::bilateralFilter()
)
In many cases the Pyramidal Lucas Kanade optical flow based method is a good choice. the method has some restrictions e.g. big changes in illuminations. If you use a large window 21x21 or bigger than the tracker should be more robust to noise. You can get features to track from your favorit SIFT,SURF,FAST or GFT feature detector or you initialise them as a regular sampled grid. That gives you the advantage of regular samples motion information from your scene.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With