DescriptorMatching -> DMatch

This commit is contained in:
Victor Erukhimov 2010-06-11 19:56:52 +00:00
parent c6750a0f45
commit c6a943b684
3 changed files with 25 additions and 25 deletions

View File

@ -1508,18 +1508,18 @@ struct CV_EXPORTS L2
/****************************************************************************************\ /****************************************************************************************\
* DescriptorMatching * * DMatch *
\****************************************************************************************/ \****************************************************************************************/
/* /*
* Struct for matching: match index and distance between descriptors * Struct for matching: match index and distance between descriptors
*/ */
struct DescriptorMatching struct DMatch
{ {
int index; int index;
float distance; float distance;
//less is better //less is better
bool operator<( const DescriptorMatching &m) const bool operator<( const DMatch &m) const
{ {
return distance < m.distance; return distance < m.distance;
} }
@ -1573,7 +1573,7 @@ public:
* query The query set of descriptors * query The query set of descriptors
* matchings Matchings of the closest matches from the training set * matchings Matchings of the closest matches from the training set
*/ */
void match( const Mat& query, vector<DescriptorMatching>& matchings ) const; void match( const Mat& query, vector<DMatch>& matchings ) const;
/* /*
* Find the best matches between two descriptor sets, with constraints * Find the best matches between two descriptor sets, with constraints
@ -1587,7 +1587,7 @@ public:
* matchings Matchings of the closest matches from the training set * matchings Matchings of the closest matches from the training set
*/ */
void match( const Mat& query, const Mat& mask, void match( const Mat& query, const Mat& mask,
vector<DescriptorMatching>& matchings ) const; vector<DMatch>& matchings ) const;
/* /*
* Find the best keypoint matches for small view changes. * Find the best keypoint matches for small view changes.
@ -1623,7 +1623,7 @@ protected:
* The mask may be empty. * The mask may be empty.
*/ */
virtual void matchImpl( const Mat& descriptors_1, const Mat& descriptors_2, virtual void matchImpl( const Mat& descriptors_1, const Mat& descriptors_2,
const Mat& mask, vector<DescriptorMatching>& matches ) const = 0; const Mat& mask, vector<DMatch>& matches ) const = 0;
static bool possibleMatch( const Mat& mask, int index_1, int index_2 ) static bool possibleMatch( const Mat& mask, int index_1, int index_2 )
{ {
@ -1660,14 +1660,14 @@ inline void DescriptorMatcher::match( const Mat& query, const Mat& mask,
matchImpl( query, train, mask, matches ); matchImpl( query, train, mask, matches );
} }
inline void DescriptorMatcher::match( const Mat& query, vector<DescriptorMatching>& matches ) const inline void DescriptorMatcher::match( const Mat& query, vector<DMatch>& matches ) const
{ {
matchImpl( query, train, Mat(), matches ); matchImpl( query, train, Mat(), matches );
} }
inline void DescriptorMatcher::match( const Mat& query, const Mat& mask, inline void DescriptorMatcher::match( const Mat& query, const Mat& mask,
vector<DescriptorMatching>& matches ) const vector<DMatch>& matches ) const
{ {
matchImpl( query, train, mask, matches ); matchImpl( query, train, mask, matches );
} }
@ -1697,7 +1697,7 @@ protected:
const Mat& mask, vector<int>& matches ) const; const Mat& mask, vector<int>& matches ) const;
virtual void matchImpl( const Mat& descriptors_1, const Mat& descriptors_2, virtual void matchImpl( const Mat& descriptors_1, const Mat& descriptors_2,
const Mat& mask, vector<DescriptorMatching>& matches ) const; const Mat& mask, vector<DMatch>& matches ) const;
Distance distance; Distance distance;
}; };
@ -1706,7 +1706,7 @@ template<class Distance>
void BruteForceMatcher<Distance>::matchImpl( const Mat& descriptors_1, const Mat& descriptors_2, void BruteForceMatcher<Distance>::matchImpl( const Mat& descriptors_1, const Mat& descriptors_2,
const Mat& mask, vector<int>& matches ) const const Mat& mask, vector<int>& matches ) const
{ {
vector<DescriptorMatching> matchings; vector<DMatch> matchings;
matchImpl( descriptors_1, descriptors_2, mask, matchings); matchImpl( descriptors_1, descriptors_2, mask, matchings);
matches.resize( matchings.size() ); matches.resize( matchings.size() );
for( size_t i=0;i<matchings.size();i++) for( size_t i=0;i<matchings.size();i++)
@ -1717,7 +1717,7 @@ void BruteForceMatcher<Distance>::matchImpl( const Mat& descriptors_1, const Mat
template<class Distance> template<class Distance>
void BruteForceMatcher<Distance>::matchImpl( const Mat& descriptors_1, const Mat& descriptors_2, void BruteForceMatcher<Distance>::matchImpl( const Mat& descriptors_1, const Mat& descriptors_2,
const Mat& mask, vector<DescriptorMatching>& matches ) const const Mat& mask, vector<DMatch>& matches ) const
{ {
typedef typename Distance::ValueType ValueType; typedef typename Distance::ValueType ValueType;
typedef typename Distance::ResultType DistanceType; typedef typename Distance::ResultType DistanceType;
@ -1753,7 +1753,7 @@ void BruteForceMatcher<Distance>::matchImpl( const Mat& descriptors_1, const Mat
if( matchIndex != -1 ) if( matchIndex != -1 )
{ {
DescriptorMatching matching; DMatch matching;
matching.index = matchIndex; matching.index = matchIndex;
matching.distance = matchDistance; matching.distance = matchDistance;
matches[i] = matching; matches[i] = matching;
@ -1830,7 +1830,7 @@ public:
// image The source image // image The source image
// points Test keypoints from the source image // points Test keypoints from the source image
// matchings A vector to be filled with keypoint matchings // matchings A vector to be filled with keypoint matchings
virtual void match( const Mat& image, vector<KeyPoint>& points, vector<DescriptorMatching>& matchings ) {}; virtual void match( const Mat& image, vector<KeyPoint>& points, vector<DMatch>& matchings ) {};
// Clears keypoints storing in collection // Clears keypoints storing in collection
virtual void clear(); virtual void clear();
@ -1906,7 +1906,7 @@ public:
// loaded with DescriptorOneWay::Initialize, kd tree is used for finding minimum distances. // loaded with DescriptorOneWay::Initialize, kd tree is used for finding minimum distances.
virtual void match( const Mat& image, vector<KeyPoint>& points, vector<int>& indices ); virtual void match( const Mat& image, vector<KeyPoint>& points, vector<int>& indices );
virtual void match( const Mat& image, vector<KeyPoint>& points, vector<DescriptorMatching>& matchings ); virtual void match( const Mat& image, vector<KeyPoint>& points, vector<DMatch>& matchings );
// Classify a set of keypoints. The same as match, but returns point classes rather than indices // Classify a set of keypoints. The same as match, but returns point classes rather than indices
virtual void classify( const Mat& image, vector<KeyPoint>& points ); virtual void classify( const Mat& image, vector<KeyPoint>& points );
@ -2036,7 +2036,7 @@ public:
virtual void match( const Mat& image, vector<KeyPoint>& keypoints, vector<int>& indices ); virtual void match( const Mat& image, vector<KeyPoint>& keypoints, vector<int>& indices );
virtual void match( const Mat& image, vector<KeyPoint>& points, vector<DescriptorMatching>& matchings ); virtual void match( const Mat& image, vector<KeyPoint>& points, vector<DMatch>& matchings );
virtual void classify( const Mat& image, vector<KeyPoint>& keypoints ); virtual void classify( const Mat& image, vector<KeyPoint>& keypoints );
@ -2094,7 +2094,7 @@ public:
matcher.match( descriptors, keypointIndices ); matcher.match( descriptors, keypointIndices );
}; };
virtual void match( const Mat& image, vector<KeyPoint>& points, vector<DescriptorMatching>& matchings ) virtual void match( const Mat& image, vector<KeyPoint>& points, vector<DMatch>& matchings )
{ {
Mat descriptors; Mat descriptors;
extractor.compute( image, points, descriptors ); extractor.compute( image, points, descriptors );

View File

@ -433,7 +433,7 @@ void OneWayDescriptorMatch::add( KeyPointCollection& keypoints )
void OneWayDescriptorMatch::match( const Mat& image, vector<KeyPoint>& points, vector<int>& indices) void OneWayDescriptorMatch::match( const Mat& image, vector<KeyPoint>& points, vector<int>& indices)
{ {
vector<DescriptorMatching> matchings( points.size() ); vector<DMatch> matchings( points.size() );
indices.resize(points.size()); indices.resize(points.size());
match( image, points, matchings ); match( image, points, matchings );
@ -442,7 +442,7 @@ void OneWayDescriptorMatch::match( const Mat& image, vector<KeyPoint>& points, v
indices[i] = matchings[i].index; indices[i] = matchings[i].index;
} }
void OneWayDescriptorMatch::match( const Mat& image, vector<KeyPoint>& points, vector<DescriptorMatching>& matchings ) void OneWayDescriptorMatch::match( const Mat& image, vector<KeyPoint>& points, vector<DMatch>& matchings )
{ {
matchings.resize( points.size() ); matchings.resize( points.size() );
IplImage _image = image; IplImage _image = image;
@ -450,7 +450,7 @@ void OneWayDescriptorMatch::match( const Mat& image, vector<KeyPoint>& points, v
{ {
int poseIdx = -1; int poseIdx = -1;
DescriptorMatching matching; DMatch matching;
matching.index = -1; matching.index = -1;
base->FindDescriptor( &_image, points[i].pt, matching.index, poseIdx, matching.distance ); base->FindDescriptor( &_image, points[i].pt, matching.index, poseIdx, matching.distance );
matchings[i] = matching; matchings[i] = matching;
@ -744,7 +744,7 @@ void FernDescriptorMatch::match( const Mat& image, vector<KeyPoint>& keypoints,
} }
} }
void FernDescriptorMatch::match( const Mat& image, vector<KeyPoint>& keypoints, vector<DescriptorMatching>& matchings ) void FernDescriptorMatch::match( const Mat& image, vector<KeyPoint>& keypoints, vector<DMatch>& matchings )
{ {
trainFernClassifier(); trainFernClassifier();

View File

@ -425,7 +425,7 @@ inline float precision( int correctMatchCount, int falseMatchCount )
} }
void evaluateDescriptors( const vector<EllipticKeyPoint>& keypoints1, const vector<EllipticKeyPoint>& keypoints2, void evaluateDescriptors( const vector<EllipticKeyPoint>& keypoints1, const vector<EllipticKeyPoint>& keypoints2,
vector< pair<DescriptorMatching, int> >& matches1to2, vector< pair<DMatch, int> >& matches1to2,
const Mat& img1, const Mat& img2, const Mat& H1to2, const Mat& img1, const Mat& img2, const Mat& H1to2,
int &correctMatchCount, int &falseMatchCount, vector<int> &matchStatuses, int& correspondenceCount ) int &correctMatchCount, int &falseMatchCount, vector<int> &matchStatuses, int& correspondenceCount )
{ {
@ -1385,7 +1385,7 @@ void DescriptorQualityTest::runDatasetTest (const vector<Mat> &imgs, const vecto
transformToEllipticKeyPoints( keypoints1, ekeypoints1 ); transformToEllipticKeyPoints( keypoints1, ekeypoints1 );
int progressCount = DATASETS_COUNT*TEST_CASE_COUNT; int progressCount = DATASETS_COUNT*TEST_CASE_COUNT;
vector< pair<DescriptorMatching, int> > allMatchings; vector< pair<DMatch, int> > allMatchings;
vector<int> allMatchStatuses; vector<int> allMatchStatuses;
size_t matchingIndex = 0; size_t matchingIndex = 0;
int allCorrespCount = 0; int allCorrespCount = 0;
@ -1405,11 +1405,11 @@ void DescriptorQualityTest::runDatasetTest (const vector<Mat> &imgs, const vecto
readKeypoints( keypontsFS, keypoints2, ci+1 ); readKeypoints( keypontsFS, keypoints2, ci+1 );
transformToEllipticKeyPoints( keypoints2, ekeypoints2 ); transformToEllipticKeyPoints( keypoints2, ekeypoints2 );
descMatch->add( imgs[ci+1], keypoints2 ); descMatch->add( imgs[ci+1], keypoints2 );
vector<DescriptorMatching> matchings1to2; vector<DMatch> matchings1to2;
descMatch->match( imgs[0], keypoints1, matchings1to2 ); descMatch->match( imgs[0], keypoints1, matchings1to2 );
vector< pair<DescriptorMatching, int> > matchings (matchings1to2.size()); vector< pair<DMatch, int> > matchings (matchings1to2.size());
for( size_t i=0;i<matchings1to2.size();i++ ) for( size_t i=0;i<matchings1to2.size();i++ )
matchings[i] = pair<DescriptorMatching, int>( matchings1to2[i], i); matchings[i] = pair<DMatch, int>( matchings1to2[i], i);
// TODO if( commRunParams[di].matchFilter ) // TODO if( commRunParams[di].matchFilter )
int correspCount; int correspCount;