Заставляем компьютер видеть!

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

Мы рассмотрим несколько методов поиска полос движения.

Методы

  1. Пороговое значение цвета
  2. Маскировка области
  3. Обнаружение хитрого края
  4. Преобразование Хафа

Пороговое значение цвета

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

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

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

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

Маскировка области

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

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

Обнаружение хитрого края

Этот метод помогает находить края объектов на изображении.

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

Изображение - это математическая функция пикселей f (x, y), поэтому вы можете выполнять с ним математические функции.

Яркость каждого пикселя соответствует силе градиента в этой точке. Мы находим краевые пиксели, отслеживая пиксели, которые соответствуют самым сильным градиентам. Идентифицируя края, мы можем легче обнаруживать объекты по их форме.

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

Преобразование Хафа

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

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

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

Результаты: Самостоятельное вождение автомобиля в действии

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

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

Эти недостатки были рассмотрены в следующей статье (см. ссылку ниже)

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



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