Распознавание дорожной разметки

Цель работы:

Приобрести первичные навыки работы в SimInTech для изучения возможности работы библиотеки «Видеообработка».

Задачи работы:

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

Область применения:

Автоматическое управление транспортным средством по средствам детектирования разметки с использованием входного сигнала в виде видеопотока.

Выполнение лабораторной работы.

Одна из основных проблем разработки автоматической системы управления транспортным средством заключается в распознавании дорожной разметки и позиционировании транспортного средства на дороге. В данной лабораторной работе представлен пример реализации детектирования дорожной разметки в заранее записанном видеопотоке. Данный видеопоток можно найти в папке с демонстрационными примерами SimInTech (по умолчанию «C:\SimInTech\Demo\Видеообработка\Распознавание дорожных знаков\data»).

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

Для формирования нового проекта необходимо нажать на кнопку «Новый проект» и выбрать пункт «Схема модели общего вида» - откроется новое окно проекта.

Для чтения файла с видеопотока, необходимо добавить в окно проекта блок «ВО - Импорт кадров видеофайлов». В свойствах этого блока задать свойства согласно рисунку (Рисунок 1).

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

Рисунок: Свойства блока «ВО - Импорт кадров видеофайлов».



В данном примере свойство «Путь к видеофайлу» задаётся равным «Исходное видео.mp4». Обратите внимание, что видеофайл расположен в папке «data», которая находится в одном каталоге с проектом. Если видеофайл находится в одной папке с проектом, то достаточно указать имя файла и его расширение, иначе необходимо указать полный или относительный путь к видеофайлу.

Для отображения, используемого в проекте видеопотока, добавить в окно проекта блок «ВО - Просмотр кадра». Соединить блоки линией связи и задать подпись блоку согласно рисунку (Рисунок 2).

Рисунок: Блоки «ВО - Импорт кадров видеофайлов» и «ВО - Просмотр кадра».



Для настройки окна вывода изображения, в свойствах блока с подписью «Исходный кадр» задать свойства согласно рисунку (Рисунок 3).

В данном блоке в свойстве «Имя окна проекта» задаётся подпись к окну с видеопотоком, а в свойстве «Задержка просмотра» задаётся время задержки воспроизведения изображения в миллисекундах (скорость воспроизведения видеопотока в окне). Таким образом при увеличении данного значения, задержка между последующими кадрами видеопотока пропорционально увеличится, а скорость воспроизведения всего видеопотока обратно пропорционально уменьшится.

Рисунок: Свойства блока «ВО - Просмотр кадра».



При запуске проекта на расчёт все блоки «ВО - Просмотр кадра» открывают окна вывода изображения (Рисунок 4).

Рисунок: Изображение входного видеопотока.



Поскольку дорожная разметка находится в нижней центральной части видеопотока, стоит выделить только необходимую исследуемую область. Это позволит значительно сэкономить вычислительные ресурсы. Для удаления неинформативных областей из исходного кадра, добавить на схему блок «ВО - Выделение области» и соединить линией связи согласно рисунку (Рисунок 5).

Рисунок: Получение входного видеопотока и выделение интересующей области.



В блоке «ВО - Выделение области» задать свойства согласно рисунку (Рисунок 6).

Рисунок: Свойства блока «ВО - Выделение области».



В данном блоке, исходя из того, что нулевой координатой в изображении является верхний левый угол, задаются значения всех координат выделяемой области. В свойствах «Координата точки X» и «Координата точки Y» задаётся координата верхнего левого пикселя выделяемой области, а свойства «Ширина области» и «Высота области» задают размер выделяемой области относительно указанной точки. Таким образом, заданные свойства позволяют выделить из видеопотока область, показанную на рисунке (Рисунок 7). Поиск области, удовлетворяющей условиям, производится путём подбора требуемых значений. Для этого нужно задать значения свойств, приблизительно подходящих к координатам требуемой области и запустить проект на расчёт. Если выделенная область не соответствуете условиям выделяемой области, необходимо уточнить значения свойств и повторить данную процедуру.

