После прочтения Эта бумага, а также многие answers.opencv
вопросы, мне было интересно, есть ли какие-либо примеры кода в ORB Bag Of Words? Я мог только найти SURF
или же SIFT
Примеры.
К сожалению, нет примера использования Bag-Of-Words с двоичными дескрипторами (BRIEF, ORB, БРИСК, ФРИК). В любом случае, бумага, которую вы показали, объясняет, как вы можете это сделать. Для традиционных дескрипторов (SIFT, SURF) используется метод кластеризации k-средних, потому что словарь генерируется из набора реально значимых дескрипторов. Однако, чтобы получить бинарный словарь, метод k-средних не идеален, поскольку среднее значение не определено в двоичном пространстве, тогда вы можете использовать метод k-большинства.
Самый простой способ кластеризации бинарных функций в OpenCV — это использование FLANN с расстоянием Хэмминга. Насколько мне известно, никакого примера не существует, потому что для этого потребуется сначала исправить ошибку в функции расстояния Хэмминга OpenCv [1].
Это мой код для него, где cvhack::Hamming<uchar>
исправлена ошибка расстояния Хэмминга
cvflann::KMeansIndexParams params;
cv::Mat centres = cv::Mat::zeros(dictionarySize, features.cols, CV_32F);
int count = cv::flann::hierarchicalClustering<uchar,cvhack::Hamming<uchar>>(features,centres,params);