Евгений Борисов
пятница, 14 ноября 2014 г.
В этой статье мы поговорим о задачах видеонаблюдения, точнее – о выявлении и отслеживании в кадре определённого объекта. В основе этого метода лежит идея фильтрации картинки по цвету. Этот метод можно применять, когда объект существенно отличается по цвету от фона и условия освещения изменяются мало.
Идея выделять на картинке один из цветов для нахождения объекта может показаться простой, однако тут могут скрываться ряд затруднений, связанных с техническими характеристиками камеры и не только. Для эффективной реализации этой идеи необходимо будет применить несколько различных методов для обработки изображений, об этом и пойдёт речь ниже.
Неформально задачу можно сформулировать следующим образом. Построить систему выявления и отслеживания положения заданного объекта в кадре, при следующих условиях: объект существенно отличается по цвету от фона, освещение изменятся мало, картинка может содержать шум.
Цвет пикселей картинки зависит от состояния камеры и условий освещения, которое может быть неравномерным.
![]() Рис.1: исходная картинка с синим маркером |
![]() Рис.2: исходная картинка с красным маркером |
![]() Рис.3: выравнивание гистограммы (синий) |
![]() Рис.4: выравнивание гистограммы (красный) |
Результат выравнивания гистограммы имеет много небольших по размеру областей резкого изменения яркости. Для устранения этого недостатка применим сглаживание (размывание)[5].
![]() Рис.5: сглаживание (синий) |
![]() Рис.6: сглаживание (красный) |
После этих преобразований можно применять цветовую фильтрацию, её мы будем выполнять в цветовом пространстве HSV.
![]() Рис.7: цветовая фильтрация (синий) |
![]() Рис.8: цветовая фильтрация (красный) |
В результате цветовой фильтрации на картинке могут остаться точки не принадлежащие объекту но
близкие ему по цвету. Устранить их можно конвертировав картинку в черно-белую (простым пороговым преобразованием) и
применив методы математической морфологии [5].
![]() Рис.9: обесцвечивания по порогу (синий) |
![]() Рис.10: обесцвечивания по порогу (красный) |
![]() Рис.11: очистка морфологией (синий) |
![]() Рис.12: очистка морфологией (красный) |
Далее выделяем края [5] и получаем контур искомого объекта.
![]() Рис.13: выделение краёв (синий) |
![]() Рис.14: выделение краёв (красный) |
В этом разделе описана реализация системы отслеживания объекта с использованием библиотеки OpenCV [ 2] , картинка поступает с вебкамеры.
В качестве объекта будем использовать однотонный шарик. Прежде чем система начнёт работать
необходимо определить параметры цветового фильтра. Это можно сделать с помощью специальной утилиты (ссылка на исходники ниже).
Рис.15: подбор параметров фильтра (синий) |
Рис.16: подбор параметров фильтра (красный) |
Далее запускаем систему с полученными параметрами цветового фильтра.
Рис.17: результат работы детектора (синий) |
Рис.18: результат работы детектора (красный) |
Исходные тексты программ [ здесь ].
Качество работы системы зависит от степени цветовой разницы между фоном и объектом. Результат можно улучшить усложнив модель объекта, например набрать статистку картинок с объектом и описать цвет точек объекта с помощью смеси нормальных распределений [3], после этого для каждой точки картинки вычислять вероятность её принадлежности объекту[4].
[1] Антон Конушин Введение в компьютерное зрение: основы видеонаблюдения – http://www.lektorium.tv/course/22847
[2] OpenCV – http://opencv.org
[3] Евгений Борисов Восстановление смеси плотностей распределений с помощью EM-алгоритма – http://mechanoid.kiev.ua/ml-em-base.html
[4] Евгений Борисов Классификатор на основе RBF – http://mechanoid.kiev.ua/ml-rbf.html
[5] Евгений Борисов Базовые методы обработки изображений. -- http://mechanoid.home.lan/cv-base.html