Опубликован: 02.09.2013 | Доступ: свободный | Студентов: 429 / 54 | Длительность: 19:27:00

Самостоятельная работа 4: Классификация изображений с использованием bag-of-words методов

3. Программная реализация

3.1. Разработка программы классификации изображений с использованием bag-of-words методов

3.1.1. Требования к приложению

На данном этапе предлагается разработать приложение, предназначенное для классификации изображений двух различных классов, предусматривающее возможность применения всех операций, перечисленных в разделе 2. К приложению предъявляются следующие требования:

  1. Ввод исходных данных (пути к папкам, содержащим изображения обоих классов; тип детектора и дескриптора особых точек; число слов в словаре дескрипторов ключевых точек) осуществляется через аргументы командной строки.
  2. Разбиение исходных данных на тренировочную и тестовую выборки случайным образом.
  3. Выполнение следующей последовательности действий для тренировочной выборки:

    нахождение ключевых точек и вычисление их дескрипторов;

    обучение словаря;

    построение признакового описания изображений;

    формирование обучающей выборки и обучение классификатора "случайный лес".

  4. Выполнение следующей последовательности действий для каждого изображения из тестовой выборки:

    нахождение ключевых точек и вычисление их дескрипторов;

    построение признакового описания;

    предсказание категории изображения с использованием обученного классификатора и вычисленных признаков;

  5. Вывод результатов классификации изображений на тестовой выборке.
3.1.2. Структура приложения

Приложение будет состоять из набора вспомогательных функций (auxiliary.cpp/h), основного модуля, содержащего реализацию основных стадий bag-of-words подхода к классификации изображений с использованием функций OpenCV (bow.cpp/h), и файла c исходным кодом основной функции (main.cpp). В рамках лабораторной работы предлагается реализовать функции из основного модуля; вспомогательные функции и код основной функции поставляется в реализованном виде.

Рассмотрим вспомогательные функции.

void GetFilesInFolder(const string& dirPath, 
                      std::vector<string>& filesList) 
                      

Заполняет массив filesList списком всех файлов с расширением *.jpg из директории dirPath. Рассмотрим параметры данной функции:

  • dirPath – путь к директории, содержащей изображения
  • filesList – список всех файлов с расширением *.jpg, содержащихся в данной директории
void InitRandomBoolVector(vector<bool>& mask, double prob)

Заполняет булевский вектор mask случайными значениями (true с вероятностью prob). Рассмотрим параметры данной функции:

  • mask – булевский вектор, который должен быть заполнен случайными значениями;
  • prob – вероятность того, что элементу булевского массива будет присвоено значение true.

Рассмотрим функции из модуля bow.cpp, которые необходимо реализовать в рамках лабораторной работы.

Mat TrainVocabulary(const std::vector<string>& filesList, 
     const std::vector<bool>& isVoc,  
   const Ptr<FeatureDetector>& keypointsDetector, 
     const Ptr<DescriptorExtractor>& dExtractor, 
int vocSize) 
Андрей Терёхин
Андрей Терёхин

Нахожу в тесте вопросы, которые в принципе не освещаются в лекции. Нужно гуглить на других ресурсах, чтобы решить тест, или же он всё же должен испытывать знания, полученные в ходе лекции?

Демянчик Иван
Демянчик Иван

В главе 14 мы видим понятие фильтра, но не могу разобраться, чем он является в теории и практике.

" Искомый объект можно описать с помощью фильтра F= \lbrace f_{x',y'},x' \in \lbrace0, ...,w_f \rbrace , y' \in \lbrace 0,...,h_f \rbrace \rbrace "