В настоящее время я работаю над проблемой классификации объектов. Моя цель - использовать дескрипторы SURF для обучения искусственной нейронной сети на основе MLP в opencv и создания модели для классификации объектов. До сих пор я достиг следующего:Как выбрать хорошие ключевые точки функции SURF?
Я вычислительное SURF ключевых точек, используя следующий код:
vector<KeyPoint> computeSURFKeypoints(Mat image) {
SurfFeatureDetector surfdetector(400, 4, 2, true, false);
vector<KeyPoint> keypoints;
surfdetector.detect(image, keypoints);
return keypoints;
}
Я вычислить прибой дескрипторы над этими ключевыми точками, используя следующий код:
Mat computeSURFDescriptors(Mat image, vector<KeyPoint> keypoints) {
SurfDescriptorExtractor extractor;
Mat descriptors;
extractor.compute(image, keypoints, descriptors);
return descriptors;
}
Проблема, с которой я сталкиваюсь, заключается в том, что размер дескриптора варьируется от изображения к изображению. Дескриптор содержит 64 элемента ДЛЯ КАЖДОЙ ФУНКЦИИ. Для обучения нейронной сети я хочу, чтобы размер дескриптора был исправлен. Для этого я использую ППШ, чтобы уменьшить размер дескриптора следующим образом:
Mat projection_result;
PCA pca(descriptors, Mat(), CV_PCA_DATA_AS_COL, 64);
pca.project(descriptors,projection_result);
return projection_result;
При этом, я могу уменьшить размеры дескриптора, но выбранные характерные точки не являются репрезентативными изображения и они приводят в плохих результатах сопоставления. Как уменьшить размер дескриптора, сохранив хорошие точки функции? Любая помощь будет оценена.
Вы говорите »... размер дескриптора варьируется от изображения к изображению. Дескриптор содержит 64 элемента ДЛЯ КАЖДОЙ ФУНКЦИОНАЛЬНОЙ ТОЧКИ " , который не имеет смысла. SURF дескриптор - 64 или 128 элементов. Вы отметили расширенный флаг True, поэтому вы должны получить 128 элементов. Думаю, вы говорите о разных функциях? –
описание ** количество ** меняется от изображения к изображению (не размер). Чтобы преодолеть это, обычно применяется кластеризация Bag-of-Words (и вы в конечном итоге подаете фиксированный N-мерный вектор, содержащий расстояния до вашего словаря в ваш мл) – berak
@berak: Не могли бы вы рассказать?Может быть, ответ на ваши мысли? – Bhoot