Нахожу в тесте вопросы, которые в принципе не освещаются в лекции. Нужно гуглить на других ресурсах, чтобы решить тест, или же он всё же должен испытывать знания, полученные в ходе лекции? |
Самостоятельная работа 4: Классификация изображений с использованием bag-of-words методов
3. Программная реализация
3.1. Разработка программы классификации изображений с использованием bag-of-words методов
3.1.1. Требования к приложению
На данном этапе предлагается разработать приложение, предназначенное для классификации изображений двух различных классов, предусматривающее возможность применения всех операций, перечисленных в разделе 2. К приложению предъявляются следующие требования:
- Ввод исходных данных (пути к папкам, содержащим изображения обоих классов; тип детектора и дескриптора особых точек; число слов в словаре дескрипторов ключевых точек) осуществляется через аргументы командной строки.
- Разбиение исходных данных на тренировочную и тестовую выборки случайным образом.
- Выполнение следующей последовательности действий для
тренировочной выборки:
нахождение ключевых точек и вычисление их дескрипторов;
обучение словаря;
построение признакового описания изображений;
формирование обучающей выборки и обучение классификатора "случайный лес".
- Выполнение следующей последовательности действий для каждого
изображения из тестовой выборки:
нахождение ключевых точек и вычисление их дескрипторов;
построение признакового описания;
предсказание категории изображения с использованием обученного классификатора и вычисленных признаков;
- Вывод результатов классификации изображений на тестовой выборке.
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)