Обнаружение полос с помощью компьютерного зрения

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

Реализация

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



Начнем с определения нашей проблемы.

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

Для этого давайте предоставим путь к изображению и загрузим его с помощью OpenCV, а затем вызовем с ним конвейер find_street_lanes.

test_image = cv2.imread(INPUT_FOLDER + TEST_IMAGE)
street_lanes = find_street_lanes(test_image)

А так выглядит наш конвейер find_street_lanes

Оттенки серого

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

grayscale = (r + g + b) / 3

Размытие

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

Размытие по Гауссу вычисляет значение каждого пикселя как средневзвешенное значение окружающих пикселей.

Canny (обнаружение краев)

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

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

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

Область интересов

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

Это определенная маска, где белый цвет показывает область интереса.

и это хитроумное изображение с замаскированной областью интереса.

Hough Lines

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

  1. Во-первых, давайте обнаружим все линии. Мы определяем линию как [x1, y1, x2, y2], где (x1, y1) - ее начало, а (x2, y2) - ее конец.
  2. Локализовав наши линии, мы можем рассчитать их наклон, чтобы определить, правые они или левые.

3. Затем нам нужно усреднить линии и получить единственную левую и правую линии.

4. В конце концов, мы можем нарисовать наши финальные линии.

Наложение изображения

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

Обнаружение в реальном времени

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

Что дальше?

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

Не забудьте заглянуть на страницу проекта на GitHub.



Вопросов? Комментарии? Не стесняйтесь оставлять свои отзывы в разделе комментариев или связываться со мной напрямую по адресу https://gsurma.github.io.

И не забудьте 👏 если вам понравилась эта статья 🙂.