Рисунок: Область интереса.



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

Рисунок: Изображение области интереса.



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

Для формирования цветового фильтра необходимо поставить на схему блоки «ВО - Цветовое преобразование», «ВО - Разделение каналов цвета» и «ВО - Полосовой фильтр» и соединить их линиями связи согласно рисунку (Рисунок 9).

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

Рисунок: Структурная схема модели с цветовым фильтром.



Для преобразования изображения в формат HVS, в блоке с подписью «HSV» задать свойства согласно рисунку (Рисунок 10).

В данном блоке, в свойстве «Тип преобразования» задаётся формат преобразования входного изображения к требуемому формату выходного изображения. То есть мы преобразовываем изображение из формата RGB в HSV.

Рисунок: Свойства блока с подписью «HSV».



Блок «ВО - Разделение каналов цвета» производит выделение значений тона изображения.

Для ограничения границ искомых тонов, в блоке «ВО - Полосовой фильтр» задать свойства согласно рисунку (Рисунок 11).

В свойстве «Нижняя граница» задаётся минимальное пропускаемое значение тона, а в свойстве «Верхняя граница» задаётся максимальное пропускаемое значение тона. Поскольку тон разметки достаточно яркий, относительно самой дороги, можно предположить, что маска объекта сформируется при пропускании светлых пикселей. Таким образом нижняя граница яркости задаётся равной «175», а верхняя «255». После детектирования ярких пикселей, на выходе они все примут значение оттенка равное «255». Данные значения свойств подбираются эмпирическим путём с учётом особенностей изображения.

Рисунок: Свойства блока «ВО - Полосовой фильтр».



Таким образом на выходе фильтра выводится бинарное изображение светлых участков в видеокадрах.

Для просмотра маски, добавить на схему блок «ВО - Просмотр кадра», задать подпись блока «Маска (цвет)» и соединить его линей связи с выходом цветового фильтра. Задать свойства блока согласно рисунку (Рисунок 12).

Рисунок: Свойства блока «ВО - Просмотр кадра».



При запуске проекта на расчёт, откроется окно с результатом работы цветового фильтра (Рисунок 13).

Рисунок: Изображение после фильтрации цветовым фильтром.



Для формирования фильтра производных яркости необходимо поставить на схему блоки «ВО - Цветовое преобразование», «ВО - Оператор Собеля» и «ВО - Пороговое преобразование» и соединить их линиями связи согласно рисунку (Рисунок 14).

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

Рисунок: Структурная схема модели с фильтром производных яркости.



Для преобразования изображения в вид оттенков серого, в блоке с подписью «GRAY» задать свойства согласно рисунку (Рисунок 15).

Рисунок: Свойства блока с подписью «GRAY».



Для нахождения вертикальных контуров путём расчёта производных значений яркости вдоль оси X, в блоке «ВО - Оператор Собеля» задать свойства согласно рисунку (Рисунок 16).

В данном блоке, в свойствах «Порядок производной по X» и «Порядок производной по Y» задаются значения порядка производной по осям, в свойстве «Размер ядра Собеля» задаётся размер матрицы расчёта производных, а в свойствах «Масштаб» и «Смещение» задаются дополнительные значения для линейной трансформации всех значений каналов цветов пикселей по формуле:

dst(x,y,c) = scale*src(x,y,c)+delta

где:

x, y,c – позиция пикселя по горизонтальной и вертикальной оси со значением цвета;

dst(x,y,c) – изображение для сохранения результата;

src(x,y,c) – исходное изображение;

scale – свойство «Масштаб»;

delta – свойство «Смещение».

Линии разметки преимущественно располагаются вдоль вертикальной оси Y. Таким образом, производная первого порядка, рассчитанная только по горизонтальной оси X (перпендикулярно оси Y), позволит выделить вертикальные линии используя матрицу свёртки [5x5].

Рисунок: Свойства блока «ВО - Оператор Собеля».



