Поиск по сайту Поиск

Простой алгоритм распознавания дорожной разметки

Контроль полосы движения — одна из наиболее приоритетных задач систем помощи водителю и автономных автомобилей. Они следят за движением машины по выбранному маршруту и предупреждают о возможном съезде с заданного пути. В этой статье мы представим простой метод распознавания дорожной разметки с помощью Python и OpenCV.

Конвейер

Чтобы распознать полосы разметки необходимо:

  1. Преобразовать исходное изображение в  grayscale.
  2. Затемнить полученное изображение (это помогает уменьшить контраст от обесцвеченных участков дороги).
  3. Преобразовать исходное изображение в  цветовое пространство HLS (Hue, Lightness, Saturation — тон, свет, насыщенность).
  4. Изолировать жёлтый цвет из HLS для получения маски (для жёлтой разметки).
  5. Изолировать  белый цвет из HLS (для белой разметки).
  6. Выполнить побитовое «ИЛИ» жёлтой и белой масок для получения общей маски.
  7. Выполнить побитовое «И» маски и затемнённого изображения.
  8. Применить Гауссово размытие.
  9. Применить детектор границ Canny (пороги устанавливаются методом проб и ошибок).
  10. Определить область интереса (помогает отсеять нежелательные края, обнаруженные детектором Canny).
  11. Получить линии Хафа.
  12. Объединить и экстраполировать линии Хафа; отобразить их на исходном изображении.

Исходные тестовые изображения

Преобразование в оттенки серого

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

Затемнение

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

Преобразование в цветовое пространство HLS

Исходные RGB-изображения переводятся в пространство HLS. По сравнению с HSV (Hue, Saturation, Value — тон, насыщенность, значение), HLS помогает получить лучший цветовой контраст разметки и дороги. Впоследствии это поможет выделить нужные цвета для определения полос движения.

RGB против HSV и HLS

Выделение цвета

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

Для жёлтой маски:

— Использовались значения оттенка между 10 и 40.

— Установлена более высокая насыщенность (100–255), чтобы отфильтровать жёлтый цвет земли и холмов.

Для белой маски:

— Установлено более высокое значение яркости (200–255).

После этого мы выполняем операцию побитового «ИЛИ» обеих масок, чтобы скомбинировать их.

На снимках ниже показан результат побитового «И» между комбинированной маской и затемнённым изображением.

Гауссово размытие

Размытие (или сглаживание) по Гауссу — это этап предварительной обработки для уменьшения шума. Мы удаляем лишние края на изображении и оставляем только наиболее заметные.

Для размытия с помощью GaussianBlur из OpenCV необходимо указать размер ядра (нечётное значение). Испробовав несколько вариантов, мы выбрали 7.

Применение детектора границ Canny

Теперь к размытым снимкам применяется детектор Canny. Canny Edge Detection — алгоритм, который обнаруживает края на основе изменения градиента. Хотя первым его шагом по умолчанию является сглаживание изображения с размером ядра 5, мы всё равно используем явное размытие по Гауссу на предыдущем этапе. Другие шаги детектора включают в себя:

— нахождение градиента интенсивности изображения;

— подавление максимумов;

— пороговый гистерезис.

Выделение области интереса

Даже после детектора Canny на снимках остаётся много лишних линий и краёв, не являющихся разметкой. Область интереса — это многоугольник, охватывающий наиболее полезную для нас часть изображения.

Обратите внимание, что координата [0, 0] находится в левом верхнем углу, номера строк увеличиваются сверху вниз, а столбцов — слева направо.

Предполагается, что камера остаётся неподвижной, а полосы — ровными, поэтому мы можем «угадать» интересующую область.

Обнаружение линий преобразования Хафа

Преобразование Хафа — способ извлечения линии из изображения. Это можно сделать, представив линии в виде параметризованных точек, а точки — в виде линий/синусоид (в зависимости от декартовой/полярной систем координат). Если несколько линий или синусоид пересекаются друг с другом в одной точке, мы можем сделать вывод, что они относятся к одной линии на изображении.

