Как самоуправляемые автомобили воспринимают работу в неблагоприятных условиях!

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

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

Методы

  1. Цветовые Пространства
  2. Оператор Собеля
  3. Радиус кривизны

Цветовые Пространства

Цветовое пространство RGB хорошо подходит для изображений с белыми полосами. У него есть ограничения с полосами других цветов. Давайте исследуем другие цветовые пространства, такие как HSV (оттенок, насыщенность, значение) и HLS (оттенок, яркость, насыщенность) и т. Д.

Оттенок представляет собой цвет, не зависящий от каких-либо изменений яркости. Lightness и Value - это разные способы измерения светлоты или темноты цвета. Насыщенность - мера красочности.

Изображение с желтыми полосами было разделено на RGB и HLS, как показано ниже.

Только каналы R, G и S показывают высокую интенсивность пикселей, соответствующую желтым полосам. Синий канал имеет нулевую интенсивность желтых пикселей.

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

Тем не менее, даже S-канал был неспособен обнаруживать желтые полосы под затененной областью.

Оператор Собеля

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

Применение оператора Собеля к изображению - это способ получения производной изображения по оси x или y.

Выбрав градиент в направлении x (оператор Sobel x) и отрегулировав силу этого градиента, мы теперь можем найти те части полосы движения, которые не могут быть обнаружены S-каналом (в предыдущем разделе), как показано ниже.

Теперь мы можем комбинировать пиксели, идентифицированные каждым из вышеперечисленных методов (Sobel x и S-Channel), чтобы более точно находить желтые полосы движения при различных условиях освещения, как показано ниже.

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

Радиус кривизны

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

Построение гистограммы и нахождение пиков в левой и правой половинах приведенного выше изображения дает начальные положения левой и правой полос, как показано ниже.

Раздвижные окна

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

Радиус кривизны и смещения от центра полосы движения

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

Полученные результаты

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

Применение вышеупомянутых методов привело к тому, что автомобиль точно распознал полосы разного цвета (желтый и белый), при различных условиях освещения (яркий свет и затемненные области) и на крутых поворотах , как показано на видео ниже.

Заключительное видео - результат моего «Продвинутого проекта поиска полос» по программе нанодипломной степени по самоуправляемым автомобилям Udacity.

Эта статья является расширенной версией моей предыдущей статьи, указанной ниже. Прочтите, чтобы получить подробную информацию об обнаружении Canny Edge и преобразовании Хафа.



Первоначально опубликовано на https://github.com.