Распознавание и подсчёт объектов

Цель работы:

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

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

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

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

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

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

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

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

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

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

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



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

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

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



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

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

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

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



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

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



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

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

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



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

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

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



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

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

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



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

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

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



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

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



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

Рисунок: Структурная схема сужения объектов в маске изображения.



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

В данном блоке свойство «Форма ядра» задана эллипсом, как наиболее подходящая к форме искомого объекта. Свойство «Размер ядра» выбирается равным «15», что соответствует матрице пикселей [15x15], в соответствии с размерами объекта на изображении, чтобы обеспечить однозначность работы счетчика объектов. Такое значение ядра выбрано эмпирически, с учётом размера объекта на изображении. Таким образом сужение позволяет разделить контуры объектов и не удалить объекты с изображения.

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



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

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

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



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

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



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

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

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



Блок «ВО – Разделение каналов цвета» разделяет изображение на три отдельных восьмибитных потока, а блок «ВО – Слияние каналов цвета» объединяет три восьмибитных потока в цветное изображение.

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

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

Рисунок: Свойства блока «ВО – Взвешенная сумма двух массивов».



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

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



Таким образом на выходе алгоритма будет получено исходное изображение с наложенной маской центров объектов. При запуске проекта на расчёт, откроется окно с результатом работы алгоритма (Рисунок 17).

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



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

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



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

Блок «ВО - Подсчет контуров» выполняет подсчет найденных контуров.

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

Рисунок: Свойства линии связи.



В открывшемся окне можно изменить отображаемые значения. При нажатии на кнопку «Ok» в окне проекта появится примитив «Текст» в котором отображается количество найденных объектов (Рисунок 20).

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



Выводы.

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