Я разрабатываю рукописную систему распознавания символов с использованием OpenSV LibSVM. я выделил 14 признаков для вектора функции, включая моменты Hu, аффинные инвариантные моменты, числа углов и т. д. Для каждого символа я использую 5 выборок (для буквы «A», там 5 типов A). Я знаю, что 5 образцов недостаточно, но в моменты у меня есть только 5 образцов для каждого символа.Как настроить CvSVM для классификации изображений в OpenCV и C++
Я использую основной пример LINEAR SVM в документации opencv. Моя проблема заключается в том, могу ли я использовать этот пример документации, как есть, для моей цели. Я читал о системах OCR, которые используют многоуровневые SVM. Мне нужен такой Multi-Class SVM для моего приложения. Я не понимаю об этом. Может кто-нибудь объяснить? Вот мой код.
У меня есть 180 образцов цифр и английских заглавных букв, и для одного образца есть 14 функций.
float labels[180][1] = {1.0, 2.0, 3.0, 4.0, 5.0, ,,,,, -> 180.0};
Mat matlabesls(180,1, CV_32FC1, labels);
Mat mattrainingDataMat(180, 14, CV_32FC1, ifarr_readtrainingdata);
CvSVMParams params;
params.svm_type = CvSVM::C_SVC;
params.kernel_type = CvSVM::LINEAR;
params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);
CvSVM SVM;
SVM.train(mattrainingDataMat,matlabesls,Mat(),Mat(),params);
Mat matinput(1,14,CV_32FC1,ifarr_testarray);
is_recognizedcharacter= SVM.predict(matinput);
return is_recognizedcharacter;
привет спасибо, что рассмотрели мой вопрос. Я изменяю код следующим образом. У меня 36 классов (26 букв, 10 цифр). На данный момент я использую только 5 образцов (пока я не получу четкую идею). для одного класса имеется 5 образцов, а для одного образца - 14 функций. то для одного класса имеется 70 функций (5 * 14). это то, что вы имели ввиду ?? plz help .. \t 'float labels [36] [1] = {1.0, 2.0, ... -> 36.0}; Mat matlabesls (36,1, CV_32FC1, ярлыки) Mat mattrainingDataMat (36, 70, CV_32FC1, ifarr_readtrainingdata); –
Если ваши данные состоят из функций для 3-х примеров «A», 2 «C» и 3 из «5» (в этом порядке), ваши метки будут «float labels» [7] [1] = {11.0 , 11.0, 11.0, 13.0,13,0, 5.0, 5.0, 5.0} при использовании 0.0..9.0 используются для обозначения «0» и «9» и 11.0..35.0 используются для обозначения «A» .. «Z», , Если порядок ваших данных был перепутан, метки должны были быть помечены для соответствия. Этикетки сообщают SVM, что каждый элемент данных является образцом. – Bull
Большое спасибо, я знаю о маркировке. не могли бы вы рассказать мне о том, где здесь находится многоклассовый SVM. я чувствую, как вы сказали, что есть 3 11,0, 2 13,0 ... и т. д. это называется MultiClass SVM ?? –