stitching: allow to use dynamic DescriptorMatcher
This commit is contained in:
parent
06738468af
commit
e6cc1be7e8
@ -1369,6 +1369,21 @@ void _InputArray::getUMatVector(std::vector<UMat>& umv) const
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( k == UMAT )
|
||||||
|
{
|
||||||
|
UMat& v = *(UMat*)obj;
|
||||||
|
umv.resize(1);
|
||||||
|
umv[0] = v;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if( k == MAT )
|
||||||
|
{
|
||||||
|
Mat& v = *(Mat*)obj;
|
||||||
|
umv.resize(1);
|
||||||
|
umv[0] = v.getUMat(accessFlags);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
CV_Error(Error::StsNotImplemented, "Unknown/unsupported array type");
|
CV_Error(Error::StsNotImplemented, "Unknown/unsupported array type");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -330,7 +330,7 @@ static bool ocl_match2Dispatcher(InputArray query, InputArray train, const UMat
|
|||||||
static bool ocl_kmatchDispatcher(InputArray query, InputArray train, const UMat &trainIdx,
|
static bool ocl_kmatchDispatcher(InputArray query, InputArray train, const UMat &trainIdx,
|
||||||
const UMat &distance, int distType)
|
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,
|
static bool ocl_knnMatchSingle(InputArray query, InputArray train, UMat &trainIdx,
|
||||||
@ -1209,8 +1209,8 @@ FlannBasedMatcher::FlannBasedMatcher( const Ptr<flann::IndexParams>& _indexParam
|
|||||||
void FlannBasedMatcher::add( InputArrayOfArrays _descriptors )
|
void FlannBasedMatcher::add( InputArrayOfArrays _descriptors )
|
||||||
{
|
{
|
||||||
DescriptorMatcher::add( _descriptors );
|
DescriptorMatcher::add( _descriptors );
|
||||||
std::vector<Mat> descriptors;
|
std::vector<UMat> descriptors;
|
||||||
_descriptors.getMatVector(descriptors);
|
_descriptors.getUMatVector(descriptors);
|
||||||
|
|
||||||
for( size_t i = 0; i < descriptors.size(); i++ )
|
for( size_t i = 0; i < descriptors.size(); i++ )
|
||||||
{
|
{
|
||||||
|
@ -155,21 +155,31 @@ void CpuMatcher::match(const ImageFeatures &features1, const ImageFeatures &feat
|
|||||||
|
|
||||||
matches_info.matches.clear();
|
matches_info.matches.clear();
|
||||||
|
|
||||||
Ptr<flann::IndexParams> indexParams = makePtr<flann::KDTreeIndexParams>();
|
Ptr<DescriptorMatcher> matcher;
|
||||||
Ptr<flann::SearchParams> searchParams = makePtr<flann::SearchParams>();
|
#if 0 // TODO check this
|
||||||
|
if (ocl::useOpenCL())
|
||||||
if (features2.descriptors.depth() == CV_8U)
|
|
||||||
{
|
{
|
||||||
indexParams->setAlgorithm(cvflann::FLANN_INDEX_LSH);
|
matcher = makePtr<BFMatcher>((int)NORM_L2);
|
||||||
searchParams->setAlgorithm(cvflann::FLANN_INDEX_LSH);
|
|
||||||
}
|
}
|
||||||
|
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;
|
std::vector< std::vector<DMatch> > pair_matches;
|
||||||
MatchesSet matches;
|
MatchesSet matches;
|
||||||
|
|
||||||
// Find 1->2 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)
|
for (size_t i = 0; i < pair_matches.size(); ++i)
|
||||||
{
|
{
|
||||||
if (pair_matches[i].size() < 2)
|
if (pair_matches[i].size() < 2)
|
||||||
@ -186,7 +196,7 @@ void CpuMatcher::match(const ImageFeatures &features1, const ImageFeatures &feat
|
|||||||
|
|
||||||
// Find 2->1 matches
|
// Find 2->1 matches
|
||||||
pair_matches.clear();
|
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)
|
for (size_t i = 0; i < pair_matches.size(); ++i)
|
||||||
{
|
{
|
||||||
if (pair_matches[i].size() < 2)
|
if (pair_matches[i].size() < 2)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user