Я использую БЫСТРО и FREAK получить дескрипторы пары изображений, а затем я применяю knnMatch с BruteForceMatcher согласованью и рядом я использую цикл, чтобы отделить хорошие матчи:обнаружения объектов с расстоянием Хемминг
float nndrRatio = 0.7f;
std::vector<KeyPoint> keypointsA, keypointsB;
Mat descriptorsA, descriptorsB;
std::vector< vector<DMatch> > matches;
int threshold=9;
// detect keypoints:
FAST(objectMat,keypointsA,threshold,true);
FAST(sceneMat,keypointsB,threshold,true);
FREAK extractor;
// extract descriptors:
extractor.compute(objectMat, keypointsA, descriptorsA);
extractor.compute(sceneMat, keypointsB, descriptorsB);
BruteForceMatcher<Hamming> matcher;
// match
matcher.knnMatch(descriptorsA, descriptorsB, matches, 2);
// good matches search:
vector<DMatch> good_matches;
for (size_t i = 0; i < matches.size(); ++i)
{
if (matches[i].size() < 2)
continue;
const DMatch &m1 = matches[i][0];
const DMatch &m2 = matches[i][1];
if(m1.distance <= nndrRatio * m2.distance)
good_matches.push_back(m1);
}
//If there are at least 7 good matches, then object has been found
if ((good_matches.size() >=7))
{
cout << "OBJECT FOUND!" << endl;
}
Я думаю, что проблема может быть хорошим методом поиска матчей, потому что использование его с FlannBasedMatcher отлично работает, но с BruteForceMatcher очень странно. Я подозреваю, что я могу совершить бессмыслицу с помощью этого метода, потому что расстояние Хэмминга использует двоичные дескрипторы, но я не могу придумать способ его адаптации!
Любые ссылки, фрагменты, идеи, ... пожалуйста?
Итак, проблема в том, что совпадения, данные BFMatcher, неверны? Как вы его инициализируете? 'Резюме :: BFMatcher (резюме :: NORM_HAMMING)'? – JonesV
Я попытался с помощью: 'cv :: BFMatcher matcher (cv :: NORM_HAMMING);' но результаты почти одинаковы. Я все еще думаю, что моя проблема может быть в последней части ... – Str1101
У меня все еще не проблема. Почему вы говорите, что результаты плохие? – JonesV