В момента работя върху проблем с класификацията на обекти. Моята цел е да използвам SURF дескрипторите за обучение на базирана на MLP изкуствена невронна мрежа в opencv и генериране на модел за класификация на обекти. До момента съм постигнал следното:
Изчислявам SURF ключови точки, като използвам следния код:
vector<KeyPoint> computeSURFKeypoints(Mat image) {
SurfFeatureDetector surfdetector(400, 4, 2, true, false);
vector<KeyPoint> keypoints;
surfdetector.detect(image, keypoints);
return keypoints;
}
Изчислявам SURF дескрипторите върху тези ключови точки, като използвам следния код:
Mat computeSURFDescriptors(Mat image, vector<KeyPoint> keypoints) {
SurfDescriptorExtractor extractor;
Mat descriptors;
extractor.compute(image, keypoints, descriptors);
return descriptors;
}
Проблемът, с който се сблъсквам, е, че размерът на дескриптора варира от изображение на изображение. Дескрипторът съдържа 64 елемента ЗА ВСЯКА ХАРАКТЕРИСТИКА. За целите на обучението на невронната мрежа искам размерът на дескриптора да бъде фиксиран. За това използвам PCA, за да намаля размера на дескриптора, както следва:
Mat projection_result;
PCA pca(descriptors, Mat(), CV_PCA_DATA_AS_COL, 64);
pca.project(descriptors,projection_result);
return projection_result;
Правейки това, мога да намаля размерите на дескриптора, но избраните характерни точки не са представителни за изображението и водят до лоши резултати за съвпадение. Как мога да намаля измерението на дескриптора, като запазя добри характеристики? Всяка помощ ще бъде оценена.