static bool ocl_kmatchDispatcher(InputArray query, InputArray train, const UMat &trainIdx,
const UMat &distance, int distType)
{
- return ocl_match2Dispatcher(query, train, trainIdx, distance, distType);
+ return ocl_match2Dispatcher(query, train, trainIdx, distance, distType);
}
static bool ocl_knnMatchSingle(InputArray query, InputArray train, UMat &trainIdx,
void FlannBasedMatcher::add( InputArrayOfArrays _descriptors )
{
DescriptorMatcher::add( _descriptors );
- std::vector<Mat> descriptors;
- _descriptors.getMatVector(descriptors);
+ std::vector<UMat> descriptors;
+ _descriptors.getUMatVector(descriptors);
for( size_t i = 0; i < descriptors.size(); i++ )
{
matches_info.matches.clear();
- Ptr<flann::IndexParams> indexParams = makePtr<flann::KDTreeIndexParams>();
- Ptr<flann::SearchParams> searchParams = makePtr<flann::SearchParams>();
-
- if (features2.descriptors.depth() == CV_8U)
+ Ptr<DescriptorMatcher> matcher;
+#if 0 // TODO check this
+ if (ocl::useOpenCL())
{
- indexParams->setAlgorithm(cvflann::FLANN_INDEX_LSH);
- searchParams->setAlgorithm(cvflann::FLANN_INDEX_LSH);
+ matcher = makePtr<BFMatcher>((int)NORM_L2);
}
+ else
+#endif
+ {
+ Ptr<flann::IndexParams> indexParams = makePtr<flann::KDTreeIndexParams>();
+ Ptr<flann::SearchParams> searchParams = makePtr<flann::SearchParams>();
- FlannBasedMatcher matcher(indexParams, searchParams);
+ if (features2.descriptors.depth() == CV_8U)
+ {
+ indexParams->setAlgorithm(cvflann::FLANN_INDEX_LSH);
+ searchParams->setAlgorithm(cvflann::FLANN_INDEX_LSH);
+ }
+
+ matcher = makePtr<FlannBasedMatcher>(indexParams, searchParams);
+ }
std::vector< std::vector<DMatch> > pair_matches;
MatchesSet matches;
// Find 1->2 matches
- matcher.knnMatch(features1.descriptors, features2.descriptors, pair_matches, 2);
+ matcher->knnMatch(features1.descriptors, features2.descriptors, pair_matches, 2);
for (size_t i = 0; i < pair_matches.size(); ++i)
{
if (pair_matches[i].size() < 2)
// Find 2->1 matches
pair_matches.clear();
- matcher.knnMatch(features2.descriptors, features1.descriptors, pair_matches, 2);
+ matcher->knnMatch(features2.descriptors, features1.descriptors, pair_matches, 2);
for (size_t i = 0; i < pair_matches.size(); ++i)
{
if (pair_matches[i].size() < 2)