Поиск полосы движения, пожалуй, важная задача для любого беспилотного автомобиля. Следовательно, неудивительно, что первый проект в области наностепеней вращался именно вокруг этого. Цель состояла в том, чтобы написать некоторый код для реализации серии шагов (конвейера) с использованием инструментов, о которых мы узнали во время урока, и использовать их для определения и рисования линий дорожек на нескольких тестовых изображениях и некоторых видео. Несмотря на то, что у меня уже был опыт работы с openCV в различных приложениях, этот проект позволил мне узнать что-то новое, особенно в отношении преобразования Хафа и того, как сопоставить линии с полиномами. Ниже я поделюсь некоторыми основными концепциями моего решения.

  1. Определение рентабельности инвестиций

Первым шагом является определение области интереса (ROI), в которой мы будем искать потенциальные маркировки линий. Я выбрал область интереса в форме пирамиды, которую я параметризовал по высоте и ширине изображения, чтобы сделать ее адаптируемой к различным изображениям и видео, где камера будет размещена в другом месте. ROI в форме трапеции определяется четырьмя вершинами (v1,v2,v3,v4), которые рассчитываются на основе процентной доли высоты и ширины изображения, которые нам нужны, определяемые переменными (V_top, V_side_top, V_side_bottom, V_bottom).

2. Изолирование разметки полосы движения

Следующим шагом является выделение маркировки дорожек, чтобы мы могли найти линии с помощью преобразования Хафа на шаге 3. Однако очевидным выбором является использование обнаружения краев для идентификации маркировки в тех случаях, когда присутствуют дополнительные края из-за теней или отражений. на дороге этот подход даст много ложных линий. Следовательно, чтобы преодолеть этот подход, я объединяю результаты обнаружения краев с обработкой цвета. Обработка цвета выполняется двумя разными способами. Сначала любые желтые дорожки обнаруживаются в пространстве HSV с помощью функции inRange в opencv, а затем любые белые белые дорожки обнаруживаются в цветовом пространстве RGB. Я обнаружил, что этот двойной подход был более надежным (меньше выбросов), чем попытка обнаружить желтые и белые линии в одном и том же цветовом пространстве.

3. Поиск линии

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

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

4. Экстраполяция линий

Возможно, это можно считать легкой частью после того, как мы четко определили разметку полосы движения и удалили все выбросы. Следующим шагом является расширение линий, чтобы покрыть полосы движения. Этого можно достичь с помощью функции OpenCV fitline, которая, учитывая точки линии, может предоставить нам параметры линии, после чего мы можем нарисовать всю линию до желаемой длины. Полученное изображение выглядит примерно так, как показано ниже.

5. Настоящее веселье

Как бы ни было полезно обнаруживать полосы на изображениях, настоящее удовольствие — это когда мы делаем это на реальном видео! Это может «сломать» алгоритм в том смысле, что при использовании одного изображения мы можем перенастроить параметры для этого конкретного изображения. Мне пришлось поиграть с параметрами, но, в конце концов, я думаю, что мой конвейер обработки хорошо работает на самом «сложном» из трех видео, которые мы должны были протестировать для задания. Я также решил проверить это на совсем другом видео, снятом с инфракрасной камерой из полицейской машины. К моему удивлению, он работал хорошо без необходимости настраивать параметры! Конечно, общая структура может быть дополнительно улучшена, так как очень извилистые полосы могут вызвать проблемы, а также нет стратегии, когда автомобиль меняет полосу движения, но, как вы можете видеть во втором видео, тот факт, что предыдущие линии полосы сохраняются, позволяет более плавный переход между полосами. Я с нетерпением жду следующего проекта, так как я ждал, чтобы запачкать руки некоторыми приложениями для глубокого обучения!