Распознавание изображений OpenCV SVM Classifier - PullRequest
0 голосов
/ 25 марта 2019

Я использую C ++ и OpenCV 3.3.1
Я пытаюсь обучить SVM с OpenCV, мои шаги:

  1. Предварительная обработка изображения
  2. Функция извлечения с SURF
  3. создание набора данных для изучения позитивных и негативных изображений
  4. изменить форму изображения 1 ряд 1
  5. создание метки с -1 для негатива и +1 для позитива
  6. обучение SVM
  7. предсказать

А теперь моя проблема: Допустим, мои изображения имеют размер 128 x 128, и после извлечения объектов я получил коврик с 16 строками и 128 столбцами после изменения формы я получил 1 строку и 2048 столбцов, теперь SVM обучен с таким размером строк и столбцов. И когда я пытаюсь предсказать с помощью моего SVM, у меня возникает проблема, заключающаяся в том, что для SVM требуется тот же размер функционального элемента Mat (1 строка и 2048 столбцов), но мое изображение для предсказания получило больше функций, чем обучающие изображения, так что Mat для предсказания - это способ больше по мере необходимости.

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

Как я могу использовать SVM для больших изображений?

1 Ответ

1 голос
/ 25 марта 2019

Использование дескрипторов SURF / SIFT, делая их функцией 1X 2048, не очень хорошая идея по двум причинам:

  1. Вы ограничиваете количество полезных функций для каждого изображения (= 16), и если количество функций отличается от 16, вы получите ошибку. Даже если вы заставляете использовать 16 функций каждый раз, вы можете в конечном итоге потерять функции, и, следовательно, результаты ухудшатся

  2. Вы обучаете классификатор SVM для измерения 2048 без использования какого-либо отношения между извлеченными дескрипторами объектов.

Более надежный и стандартный способ сделать это - использовать Bag of Words. Вы получаете K-мерный дескриптор из SIFT-функций, используя пакет слов и подход к гистограмме, а затем вы обучаете SVM-классификатор этим K-мерным дескрипторам, который будет одинаковым для каждого изображения.

Эта ссылка может быть полезна для вас,

https://www.codeproject.com/Articles/619039/Bag-of-Features-Descriptor-on-SIFT-Features-with-O

Если вы хотите использовать MATLAB; тогда vlfeat имеет реализацию всего конвейера.

...