Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

descriptor matching performance between ORB and SIFT

Hi i'm student in master's degree in geoinformatic.

i have question about descriptor matching from opencv feature extraction.

i learned that SIFT descriptor matching is slower than ORB cause of it's data type and matching factor(euclidean and hamming distance)

but in my algorithm in SIFT case is faster than ORB case.

i use FlannBasedMatcher for matching

this is my code :

Ptr<flann::IndexParams>  indexParams = new flann::KDTreeIndexParams();
Ptr<flann::SearchParams> searchParams = new flann::SearchParams();

if (Features2.descriptors.depth() == CV_8U)
{
    indexParams->setAlgorithm(cvflann::FLANN_INDEX_LSH);
    searchParams->setAlgorithm(cvflann::FLANN_INDEX_LSH);
}   

FlannBasedMatcher matcher(indexParams, searchParams);
vector<vector<DMatch> > pair_matches;
matcher.knnMatch(Features1.descriptors, Features2.descriptors, pair_matches, 2);

i think if i use ORB(8U) for descriptor than it will use FLANN_INDEX_LSH for matching.

but in this case it takes more time than SIFT(32F).

i saw that someone said LSH is not getting hamming distance really. but it's similar with hamming distance.

and someone said in FlannBasedMatcher use 32F data type for calculating.

but i can't find what's right and why it takes more time. so im thoroughly confused.

please tell me what's wrong in my code. or reason of slow matching in ORB descriptor.

thank you.