Распознавание дорожного знака с видеопотока по шаблону

Цель работы:

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

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

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

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

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

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

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

Определение контура шаблонного изображения

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

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

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

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

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

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

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

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

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

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

Рисунок 4. Изображение шаблона дорожного знака.

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

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

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

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

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

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

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

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

Блок «ВО - Детектор контуров» находит контуры в двоичном изображении. Полученные контуры закодированы с помощью цепного кода Фримена.

Цепные коды применяются для представления границы в виде последовательности отрезков прямых линий определённой длины и направления. В основе этого представления лежит четырёх- или восьмисвязная решётка. Длина каждого отрезка определяется разрешением решётки, а направления задаются выбранным кодом.

Рисунок 8. Схематическое изображение принципа формирования цепного кода Фримана.

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

В данном блоке, в свойстве «Индекс контура» задаётся индекс искомого контура. Индексы контуров присваиваются для каждого объекта и являются порядковым номером каждого найденного контура. Индексы присваиваются с нулевого значения. Таким образом, первый контур примет индекс «0», второй «1», третий «2» и так далее. Для выбора всех найденных контуров необходимо использовать индекс «-1». Поскольку необходимо найти только один единственный контур, то его индекс будет равен «0». В свойстве «Ширина линий отрисованных контуров» задаётся толщина линии контура, отображаемая на выходном изображении, а в свойствах «Красный», «Зелёный» и «Синий» задаются восьмибитные значения составляющих итогового цвета контура на изображении. Таким образом, взаимодействие всех заданных цветов в формате RGB, принимает цвет контура объекта зелёным.

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

Таким образом на выходе алгоритма будет получено шаблонное изображение в виде оттенков серого с зелёным распознанным контуром.

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

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

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

Рисунок 11. Изображение шаблона дорожного знака с выделенным контуром.

Таким образом был выделен контур шаблонного изображения.

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

Распознавание контуров в видеопотоке.

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

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

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

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

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

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

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

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

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

Определение образов производится с помощью сравнения всех найденных образов на изображении с шаблонным изображением. Таким образом, перед сравнением с шаблонным изображением необходимо определить все контуры в видеопотоке. Для определения контуров в видеопотоке необходимо поставить на схему блоки «ВО - Цветовое преобразование», «ВО - Детектор границ Кэнни», «ВО - Детектор контуров» и «ВО - Фильтр контуров по площади» и соединить их линиями связи согласно рисунку (Рисунок 16).

Определение образов производится с помощью преобразования видеопотока в формат оттенков серого, определения границ объектов и контуров объектов, после чего контура фильтруются по площади.

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

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

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

Для выделения границ в изображении, в блоке «ВО - Детектор границ Кэнни» задать свойства согласно рисунку (Рисунок 18).

Рисунок 18. Свойства блока «ВО - Детектор границ Кэнни».

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

L2norm=√((dI/dx) ^2+(dI/dy) ^2)

вместо

L1 (L2gradient=false)

где

L1 norm =|dI/dx|+|dI/dy|

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

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

Рисунок 19. Свойства блока «ВО - Фильтр контуров по площади».

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

Рисунок 20. Структурная схема с выводом входного видеопотока со всеми найденными контурами.

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

В данном блоке, в свойстве «Индекс контура» задаётся индекс всех найденных контуров равный «-1».

Рисунок 21. Свойства блока «ВО – Выбор контура».

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

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

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

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

Таким образом были найдены все возможные контура объектов.

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

Распознавание знака в видеопотоке.

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

Рисунок 24. Структурная схема с поиском контура в видеопотоке по шаблонному контуру.

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

Рисунок 25. Свойства блока «ВО - Поиск по шаблону».

На входы блока поступают контур шаблона и фрейм, на котором он был найден, а также массив контуров и соответствующий кадр.

Поскольку изображение знака находится внутри контура, включается свойство «Использовать минимальные описанные контура» для преобразования контуров в минимальные описывающие выпуклые многоугольники. Алгоритм осуществляет нормирование всех контуров по заданным свойствам «Нормализованный размер контура по оси X» и «Нормализованный размер контура по оси Y» (приведение к заданному размеру). Далее выполняется расчет коэффициента корреляции между нормированными по размеру изображениями, находящимися внутри соответствующих контуров, и шаблоном. В свойстве «Порог коэффициента кореляции» задаётся максимальный порог коэффициента корреляции, при превышении которого, объект считается найденным. При включении свойства «Включить отрисовку найденных контуров» выполняется его отрисовка на выходном фрейме, если задан соответствующий флаг.

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

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

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

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

На выходе считывается бинарный сигнал детектирования искомого дорожного знака (Рисунок 28).

Рисунок 28. График сигнала детектирования знака.

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

Вывод.

В ходе данной лабораторной работы были приобретены навыки работы с библиотекой «Видеообработка» для распознавания объектов в видеопотоке.