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

- Моделирование фона — этот подход можно применять если камера неподвижна, т.е. мы имеем фон, который мало изменяется, и таким образом можно построить его модель. Все точки изображения, которые существенно отклоняются от модели фона, считаем объектами переднего плана. Таким образом можно решать задачи обнаружения и сопровождения объекта.
- Моделирование объекта — этот подход более общий, применяеться в случаях когда фон постоянно и существенным образом изменяется. В отличии от предыдущего случая, здесь нам необходимо знать что именно мы хотим найти, т.е. необходимо построить модель объекта, а затем проверить точки картинки на соответствие этой модели.
Иногда условия задачи позволяют комбинировать оба подхода, это может существенно улучшить результаты.
Далее будем рассматривать применение второй стратегии, т.е. моделирование объекта поиска.
2. Обзор методов
В этом разделе мы приведём список подходов, с помощью которых можно успешно решать задачу поиска объекта на изображении, в порядке возрастания сложности.
- Цветовые фильтры — если объект существенно выделяется на фоне по цвету, то можно подобрать соответствующий фильтр.
- Выделение и анализ контуров — если мы знаем, что объект имеет форму, например, круга, то можно поискать окружности на изображении.
- Сопоставление с шаблоном — у нас есть изображение объекта, ищем в другом изображении области совпадающие с этим изображением объекта.
- Работа с особыми точками — на картинке с объектом ищем особенности (например углы), которые пытаемся сопоставить с такими особенностями на другом изображении.
- Методы машинного обучения — обучаем классификатор на картинках с объектом, некоторым способом разделяем изображение на части, проверяем классификатором каждую часть на наличие объекта.
Как вы догадались, из этого списка нас интересует первый пункт.
Цвет пикселей картинки зависит от состояния камеры и условий освещения, которое может быть неравномерным.
Первое что необходимо сделать это по возможности сгладить колебания цвета на картинке, связанные с техническими особенностями камеры и колебаниями освещения. Для решения этой задачи можно использовать метод выравнивания гистограммы.
Результат выравнивания гистограммы имеет много небольших по размеру областей резкого изменения яркости. Для устранения этого недостатка применим сглаживание (размывание).
После этих преобразований можно применять цветовую фильтрацию, её мы будем выполнять в цветовом пространстве HSV.
В результате цветовой фильтрации на картинке могут остаться точки не принадлежащие объекту но близкие ему по цвету. Устранить их можно конвертировав картинку в черно-белую (простым пороговым преобразованием) и применив методы математической морфологии.
Далее выделяем края и получаем контур искомого объекта.
В 2_cpp_monocolor_tracker.zip описана реализация системы отслеживания объекта с использованием библиотеки OpenCV, картинка поступает с вебкамеры.
В качестве объекта можно, например, использовать однотонный шарик. Прежде чем система начнёт работать необходимо определить параметры цветового фильтра. Это можно сделать с помощью специальной утилиты (ссылка на исходники ниже).
Далее запускаем систему с полученными параметрами цветового фильтра.
Качество работы системы зависит от степени цветовой разницы между фоном и объектом. Результат можно улучшить усложнив модель объекта, например набрать статистку картинок с объектом и описать цвет точек объекта с помощью смеси нормальных распределений, после этого для каждой точки картинки вычислять вероятность её принадлежности объекту.
Задание
К сожалению, серьезно доработать трекер у нас вряд ли получится, поэтому задание по этому пункту, помимо внимательного разбора и документирования описанного метода, состоит в том, чтобы помочь потенциальному пользователю выбрать цвет. Это программа-минимум. В этом вам помогут createTrackbar().
Исходники (cpp + python)
http://study.rusvision.com/wp-content/uploads/2019/11/monocolor_tracker.zip