Цель данной работы заключается в разработке алгоритма, осуществляющего решения задачи по распознаванию и идентификации 4 дорожных знаков (Road signs detection and recognitions), а также проверка эффективности работы алгоритмов. Исходные данные получались в виде последовательности изображений, полученные с камеры мобильного телефона Sumsung galaxy S5 с разрешением Full-HD. Основными задачами были получения идентификации дорожного знака а также координаты центра этого знака и фиксирование его на изображении.
Достижение этой цели подразумевает решение следующих задача: определения типа дорожного знака (круг, треугольник,...), классификация по цвету (красный, синий,... ) а также идентификация дорожного знака.
В процессе анализа возможных подходов рассматривались несколько вариантов: обучающихся и статических подходов.
Для реализации поставленной задачи была взята библиотека компьютерного зрения OpenCV, поскольку данная библиотека включает в себя набор алгоритмов компьютерного зрения, обработки изображения и численных алгоритмов общего назначения с открытым исходным кодом.
Статический подход распознавания (Static recognition approach).
Данный поход заключает в себя несколько этапов:
Все дорожные знаки имеют два общих признака — цвет и форму знака. Для данных знаков основным цветом используется красный и синий.
Для извлечения красного или синего цвета из входного изображения используется цветовое пространство HLS (Hue, Luminance and Saturation). Сначала изображение конвертируется из цветового пространства rgb в hls.
Преобразования цветового пространства:
Выделения красного и синего цвета
После удаления шумов находится контуры
В результате мы нашли контуры, в которых может находится наш дорожный знак.
Дальнейшим этапом является отфильтровать ненужные контуры. Любой дорожный знак можно описать прямоугольником, который будет иметь соответствующие соотношение сторон. Для данных типов знаков соотношение сторон, учитывая наклонность или поворот знака, лежит в диапазоне от 0.7 до 1.3. Соответственно отфильтровав контуры мы получим нужные нам контуры.
Фильтрация контуров
Идентификация контура происходит путем сравнения контура по шаблону (Template Matching). Для каждого знака был сделан шаблон, с которым сравнивается контур.
В результате сравнения мы получали коэффициент совпадения от 0 до 1. Если он был больше 0.5 то можно было говорить о том что данный контур соответствует сравниваемому знаку.
Общая схема алгоритма показана ниже.
Результаты
Выборка сформирована с изображений как содержащий один знак так и несколько на одной картинке. Тестировалось на изображении разрешения 1920х1080. Протестировано было на 50 изображений. Знак «Уступите дорогу» распознало 7 из 10 , «Проезд запрещен без остановки» — 11 из 15, «Въезд запрещен» 9 из 14, «Пешеходный переход» — 10 из 13. Точность обнаружения составляет порядка 70%.
Выводы
По результатам проведенной работы можно отметить что данный метод работает неплохо в условиях хорошей контрастности и дает точность детектирования и распознавания порядка 70%.
Однако метод имеет ряд недостатков:
Поиск дорожный с помощью вейвлет преобразований Хаар (Search traffic signs using Haar wavelet transformation).
Данный подход заключает в себя несколько этапов:
На первом этапе формируется обучающаяся выборка для обнаружения дорожного знака. Для нормального обучения необходимо около 1000 позитивной и 2000 негативной выборки изображений. К позитивной выборке относятся дорожные знаки одного типа, выбранные из реального окружения. К негативной — участки фотографий на которых отсутствует дорожный знак.
Для обучения классификаторов использовалась база изображений однотипных знаков, которые были размечены вручную и вырезаны из реальных фотографий дорожных знаков. Так для знака «Пешеходный переход» было нарезано 900 знаков, «Уступите дорогу» - 550, «Движение без остановки запрещено» - 485, «Въезд запрещен» - 79.
Позитивная выборка
Негативная выборка
Для обучения каскада использовались утилиты из пакета OpenCv opencv_createsamples и opencv_traincascade. На первом этапе все положительные выборки приводятся к одному общему размеру. Для этого используется утилита opencv_createsamples. На выходе мы получим файл, в котором будут лежать все изображения с размером h*w.
Для получения итогового каскада используется утилита opencv_traincascade. На выходе мы получим итоговый каскад, который используется в дальнейшем для обнаружения дорожного знака.
При обнаружении дорожного знака возникают моменты когда сигнатура знака встречается в местах, которые не является знаком, поскольку данный метод работает с градацией серого цвета.
Ложное срабавтывание
Для удаления ложного обнаружения знака используется пост обработка изображения. Для каждого типа знака проверяется наличие контура синего и красного цвета.
Результат
Выборка сформирована с изображений как содержащий один знак так и несколько на одной картинке. Тестировалось на изображении разрешения 1920х1080. Протестировано было на 50 изображений. Знак «Уступите дорогу» распознало 9 из 10 , «Проезд запрещен без остановки» — 13 из 15, «Въезд запрещен» 12 из 14, «Пешеходный переход» — 13 из 13. Точность обнаружения составляет более 90%.
Комментарий (0)