2015-02-05 5 views
2

После прочтения this paper, а также многих вопросов answers.opencv, мне было интересно, есть ли какие-либо примеры кода из ORB Bag Of Words? Я мог найти только SURF или SIFT примеров.opencv C++ ORB Bag Of Words

+0

для BOW, к сожалению, только просеивание и серфинг (плавающие дескрипторы) являются подходящими из-за расстояния l2, используемого в кластеризации kmeans. – berak

+0

Так как же они достигли этого? – fakeaccount

+0

^^, заменив часть kmeans другим алгоритмом, кластерные дескрипторы с расстоянием от помех и пересчитав центры кластеров с помощью мажоритарного голосования – berak

ответ

5

К сожалению, нет примеров использования Bag-Of-Words с двоичными дескрипторами (BRIEF, ORB, BRISK, FREAK). В любом случае бумага, которую вы показали, объясняет, как вы можете это сделать. Для традиционных дескрипторов (SIFT, SURF) используется технология кластеризации k-mean, потому что словарь генерируется из набора реальных значащих дескрипторов. Однако для получения бинарного словаря метод k -средства не идеален, потому что среднее значение не определено в двоичном пространстве, тогда вы можете использовать метод k-major.

1

Самый простой способ сгруппировать двоичные функции в 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); 
Смежные вопросы