Для отсеивания малых значений и представления изображения в бинарном виде, в блоке «ВО - Пороговое преобразование» задать свойства согласно рисунку (Рисунок 17).

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

Рисунок: Свойства блока «ВО - Пороговое преобразование».



Таким образом на выход фильтра выводится бинарное изображение маски контуров объектов в видеопотоке.

Для просмотра маски изображения, добавить на схему блок «ВО - Просмотр кадра», задать подпись блока «Маска (контур)» и соединить его линей связи с выходом цветового фильтра. Задать свойства блока «ВО - Просмотр кадра» согласно рисунку (Рисунок 18).

Рисунок: Свойства блока «ВО - Просмотр кадра».



При запуске проекта на расчёт, откроется окно с результатом работы фильтра производных яркости (Рисунок 19).

Рисунок: Изображение после фильтрации фильтром производных яркости.



Для увеличения точности распознавания объекта необходимо сравнивать несколько результатов фильтрации по разным параметрам. Итоговая маска формируется путем сложения результатов фильтрации (масок). Для этого необходимо поставить на схему блок «ВО - Побитовое И». Добавить в окно проекта блок «ВО - Просмотр кадра». Соединить линии связи и задать подписи блокам согласно рисунку (Рисунок 20).

Рисунок: Структурная схема модели с объединением выходных значений фильтров.



В блоке «ВО - Просмотр кадра» задать свойства согласно рисунку (Рисунок 21).

Рисунок: Свойства блока «ВО - Просмотр кадра».



При запуске проекта на расчёт, суммарная маска двух фильтров примет вид согласно рисунку (Рисунок 22).

Рисунок: Маска дорожной разметки.



Для наглядности отображении распознанных линий в видеопотоке и выводе значений расстояния от центра до каждой из линий необходимо разместить на схеме блок «ВО - Детектирование разметки». Поместить в окно проекта блоки «ВО - Просмотр кадра» и «Временной график».

Для настройки результирующего изображения, в блоке «ВО - Просмотр кадра» задать свойства согласно рисунку (Рисунок 23).

Рисунок: Свойства блока «ВО - Просмотр кадра».



Для добавления входных портов, в блоке «Временной график» задать свойства согласно рисунку (Рисунок 24).

Рисунок: Свойства блока «Временной график».



Соединить линии связи согласно рисунку (Рисунок 25).

Рисунок: Структурная схема модели алгоритма распознавания дорожной разметки в видеопотоке.



В блоке «ВО - Детектирование разметки» задать свойства согласно рисунку (Рисунок 26).

Рисунок: Свойства блока «ВО - Детектирование разметки».



В данном блоке, свойство «Трапецеидальность области видимости» с именем «roi» позволяет компенсировать искажения изображения, возникающие при разных способах установки камеры. Свойство «Количество гистограмм» с именем «numHorHist» задаёт количество равных горизонтальных участков, на которые по вертикали разделяют заданную область. Количество задаваемых участков зависит от состояния детектируемой линии, ее сплошности и криволинейности. Для каждого участка строится гистограмма яркости, максимальные значения для левой и правой части гистограммы используются как начальные точки для поиска линий.

Рисунок: Схематическое изображение обработки кадра.



Свойство «Уровень для расчёта расстояния до линии разметки» с именем «wheel» позволяет рассчитать расстояние от центра нижней грани изображения до детектируемой линии.

Данные значения свойств подбираются эмпирическим путём с учётом особенностей изображения.

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

Рисунок: Изображение видеопотока с наложенной маской разметки.



На выходе считывается расстояния до найденной правой и левой линии и количество «белых» пикселей вдоль правой и левой найденных линий, соответствующих входной маске (Рисунок 29).

Рисунок: График расстояния до полос разметки.



Выводы.

В ходе данной лабораторной работы были приобретены навыки работы с библиотекой «Видеообработка» для распознавания образа и определены расстояния от центра, до линий дорожной разметки из видеопотока, записанного с камеры движущегося по дороге автомобиля.