Урок 13: Распознавание букв - мелочи
Идеи/советы
1) Чтобы перенести реализацию построения HoG из позапрошлого урока в предыдущий урок в котором было реализовано разбиение картинки на буквы - казалось бы достаточно скопировать ваш hog.h хэдер с декларацией и hog.cpp файл с реализацией в папку прошлого урока рядом с parseSymbols.h и parseSymbols.cpp.
И да, это очень хорошая идея - осталось дело за малым - подсказать компилятору что этот файл надо компилировать в рамках проекта, давайте посмотрим как это было проделано для parseSymbols.h и parseSymbols.cpp и сделаем по аналогии и для hog.h + hog.cpp.
2) Как упорядочить буквы? Для начала просто отсортировать их по оси x - воспользуйтесь std::sort
, а чтобы узнать как сформулировать критерий сортировки (оператор сравнения объектов) - загуглите cpp how to sort vector of custom objects
.
3) Как упорядочить буквы по несколько строк? Например так:
- Отсортируем все буквы по оси y. Разобъем их на группы по принципу “пока координата y между соседними буквами отличается меньше чем на число пикселей соответствующее типовой букве - добавляем буквы в один список, если произошел резкий скачек y - мы накапливаем новую строчку букв”.
- Затем в каждой группе “строчка букв” проводим независимую сортировку по оси x.
4) Как получить лучший результат?
- Попробовать увеличить число корзин в HoG
- Добавить интерполяцию голосов (добавлять не только в “ближайшую корзину”, но сразу в две корзины - пропорционально тому насколько какая из них ближе, как было с пространством Хафа)
- Попробовать строить не один HoG на всю букву - а, учтя проблемы с
b-p
иq-d
, рассекать букву на две части - верхняя половина и нижняя половина, и строить HoG для каждой части независимо, а затем клеить эти два HoG (по сути два вектора) в один HoG (по сути один вектор, но в два раза более длинный), но проблемы сv-w
останутся, что поделать…
5) Попробовать реализовать другой метод