Методы поиска дорожного знака. Эксперимент №1

4.9 (1)

Решая одну задачу мы столкнулись с необходимостью детектировать и распознавать дорожные знаки. Для решения этой задачи была взята библиотека OpenCV, которая справляется с этой задачей на ура, и были проведены эксперименты по выбору алгоритма для этой задачи с результатами которых сейчас поделимся. Каждый алгоритм имеет свои плюсы и минусы с которыми столкнулись при решении задачи.
 

Расмотрим первый алгоритм:

Первые рассуждения которые возникли это фильтрация цвета на изображении на красный и синий. Затем на полученном изображении произвести удаления шумов, мелких контуров и у нас остается изображения в котором необходимо производить поиск контуров для нахождения знака. Но не тут то было.
Для первого этапа нам необходимо перевести из цветового пространства RGB в HSV, так эта цветовая модель нам дает больше возможностей для манипуляций.
Как можно заметить в цветовод диапазоне существует 2 участка в котором находится красный цвет. Это 0 < Hue < ~7-10 и второй устаток  ~ 165-168 < Hue < 180.
Для синего цвета немного проще, он находится в одном диапазоне от 100 до 130 (~100 < Hue < ~130 ).

диапазон цветов для выделения


Возьмем тестовое изображение для примера

 

тестовое изображения для поиска

После преобразовании изображения наша картинка выглядит следующим образом

rgb to hsv

Для выделения цвета мы воспользовались следующими параметрами:

	
	cv::Scalar min_blue = cv::Scalar(100,100,40);
	cv::Scalar max_blue = cv::Scalar(130,255,255);
	

После того как мы выделим наш синий цвет, мы получим следующее изображение

Из картинки выше видно то, что помимо дорожногознака у нас выделись другие участки которые не принадлежат знакам.
Прорисовав контуры увидим следующую картинку.

найдены контуры для поиска дорожного знака

Как можем заметить достаточно много мелких контуров. Отсеяв мелкие контуры и контуры которые не соответствую, пропорции мы получили следующую картинку:

Описываем прямоугольник и мы нашли наш дорожный знак или же что-то что похоже по форме и цвету на дорожный знак.

Теперь стоит задача узнать какой именно это знак. Для этой задачи нам подходим метод matchTemplate. Более подробно с данным методом можно ознакомится здесь
Подготовив шаблоны для каждого знака мы узнали что данный знак, который описывает данный прямоугольник есть «Пешеходный переход»
Однако не все так просто. Если мы проанализируем дорожные знаки которые стоят на дороге то мы увидим что не все они в «идеальном состоянии» некоторые согнутые, наклонены, или же деформировался как то еще, и данный подход он, не как не справляется с этой задачей. 
Для данного метода очень важным моментом является поиск контура, так как неправильно найденный контур тянет за собой последующие ошибки.  На картинке ниже показан пример когда контур был определен не верно хотя знак в этом контуре присутсвует.

 

Важным аспектом данного метода является фон на котором был сделан снимок для распознавание. Если же, к примеру знак «Пешеходный переход» стоит на фоне синего неба, и   на самом знаке немного выгорел цвет, то данный метод никак не справится с данной задачей. 

Плюсы данного метода:

  •  очень высокая скорость работы;
  •  не требует обучающей выборки  для определения знака;

Минусы:
Данный метод работает при относительно идеальных условиях распознания. Если знак как то деформировался то метод не работает. Также на данный метод влияет погодные условия.   

В следущей части мы расмотрим эксперимент по пострения обучающего алгоритма для нахождения дорожного знака.

Комментарий (0)

Войдите с помощью соцсетей:
или
введите свои данные: