используя dsift библиотеки vlfeat с помощью cv :: Mat

В настоящее время я пытаюсь использовать dsift-алгоритм vlfeat-lib. Но независимо от того, с какими значениями я создаю фильтр (шаг выборки, размер ячейки), он возвращает одинаковое количество ключевых точек для каждого кадра во время выполнения (последовательные кадры отличаются от камеры). Документация по использованию C или C ++ очень тонкая, и я не смог найти хороших примеров для этих языков.
Вот соответствующий код:

// create filter
vlf = vl_dsift_new_basic(320, 240, 1, 3);

// transform image in cv::Mat to float vector
std::vector<float> imgvec;
for (int i = 0; i < img.rows; ++i){
for (int j = 0; j < img.cols; ++j){
imgvec.push_back(img.at<unsigned char>(i,j) / 255.0f);
}
}
// call processing function of vl
vl_dsift_process(vlf, &imgvec[0]);

// echo number of keypoints found
std::cout << vl_dsift_get_keypoint_num(vlf) << std::endl;

3

Решение

он возвращает одинаковое количество ключевых точек для каждого кадра в течение
выполнение

Это нормально с плотный Реализация SIFT, поскольку количество извлеченных ключевых точек зависит только от входных геометрических параметров [1], то есть шага и размера изображения.

Увидеть документация:

Фреймы объектов (ключевые точки) косвенно определяются шагами выборки (vl_dsift_set_steps) и границы выборки (vl_dsift_set_bounds).

[1]: vl_dsift_get_keypoint_num возвращается self->numFrames обновляется только _vl_dsift_update_buffers который использует только геометрическую информацию (границы, шаги и размеры бина).

4

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

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

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