Ошибка вычисления ORB: она удаляет все ключевые точки с маленьким изображением

У меня есть небольшое изображение 50х50. Я нахожу ключевые точки ORB с:

(Обратите внимание, что мне нужно изменить значение параметра patchSize по умолчанию с 31 на 14, чтобы определить некоторые ключевые точки):

 OrbFeatureDetector det(500,1.2f,8,14,0,2,0,14);   //> (From 31 to 14)
OrbDescriptorExtractor desc;

det.detect(image,kp)
//> kp.size() is about 50 keypoints

Теперь, если я передаю свои ключевые точки на orb.compute, я стираю все ключевые точки.

 desc.compute(image,kp,kpDesc);
//> Now kp.size() == 0

Это означает, что после того, как я вызвал .compute, метод удалил все ключевые точки.

Изображение, которое я использую это:
введите описание изображения здесь

Я считаю, что это какая-то ошибка. Кто-то может подтвердить? Я использую OpenCV 2.4.5

2

Решение

Нет, это не ошибка.

Проблема в том, что OrbDescriptorExtractor не знает, что вы изменили параметр в FeatureDetector. Таким образом, вы должны снова установить правильные параметры:

OrbFeatureDetector      det(500,1.2f,8,14,0,2,0,14);   //> (From 31 to 14)
OrbDescriptorExtractor desc(500,1.2f,8,14,0,2,0,14);
4

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

Вы создаете два объекта, детектор объектов и экстрактор дескриптора. Они должны быть инициализированы с теми же параметрами.

Вы можете уменьшить дублирование кода, установив одинаковые параметры дважды, создав один экземпляр cv::ORB а потом звонит cv::ORB::operator(), вот так:

cv::ORB orb(500,1.2f,8,14,0,2,0,14);
orb(image,cv::noArray(),kp,kpDesc);

Это будет идентично вашему первоначальному решению, так как детектор функций и экстрактор действительно являются одним и тем же объектом. Из заголовков OpenCV:

typedef ORB OrbFeatureDetector;
typedef ORB OrbDescriptorExtractor;
4

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