1 | initial version |
The struct DMatch tells for a descriptor (feature) which descriptor (feature) from the train set is more similar. So there are a queryIndex a TrainIndex (which features decide the matcher that is more similar) and a distance. The distance represents how far is one feature from other (in some metric NORM_L1, NORM_HAMMING etc).
So you can determine if a matche is correct if you set a threshold for the distance. For example with SURF features you can match with knnMatch the 2 nearest features, and then you get a Matrix of Matches and you can take as good matches all that its distance are the half than the second I mean:
matcher->knnMatch(desc1, trainDesc, matches, 2, Mat(), false );
for(int i=0; i<matches.size(); i++){
if(matches[i][0].distance > matches[i][1].distance * 0.6){
goodMatches.push_back(i);
}
}