- Введение
Жизнь современного общества невозможна без транспорта, однако транспортные средства являются причиной возникновения чрезвычайных ситуаций, в результате которых травмируются и гибнут люди. Для сокращения чрезвычайных ситуаций на дорогах используются различные системы помощи водителю. Они предотвращают одну из самых распространенных причин, приводящую к авариям, – выход автомобиля за пределы полосы движения. Преимущество описываемой разработки заключается в ее автономности и доступности: окончательную версию системы можно будет использовать в любом транспортном средстве, а не только в авто премиум-класса.
- Основное средство разработки
OpenCV — это библиотека компьютерного зрения с открытым исходным кодом, разработанная на языке программирования C/C++ [1]. Также, она существует для некоторых других языков, например, для Java. Включает в себя различные алгоритмы компьютерного зрения, распознавания изображений и многое другое, работающих в реальном режиме времени. Все желающие могут использовать библиотеку OpenCV бесплатно, как в образовательных целях, так и в коммерческих проектах.
- Оптический поток
Разработанная программа использует оптический поток (ОП), вычисляемый по входному видеоряду с целью измерения направления и скорости движения транспортного средства. Оптический поток – изображение видимого движения, представляющее собой сдвиг каждой точки между двумя изображениями. По сути, он представляет собой поле скоростей (т. к. сдвиг с точностью до масштаба эквивалентен мгновенной скорости). Суть ОП в том, что для каждой точки изображения находится такой сдвиг (dx, dy), чтобы исходной точке соответствовала точка на втором изображении I2(x + dx, y + dy). Для определения соответствия точек надо взять какую-либо характеристику точки, которая не изменяется в результате смещения. Обычно считается, что у точки сохраняется интенсивность (т. е. яркость или цвет для цветных изображений), но можно считать одинаковыми точки, у которых сохраняется величина градиента, гессиан, его величина или его определитель, лапласиан, другие характеристики [2].
- Детектор границ Канни
Края (границы) — это такие кривые на изображении, вдоль которых происходит резкое изменение яркости или других видов неоднородностей. Для обнаружения границ объектов на входных кадрах в рассматриваемой разработке используется детектор Канни [3].
Алгоритм детектора:
- Сглаживание;
- Поиск градиентов;
- Подавление не-максимумов;
- Двойная пороговая фильтрация;
- Трассировка области неоднозначности;
Первый шаг — сглаживание. Оно используется, когда во избежание появления ложных границ требуется уменьшить количество шумов на изображении. Для этого часто используется размытие фильтром Гаусса или каким-либо матричным фильтром размытия.
Следующие два шага это нахождение градиентов и подавление не-максимумов. Для начала находятся вся градиенты яркости, для этого можно использовать, например, оператор Собеля, но для того чтобы граница была четкой и понятной, она должна быть представлена тонкой линией. Поэтому границей будут являться те пиксели, в которых достигается локальный максимум градиента в направлении вектора градиента. Допустим, что почти все пиксели в градиенте имеют ориентацию вверх. Тогда значение градиента в них будет сравнено с ниже- и вышерасположенными пикселями. Те пиксели, которые имеют наибольшее значение, останутся в результирующем изображении, остальные — будут подавлены.
И последние этапы — это двойная пороговая фильтрация и трассировка области неоднозначности. На данном шаге производится еще одна фильтрация ложных границ [3]. В детекторе границ Канни используются два порога: нижний и верхний. Пиксель, значение которого выше верхней границы, принимает максимальное значение, т.е. контур считается достоверным. Если значение пикселя не достигает нижнего порога — пиксель подавляется. Если его значение попадает в диапазон между порогами, то он принимает среднее значение, а решение о том, является ли он точкой границы, будет принято во время трассировки области неоднозначности. Задача трассировки сводится к распределению пикселей, получивших среднее значение. Если такой пиксель соприкасается с достоверным контуром, то его значение приравнивается к максимальному значению, и он становится частью границы, в противном случае он подавляется.
- Ключевые точки
Как сказано выше, реализация измерителя скорости движения использует оптический поток, оценка которого является вычислительно сложной процедурой. Вычисление оптического потока по полному кадру при обработке видеоряда в реальном масштабе времени не представляется возможным. Для снижения вычислительной сложности предлагается оценивать поток лишь для относительно небольшого количества обнаруживаемых на изображениях ключевых точек.
Для выделения из изображения некоторой интерпретируемой информации необходимо привязаться к локальным особенностям изображения. Особая точка m, или точечная особенность изображения – это точка изображения, окрестность которой o(m) можно отличить от окрестности любой другой точки изображения o(n) в некоторой другой окрестности особой точки o2(m). В качестве окрестности точки изображения для большинства алгоритмов берётся прямоугольное окно, составляющее размер 5х5 пикселей [4].
- Преобразование Хафа
Реализованный способ обнаружения линий дорожной разметки основан на предположении о том, что их границы включают отрезки прямых. При этом преобразование Хафа используется для поиска этих прямых участков по результату детектирования Канни. В общем случае преобразование Хафа основывается на представлении искомого объекта в виде параметрического уравнения. Параметры этого уравнения представляют фазовое пространство, т.н. аккумуляторный массив/пространство, пространство Хафа [5].
На двоичном изображении, полученном в результате работы детектора Канни, перебираются все точки границ и делается предположение, что точка принадлежит линии искомого объекта — т.о. для каждой точки изображения рассчитывается нужное уравнение и получаются необходимые параметры, которые сохраняются в пространстве Хафа. Финальным шагом является обход пространства Хафа и выбор максимальных значений, за которые «проголосовало» больше всего пикселей контурного препарата, что и даёт нам параметры для уравнений искомых прямых участков контура разметки.
- Реализация алгоритма
Блок-схема описываемого алгоритма изображена на рис.1.
Рис. 1. Блок-схема
Демонстрационный алгоритм обрабатывает заранее произведенную видеозапись и реализует следующую последовательность шагов.
- Загружаем видео ролик и считываем из него кадр в цикле.
- Вырезаем информативный участок и работаем далее только с ним.
- Анализируем участок для обнаружения границ объектов:
- переводим изображение в градации серого;
- применяем размытие по Гауссу для подавления шумов;
- применяем фильтр Канни – детектор поиска границ;
- найденное изображение с границами дублируем для получения его цветной версии (это необходимо для демонстрации).
- Обрабатываем оптический поток по двум кадрам в градациях серого, текущему и предыдущему, с помощью функции Tracking (см. рис. 1) и находим по нему матрицу перспективного преобразования.
- Обнаруживаем прямые на изображении с найденными границами объектов с помощью преобразования Хафа, для этого мы используем функцию библиотеки OpenCV cv::HoughLinesP.
- Переходим к обработке прямых границ: используем функцию PutMarkers для их обхода, чтобы найти маркеры прямых;
- рассчитываем средние яркости для каждой прямой, чтобы определить левый и правый маркеры.
- Отыскиваем параллельные прямые по найденным маркерам с помощью функции FindParallelLines и помечаем обнаруженную в кадре разметку голубой полосой, как показано на рис. 2.
Рис. 2. Визуализация результата функции FindParallelLines
- Выводим изображение, используя функцию OPENCV cv::imshow для демонстрации результата промежуточных вычислений: правый маркер отображается красным, левый – зеленым, синие линии – прямые Хафа, которые мы не берем в расчет (рис. 3).
Рис. 3. Выведенное изображение
- Визуализация положения обнаруженной дорожной разметки осуществляется в форме элементов интерфейса, которые мы называем слайдерами. Они помогают водителю определить момент выхода края автомобиля на полосу дорожной разметки. Переходим к определению их местоположения, используя функцию FindRoadMarkings (рис.1). Перебрав все соединения маркеров, мы вычисляем левую и правую границу слайдеров.
- Обрабатываем слайдеры с помощью функции SliderStep (рис.1). В ходе обработки отсекаются неактуальные, а актуальные перемещаются вслед за найденной дорожной разметкой;
- Визуализируем слайдеры при помощи функции DrawSliders.
- Выводим сигнал о выходе за полосу с помощью функции SignalOutOfRoadLane.
- Выводим основной кадр на экран вместе с визуализацией помеченной дорожной полосы, слайдерами и сигналом оповещения, как это показано на рис.4.
Рис. 4. Скриншот работающей программы
- Фиксируем обработанный серый кадр как предыдущий и повторяем цикл до тех пор, пока все кадры не закончатся или прерываем выполнение вручную, если это необходимо.
- Заключение
Данная статья посвящена разработке и реализации системы распознавания разметки дорожного движения для контроля следования автомобиля в полосе. Описаны алгоритмы распознавания разметки и обработки оптического потока для оценки скорости и направления движения автомобиля. Работоспособность методики подтверждается демонстрационной программой для анализа видеозаписей. В дальнейшем предполагается возможность использования данного алгоритма на смартфонах в формате приложения.
- Список литературы
Сетевые ресурсы:
- OpenCV [Электронный ресурс]: база данных. – https://opencv.org/
- Хабр [Электронный ресурс]: база данных. – Вычисление оптического потока методом Лукаса-Канаде. Теория https://habr.com/ru/post/169055/
- RoboCraft [Электронный ресурс]: база данных. – OpenCV шаг за шагом. Обработка изображения — детектор границ Кенни (Canny) http://robocraft.ru/blog/computervision/484.html
- RoboCraft [Электронный ресурс]: база данных. – OpenCV шаг за шагом. Преобразование Хафа http://robocraft.ru/blog/computervision/502.html
- Хабр [Электронный ресурс]: база данных. – Детекторы углов https://habr.com/ru/post/244541/