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

Цель работы:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Выводы.

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