Распознавание дорожных знаков. Мой опыт

Поиск кандидатов на основе контурного анализа.
За основу для тестов, взял первое попавшееся на ютубе видео и сделал скриншот размером 800x440

Изображение сначала преобразуем в оттенки серого методом CV_LOAD_IMAGE_GRAYSCALE,
для того что бы а последствии снизить время обработки и уменьшить нагрузку на процессор.


Получение информативной области изображения
Для получения информативной области изображения использую функцию Rect
После отсечения всего лишнего получил следующую картинку


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


Бинаризация
Бинаризация это преобразование изображения в монохромное, у которого всего два значения лог.0 и лог.1
Бинаризация нужна для последующего определения контуров контуров
Для бинаризации использовал пороговую фунцию Threshold с порогом 127 и максимумом 255


Контурный анализ
Позволяет нам сравнивать и производить поиск объектов, представленных в виде внешних очертаний – контуров
Производим поиск требуемых контуров при помощи функции FindContours и обрамляем их для переноса на маску
Контура отфильтровываются по длине периметра и соответствию его пощади
Для этого используются функции contourArea и arcLength


Поиск кандидатов
Накладываем маску на изображение и видим кандидатов, которые будут предоставлены на распознавание заранее обученной нейронной сети


Подготовка к распознаванию
Маска создавалась для наглядности, на самом деле она при распознавании не потребуется, изображения сначала вырезаются, потом ресайзятся, интерполируются до размера 40x40 и после этого будут подаваться на опознание нейронной сети
Вот так они выглядят.
  • 0
  • avatar
  • Поделиться

Комментарии (17)

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.