После обнаружения линий Хафа в области интереса мы отрисовываем их на оригинальных снимках.

Экстраполяция линий Хафа

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

левая полоса: если мы увеличим координаты столбцов, то координаты строк уменьшатся (отрицательный градиент)

правая полоса: если увеличить координаты столбцов, координаты строк тоже увеличатся (положительный градиент)

— будем игнорировать вертикальные линии.

После определения левой и правой полос мы экстраполируем их:

  1. Если для одной полосы обнаружено несколько параллельных линий, мы усредняем строки.
  2. Если полоса состоит из частично обнаруженных линий, мы объединяем их.

Применение конвейера к видео

Теперь давайте протестируем наш алгоритм на записи с видеорегистратора.

Он неплохо работает для прямых полос разметки:

Но не очень хорошо справляется с искривлениями:

Недостатки

— Обнаружение прямых линий Хафа не очень хорошо работает для изогнутой дороги/полосы.

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

— На дорогах без разметки алгоритм не будет работать.

Будущие улучшения

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

— Даже имея в наличии информацию из предыдущих кадров, усреднять её — не всегда хорошая стратегия. Лучше использовать средневзвешенные или приоритетные значения.

Исходный код

Исходный код доступен на GitHub. В проекте доступны два каталога: CarND-LaneLines-Р1 и CarND-Advanced-Lane-Lines. В первом находится проект конвейера, описанного в этой статье (скрипт P1.ipynb). Второй каталог предлагает улучшенный вариант алгоритма, в котором используется калибровка камеры и обнаружение кривых линий разметки. Вы можете протестировать один из них (или оба), используя свои варианты настройки параметров, и предложить улучшения.

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

С оригинальной статьёй можно ознакомиться на портале towardsdatascience.com.


Какие показатели нужно отслеживать новому бизнесу? 10 главных метрик

Полный список финансовых показателей, которые нужно учитывать при запуске и развитии бизнеса. С формулами, комментариями и понятными примерами расчета. (далее…)
Read More

Драма Microsoft и Apple: от вражды до сотрудничества

Техногиганты всё время своего существования судились, обменивались колкостями и пытались обогнать друг друга по уровню новаторства в разработках. Наши коллеги...
Read More

Как компании меняли свой бренд из-за испорченной репутации: три кейса

В бизнесе нет страховки от ошибок — любой промах отражается на репутации. И иногда исправить ситуацию может только ребрендинг и...
Read More

Запускаем email-рассылку: как не попасть в спам при отправке писем

В статье рассказываем, почему рассылки попадают в спам, и делимся советами, как сделать так, чтобы письма всегда доставлялись до адресатов....
Read More

Ключ к успешному продвижению: что такое SMM-стратегия и как ее составить

Разберем, что такое SMM-стратегия, зачем она нужна и как эффективно использовать социальные сети для решения бизнес-задач. (далее…)
Read More

Новогодний маркетинг: лучшие приемы праздничной рекламы

Для бизнеса Новый год и Рождество — время всплеска продаж и увеличения прибыли. А способствуют этому всем знакомые персонажи: от...
Read More

Россияне предпочитают .ru вместо .com, а Дональд Трамп проиграл доменный спор за mar-a-lago.com

Рассказываем самые интересные новости доменного мира. (далее…)
Read More

Прокрастинация: что такое, виды и как бороться

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

Что нужно покупателям в 2024: 5 трендов электронной коммерции

Ежегодно рынок e-commerce в России растет на треть, а в 2024 году, по прогнозам экспертов, его оборот составит более 7,2...
Read More

Гайд: стильный интернет-магазин на WordPress с помощью двух инструментов

Онлайн-торговля растет на 40-50% в год, поэтому открыть свой интернет-магазин никогда не поздно. Для старта не понадобятся знания HTML и...
Read More