OpenCV BOW - слишком высокие значения гистограммы

0

Я пытаюсь реализовать BOW с библиотекой OpenCV в C++. Я извлек ключевые точки изображений с помощью SIFT-метода, подобного этому (для каждого изображения):

featureDetector->detect(image, keypoints);
descriptorExtractor->compute(image, keypoints, descriptors);
bowTrainer.add(descriptors);

то лексика обучается с помощью bowTrainer.cluster() и сохраняется в BOWImgDescriptorExtractor bowDE. После того, как я сохранил словарь, вы хотите увидеть хотя бы одну диаграмму для некоторых изображений. Это выполняется так

featureDetector->detect(image, keypoints);
bowDE->compute(image, keypoints, histogram);
for (int i = 0; i < histogram.cols; i++)
    cout << histogram.at<unsigned>(0, i) << ",";

И результат имеет 1 строку с k столбцами (k от k-средств) значения 0 или sth около 980000000 Я не думаю, что это правильно, пожалуйста, скажите мне, что я делаю неправильно. Это выглядит очень плохо, когда я хочу показать диаграмму.

Теги:
opencv

1 ответ

0
Лучший ответ

Почти забыл... Решение было довольно простым. Линия:

cout << histogram.at<unsigned>(0, i) << ",";

пришлось изменить на

cout << histogram.at<float>(0, i) << ",";

потому что сгенерированная гистограмма является нормированной гистограммой. для получения более подробного ответа см. ответ на OpenCV

Ещё вопросы

Сообщество Overcoder
Наверх
Меню