fixed FernDescriptorMatcher (#765)
This commit is contained in:
parent
4dfbf99dd5
commit
96d88f0673
@ -2151,14 +2151,14 @@ inline void BruteForceMatcher<Distance>::commonKnnMatchImpl( BruteForceMatcher<D
|
|||||||
bestMatch.distance = std::numeric_limits<float>::max();
|
bestMatch.distance = std::numeric_limits<float>::max();
|
||||||
for( size_t iIdx = 0; iIdx < imgCount; iIdx++ )
|
for( size_t iIdx = 0; iIdx < imgCount; iIdx++ )
|
||||||
{
|
{
|
||||||
if( !allDists[iIdx].empty() )
|
if( !allDists[iIdx].empty() )
|
||||||
{
|
{
|
||||||
double minVal;
|
double minVal;
|
||||||
Point minLoc;
|
Point minLoc;
|
||||||
minMaxLoc( allDists[iIdx], &minVal, 0, &minLoc, 0 );
|
minMaxLoc( allDists[iIdx], &minVal, 0, &minLoc, 0 );
|
||||||
if( minVal < bestMatch.distance )
|
if( minVal < bestMatch.distance )
|
||||||
bestMatch = DMatch( qIdx, minLoc.x, (int)iIdx, (float)minVal );
|
bestMatch = DMatch( qIdx, minLoc.x, (int)iIdx, (float)minVal );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( bestMatch.trainIdx == -1 )
|
if( bestMatch.trainIdx == -1 )
|
||||||
break;
|
break;
|
||||||
|
@ -407,7 +407,7 @@ void BruteForceMatcher<L2<float> >::knnMatchImpl( const Mat& queryDescriptors, v
|
|||||||
for( int c = 0; c < masks[iIdx].cols; c++ )
|
for( int c = 0; c < masks[iIdx].cols; c++ )
|
||||||
{
|
{
|
||||||
if( maskPtr[c] == 0 )
|
if( maskPtr[c] == 0 )
|
||||||
e_allDists[iIdx](c) = std::numeric_limits<float>::min();
|
e_allDists[iIdx](c) = -std::numeric_limits<float>::max();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -417,7 +417,7 @@ void BruteForceMatcher<L2<float> >::knnMatchImpl( const Mat& queryDescriptors, v
|
|||||||
vector<vector<DMatch> >::reverse_iterator curMatches = matches.rbegin();
|
vector<vector<DMatch> >::reverse_iterator curMatches = matches.rbegin();
|
||||||
for( int k = 0; k < knn; k++ )
|
for( int k = 0; k < knn; k++ )
|
||||||
{
|
{
|
||||||
float totalMaxCoeff = std::numeric_limits<float>::min();
|
float totalMaxCoeff = -std::numeric_limits<float>::max();
|
||||||
int bestTrainIdx = -1, bestImgIdx = -1;
|
int bestTrainIdx = -1, bestImgIdx = -1;
|
||||||
for( size_t iIdx = 0; iIdx < imgCount; iIdx++ )
|
for( size_t iIdx = 0; iIdx < imgCount; iIdx++ )
|
||||||
{
|
{
|
||||||
@ -433,7 +433,7 @@ void BruteForceMatcher<L2<float> >::knnMatchImpl( const Mat& queryDescriptors, v
|
|||||||
if( bestTrainIdx == -1 )
|
if( bestTrainIdx == -1 )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
e_allDists[bestImgIdx](bestTrainIdx) = std::numeric_limits<float>::min();
|
e_allDists[bestImgIdx](bestTrainIdx) = -std::numeric_limits<float>::max();
|
||||||
curMatches->push_back( DMatch(qIdx, bestTrainIdx, bestImgIdx, sqrt((-2)*totalMaxCoeff + queryNorm2)) );
|
curMatches->push_back( DMatch(qIdx, bestTrainIdx, bestImgIdx, sqrt((-2)*totalMaxCoeff + queryNorm2)) );
|
||||||
}
|
}
|
||||||
std::sort( curMatches->begin(), curMatches->end() );
|
std::sort( curMatches->begin(), curMatches->end() );
|
||||||
@ -1105,20 +1105,21 @@ void FernDescriptorMatcher::knnMatchImpl( const Mat& queryImage, vector<KeyPoint
|
|||||||
for( int k = 0; k < knn; k++ )
|
for( int k = 0; k < knn; k++ )
|
||||||
{
|
{
|
||||||
DMatch bestMatch;
|
DMatch bestMatch;
|
||||||
size_t ci = 0;
|
size_t best_ci = -1;
|
||||||
for( ; ci < signature.size(); ci++ )
|
for( size_t ci = 0; ci < signature.size(); ci++ )
|
||||||
{
|
{
|
||||||
if( -signature[ci] < bestMatch.distance )
|
if( -signature[ci] < bestMatch.distance )
|
||||||
{
|
{
|
||||||
int imgIdx = -1, trainIdx = -1;
|
int imgIdx = -1, trainIdx = -1;
|
||||||
trainPointCollection.getLocalIdx( (int)ci , imgIdx, trainIdx );
|
trainPointCollection.getLocalIdx( (int)ci , imgIdx, trainIdx );
|
||||||
bestMatch = DMatch( (int)queryIdx, trainIdx, imgIdx, -signature[ci] );
|
bestMatch = DMatch( (int)queryIdx, trainIdx, imgIdx, -signature[ci] );
|
||||||
|
best_ci = ci;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( bestMatch.trainIdx == -1 )
|
if( bestMatch.trainIdx == -1 )
|
||||||
break;
|
break;
|
||||||
signature[ci] = std::numeric_limits<float>::min();
|
signature[best_ci] = -std:numeric_limits<float>::max();
|
||||||
matches[queryIdx].push_back( bestMatch );
|
matches[queryIdx].push_back( bestMatch );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user