Рубрики
Без рубрики

Усовершенствованное обнаружение полосы движения для самоуправляемых автомобилей

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

Автор оригинала: David Clark.

Проект № 4 в самодвижущемся автомобиле Udacity Nanodegree

Проект № 4 в программе Udacity self-driving car program включает в себя использование методов компьютерного зрения и машинного обучения для определения дорожных полос и особенностей полосы движения с помощью приборной панели автомобиля.

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

Это часть серии. Вы также можете прочитать о моих | первых , | вторых и | третьих | проектах , если вы их пропустили!

Обзор: Трубопровод

Цель этого проекта-разработать трубопровод. Учитывая изображение дороги, трубопровод должен нарисовать на изображении признаки, которые он идентифицирует о полосе и линиях дороги. Разработанный мной конвейер обнаружения полос движения состоит из следующих этапов:

  1. Предварительный шаг: Калибровка камеры
  2. Не искажайте изображение
  3. Порог изображения с помощью градиентов и цветов
  4. Примените перспективное преобразование (деформацию) для просмотра изображения сверху вниз
  5. Определите линии полосы движения на искаженном изображении
  6. Нарисуйте объекты обратно на исходное изображение

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

Давайте рассмотрим каждый из этих шагов один за другим.

Откалибруйте камеру

“Калибровка камеры” на самом деле означает учет искажений в изображении, вносимых объективом камеры. Это делается с помощью нескольких изображений шахматных фигур, которые должны иметь прямые линии. Изучение того, как искажаются шахматные фигуры (а не прямые), позволяет нам точно определить, как объектив камеры искажает изображения, а это значит, что мы можем их не искажать.

Искаженное изображение шахматного рисунка на стене. Эти линии должны быть прямыми….

Не искажайте изображение

Как только камера “откалибрована”, нам просто нужно применить полученные знания к неискаженным изображениям. Это важно, потому что это восстановит прямолинейность линий, помогая идентифицировать линии полос позже в трубопроводе. Разница между искаженными и неискаженными изображениями очевидна. Изогнутые линии теперь прямые.

В то время как самый верхний и левый все еще не кажутся идеальными, теперь все намного лучше!

Порог изображения

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

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

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

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

Пороговое изображение (слева) и то же самое изображение со сдвигом перспективы сверху вниз (справа).

Определите линии полосы движения

С точки зрения сверху вниз мы можем легко определить линии полосы движения. Ниже вы можете увидеть линии полос движения, идентифицированные с помощью скользящего окна поиска. Зеленые прямоугольники представляют собой окна, в которых мы окрашивали линии переулков. Когда окна ищут вверх, они возвращаются к среднему положению пикселя, поэтому они “следуют” за линиями. Цветные линии будут втянуты обратно в исходное изображение.

Поиск по скользящему окну идентифицирует каждую из линий полосы движения.

Рисование на исходном изображении

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

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

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

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

Я применил свой конвейер к трем различным видео: обычному видео проекта, видео вызова и видео вызова harder .

Обычное проектное видео.

Видео проекта Challenge.

Более сложное видео вызова.