2

Я пытаюсь извлечь различные дескрипторы точек (SIFT, SURF, ORB, BRIEF, ...) для создания Bag of Visual words. Проблема в том, что я использую очень маленькие изображения: 12x60px. Используя плотный экстрактор, я могу получить некоторые ключевые точки, но тогда при извлечении дескриптора данные не извлекаются.Дескрипторы дескрипторов из небольших изображений с использованием OpenCV

Вот код:

vector<KeyPoint> points; 
Mat descriptor; // descriptor of the current image 
Ptr<DescriptorExtractor> extractor = DescriptorExtractor::create("BRIEF"); 
Ptr<FeatureDetector> detector(new DenseFeatureDetector(1.f,1,0.1f,6,0,true,false)); 
image = imread(filename, 0); 
roi = Mat(image,Rect(0,0,12,60)); 

detector->detect(roi,points); 

extractor->compute(roi,points,descriptor); 
cout << descriptor << endl; 

В результате [] (с кратким и ОРБ) и Segfault (с SURF и SIFT). Кто-нибудь знает, как плотно извлекать дескрипторы точек из небольших изображений на OpenCV? Спасибо за помощь.

ответ

1

BRIEF и ORB используют патч 32x32 для получения дескриптора. Так как это не соответствует вашему изображению, они удаляют эти ключевые точки (чтобы не возвращать ключевые точки без дескриптора).

В случае SURF и SIFT они могут использовать меньшие исправления, но это зависит от шкалы, предоставленной ключевой точкой. В этом случае, я думаю, они должны использовать более крупный патч и то же самое, что и раньше. Однако я не знаю, почему вы получаете segfault; возможно, экстракторы SIFT/SURF дескрипторов не проверяют, что ключевые точки находятся внутри границ изображения, как это делают BRIEF/ORB.

2

Действительно, я, наконец, смог проделать свой путь к решению. Спасибо за помощь.

Я теперь с помощью детектора Orb с initalised параметрами вместо случайной, например:

Ptr<DescriptorExtractor> extractor(new ORB(500, 1.2f, 8, orbSize, 0, 2, ORB::HARRIS_SCORE, orbSize)); 

мне пришлось изучить документацию OpenCV тщательно, прежде чем найти ответ на мою проблему: Orb documentation.

Также, если люди используют экстрактор с плотной точкой, им следует знать, что после процесса вычисления дескриптора они могут иметь меньше ключевых точек, чем созданный экстрактором ключей. В дескрипторном вычислении удаляются любые ключевые точки, для которых он не может получить данные.

Смежные вопросы