BoW в OpenCV с использованием предварительно вычисленных функций

Мне нужно сделать BOW (мешок слов), но у меня есть только описанные ключевые точки изображений.
На данный момент я получил словарь, используя:

cv::BOWKMeansTrainer bowtrainerCN(numCenters); //num clusters
bowtrainerCN.add(allDescriptors);
cv::Mat vocabularyCN = bowtrainerCN.cluster();

Так что теперь мне нужно сделать назначение, но я не могу использовать функцию вычисления, потому что она вычисляет дескрипторы изображений, и у меня уже есть это. Есть ли какая-либо функция для выполнения задания или я должен вычислять ее вручную?

1

Решение

После того, как вы создали словарь (кодовую книгу), используя cv::BOWKMeansTrainer::cluster() метод, вы можете сопоставить дескриптор (с подходящим размером и типом) для кодовой книги. Сначала вы должны выбрать тип соответствия, который вам нужен, с нормой использования. (увидеть OpenCV DOC)

Например, с cv::BFMatcher а также L2 norm

// init the matcher with you pre-trained codebook
cv::Ptr<cv::DescriptorMatcher > matcher = new cv::BFMatcher(cv::NORM_L2);
matcher->add(std::vector<cv::Mat>(1, vocabulary));
// matches
std::vector<cv::DMatch> matches;
matcher->match(new_descriptors,matches);

Тогда индекс ближайшего кодового слова в вашей кодовой книге для new_descriptors [i] будет

matches[i].trainIdx;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]