Вы находитесь на странице: 1из 22

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение


высшего образования
«АДЫГЕЙСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»

Кафедра прикладной математики, информационных


технологий и информационной безопасности

КУРСОВАЯ РАБОТА
по направлению подготовки 01.03.02 «Прикладная математика и
информатика»
профиль: системное программирование и компьютерные технологии

ТЕМА: ВЫДЕЛЕНИЕ И УДЕРЖАНИЕ ДВИЖУЩИХСЯ


ОБЪЕКТОВ

Руководитель _______________ к. ф.-м. н., доц. Алиев М.В.


подпись, дата

Студент 2 курса
факультета математики
и компьютерных наук _______________ Киржинов Д.А.

Майкоп 2017
2

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ............................................................................................................. 3
РАЗДЕЛ 1. ................................................................................................................ 4
ОБЗОР СУЩЕСТВУЮЩИХ МЕТОДОВ ВЫДЕЛЕНИЯ И
УДЕРЖАНИЯ ДВИЖУЩИХСЯ ОБЪЕКТОВ ............................................... 4
1.1. Оценка качества алгоритмов ..................................................................... 4
1.2. Недостатки работы стандартного алгоритма вычитания фона ............. 6
1.3. Решение проблем стандартного алгоритма вычитания фона ................ 7
1.3.1. Нерекурсивные методы вычитания фона .......................................... 7
1.3.2. Рекурсивные методы вычитания фона ............................................... 9
РАЗДЕЛ 2. .............................................................................................................. 11
РЕКУРСИВНЫЙ МЕТОД ВЫДЕЛЕНИЯ И УДЕРЖАНИЯ
ДВИЖУЩИХСЯ ОБЪЕКТОВ СМЕСИ ГАУССОВЫХ
РАСПРЕДЕЛЕНИЙ ............................................................................................ 11
РАЗДЕЛ 3. .............................................................................................................. 15
ЭЛЕМЕНТЫ ПРОГРАММНОЙ РЕАЛИЗАЦИИ И ПРИМЕРЫ РАБОТЫ
ПРОГРАММЫ ВЫДЕЛЕНИЯ И УДЕРЖАНИЯ ДВИЖУЩИХСЯ
ОБЪЕКТОВ .......................................................................................................... 15
3.1. Некоторые элементы реализация программы для выделения и
удержания движущихся объектов .................................................................... 15
3.2. Пример работы программы ........................................................................ 18
ЗАКЛЮЧЕНИЕ ................................................................................................... 21
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ ....................................... 22
3

ВВЕДЕНИЕ
Актуальность темы работы обуславливается тем, что системы
компьютерного зрения широко используются в следующих разделах:
робототехника, системы видеонаблюдения (охранные системы), системы
помощи водителям, мобильные приложения, поэтому использование
алгоритмов распознавания движущихся объектов очень важно в решении
ряда прикладных задач.

В данной работе рассматриваются методы вычитания фона для


распознавания и обозначения движущихся объектов, а также реализован один
из методов на языке C++ при помощи библиотеки OpenCV (Open Source
Computer Vision Library).

Целью данной работы является написание программного обеспечения,


позволяющего выделять и удерживать движущиеся объекты на заданном
видеоматериале (последовательность кадров, видеозапись, трансляция с web-
камеры).

Для достижения указанной цели в курсовой работе решаются


следующие задачи:

1. Изучить методы выделения и удержания движущихся объектов.


2. Оценить качество работы существующих алгоритмов.
3. Применять методы выделения и удержания движущихся объектов
доступные в библиотеке OpenCV.
4. Сравнить выбранный метод с остальными.
4

РАЗДЕЛ 1.

ОБЗОР СУЩЕСТВУЮЩИХ МЕТОДОВ ВЫДЕЛЕНИЯ И


УДЕРЖАНИЯ ДВИЖУЩИХСЯ ОБЪЕКТОВ

1.1. Оценка качества алгоритмов


Наиболее простой подход к решению задачи о выделении движущихся
объектов состоит в том, чтобы использовать методы вычитания фона из кадра
видео (background subtraction).

Рассмотрим простейший алгоритм. Процедура вычитания


предполагает, что для данного видео построена модель фона:

𝐹 = {𝐹(𝑥, 𝑦) ∕ 0 ≤ 𝑥 < 𝑤 ∧ 0 ≤ 𝑦 < ℎ},

где w-ширина, h-высота изображения.

В качестве модели фона можно взять первый кадр видеозаписи. Также


будем считать, что на вход будут подаваться кадры в виде одноканальных
изображений (т.е. в оттенках серого), другими словами если 𝐼𝑘 (𝑥, 𝑦) – k-й
кадр, то 𝐼𝑘 (𝑥, 𝑦), 𝐹(𝑥, 𝑦) ∈ {0, … ,255}, ∀ 𝑘 ∈ {1, … , 𝑁}. Таким образом
процедуру вычитания можно разделить на 2 этапа:

1) Нахождение разности между фоновым изображением и текущим


кадром. Данная операция выполняется попиксельно:
𝐷𝑘 (𝑥, 𝑦) = |𝐼𝜅 (𝑥, 𝑦) − 𝐹(𝑥, 𝑦)|, ∀𝑘 ∈ {1, … , 𝑁}
2) Отбор пикселей, принадлежащих фону и объекту. Для этого
бинарное изображение (маска переднего плана). Считается, что пиксель
принадлежит движущемуся объекту и имеет белый цвет в маске, если
разность интенсивности фона и текущего кадра для данного пикселя
превышает некоторое пороговое значение 𝛿 в противном случае,
принимается, что пиксель принадлежит фону:
255, 𝐷𝑘 (𝑥, 𝑦) ≥ 𝛿
𝑀𝑘 (𝑥, 𝑦) = { , ∀𝑘 ∈ {1, … , 𝑁}
0, 𝐷𝑘 (𝑥, 𝑦) < 𝛿
5

Можно выделить 2 вида ошибок данного алгоритма:

1) Переднеплановый пиксель был классифицирован как


заднеплановый (например, в следствие шума или из-за того, что цвет
переднепланового объекта совпадает с цветом заднего плана).
2) Заднеплановый пиксель был классифицирован как
переднеплановый (например, из-за шума).

Изменяя пороговое значение  и параметры последующей фильтрации


можно регулировать чувствительность алгоритма т.е. уровни этих ошибок.

Более наглядно принцип работы алгоритма описывает следующая


схема:

Рисунок 1. Схема работы стандартного алгоритма вычитания фона1.

Несомненными достоинствами данного алгоритма является


исключительная простота реализации и высокая производительность, т.к.
вычислительная сложность данного алгоритма составляет:

𝑂(𝑁(𝑤 + ℎ)), где 𝑁 − число кадров, 𝑤 − ширина, ℎ −


высота изображения.

1
OpenCV. How to Use Background Subtraction Methods. [Электронный ресурс]:
http://docs.opencv.org/master/d1/dc5/tutorial_background_subtraction.html#gsc.tab=0
6

Не смотря на эти достоинства существует ряд недостатков, которые


делают этот алгоритм практически неприменимым на практике.

1.2. Недостатки работы стандартного алгоритма


вычитания фона
Рассмотрим главные недостатки работы стандартного алгоритма
вычитания фона.
Изменение заднего плана. Эта проблема вполне очевидна, т.к. в качестве
фоновой модели берется первый кадр. Например, если видеокамера
установлена на улице и паркуется автомобиль, то уже неподвижный объект
(автомобиль) всё равно выделяется и удерживается, т.к. последующие кадры
с этим объектом отличаются от фоновой модели в том месте, где он
находится. Если таких изменений будет довольно много, то большая часть
кадра будет выделяться и удерживаться как движущийся объект и
анализировать такие данные уже практически невозможно.
Изменение освещения. Изменения освещения практически полностью
меняют цветовые характеристики сцены. В итоге из-за сильного изменения
освещения алгоритм будет сегментировать в передний план большую часть
сцены, что делает невозможным анализировать результаты работы
программы.
Тени. Найти тень на изображении или в видеопотоке для человека не
составляет никакого труда в то время как автоматическое нахождение теней -
довольно сложная задача. Алгоритм вычитания фона сталкивается с
проблемой движущихся теней, т.е. теней от движущихся объектов сцены.
Падение тени на объект довольно сильно меняет цвет объекта, и именно
поэтому изложенный выше алгоритм классифицирует тени как движущийся
объект и передаёт его на маску переднего плана.
7

Динамический задний план. Стандартный алгоритм вычитания фона не


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

1.3. Решение проблем стандартного алгоритма


вычитания фона
Качество определения положения движущихся объектов посредством
вычитания фона во многом зависит от качества построенной модели фона.
Множество всех техник вычитания фона подразделяется на две группы в
зависимости от механизма построения фонового изображения: нерекурсивные
и рекурсивные.
1.3.1. Нерекурсивные методы вычитания фона

Нерекурсивные методы обновляют модель фона для текущего кадра на


основании информации об интенсивностях пикселей некоторого набора
предшествующих моделей фона (или кадров) и текущего кадра.

Рассмотрим наиболее распространенные нерекурсивные методы.


Метод вычитания текущего и предыдущего кадра. В данном методе
считается, что для кадра 𝐼𝑘 (𝑥, 𝑦) модель фона 𝐹𝑘 (𝑥, 𝑦) совпадает с
предыдущим кадром, т.е. 𝐹𝑘 (𝑥, 𝑦) = 𝐼𝑘−1 (𝑥, 𝑦). Тогда на первом этапе
алгоритма вычитания фона вычисляется разница пары последовательно
идущих кадров:
𝐷𝑘 (𝑥, 𝑦) = |𝐼𝜅 (𝑥, 𝑦) − 𝐹𝜅 (𝑥, 𝑦)| = |𝐼𝜅 (𝑥, 𝑦) − 𝐼𝜅−1 (𝑥, 𝑦)| , ∀𝑘 ∈ {2, … , 𝑁}
Метод усреднения определенного количества предшествующих кадров.
Чтобы преодолеть недостатки метода вычитания фона, задний план должен
оцениваться и обновляться по времени. Часто фон моделируется усреднением
8

последовательности некоторого числа кадров. Обозначим количество кадров,


по которым будет выполняться построение модели фона, как s. Тогда для
кадра 𝐼𝑘 (𝑥, 𝑦) модель фона 𝐹𝑘 (𝑥, 𝑦) определяется в соответствии со
следующей формулой:
𝑠−1
1
𝐹𝑘 (𝑥, 𝑦) = ∑ 𝐼𝑘−𝑗 (𝑥, 𝑦).
𝑠
𝑗=0

Этот этап построения модели фона также называется обучением. По


результатам накопления изображений за выбранный промежуток времени
определяется усредненный фон 𝐹𝑘 (𝑥, 𝑦). Стоит заметить, что в первые s
кадров перед камерой не должно происходить никакого движения.
Далее уже происходит стандартная обработка вычитанием
усредненного фона 𝐹𝑘 (𝑥, 𝑦) из кадров 𝐼𝑘 (𝑥, 𝑦).
Этот метод приспособлен к медленному изменению фона. Например,
если камера установлена на улице, то на результат работы данного алгоритма
не повлияет такой фактор, как смена времени суток. Изменение фона
сглаживается эффектом усреднения, а точность алгоритма зависит от
скорости объектов и частоты кадров.
Метод определения медианы фиксированного количества
предшествующих кадров. Этот метод очень похож на предыдущий. Пусть s –
число кадров, на основании которых будет обновляться модель фона. Тогда
модель фона 𝐹𝑘 (𝑥, 𝑦) вычисляется по формуле:
𝐹𝑘 (𝑥, 𝑦) = 𝑚𝑒𝑑{𝐼𝑘−𝑗 (𝑥, 𝑦)}, ∀𝑗 ∈ {0, … , 𝑠 − 1}.
Итак, основное преимущество нерекурсивных методов – простота
реализации и скорость обновления моделей фона при переходе от кадра к
кадру. При этом заметим, что качество работы методов данной группы
зависит от скорости перемещения движущихся объектов. Медленно
перемещающиеся объекты, как правило, обнаруживаются плохо. Более того,
приведенные методы не дают качественный результат при резком изменении
9

света на сцене, либо при наличии динамического фона (листва деревьев,


струящаяся вода и т.п.).
1.3.2. Рекурсивные методы вычитания фона

Рекурсивные методы для обновления модели фона используют


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

Рассмотрим некоторые из рекурсивных методов.

Гистограммный метод. Идея гистограммного метода состоит в том,


что все цветовое пространство разбивается на отдельные полосы (для
полутонового изображения пространство представляет отрезок изменения
интенсивности, в случае цветного изображения – трехмерный куб). Для
каждого изображения в последовательности выполняется построение
гистограммы. Осуществляется проход по всем пикселям изображения, в
зависимости от того, какая интенсивность/цвет наблюдается в пикселе,
увеличивается на единицу величина соответствующей полосы гистограммы.
Считается, что пиксели, составляющие некоторую полосу, принадлежат
фону, если величина данной полосы меньше фиксированного порогового
значения, в противном случае, считается, что они принадлежат объекту.

Основная проблема применения гистограммного метода состоит в


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

Метод извлечения визуального фона (Visual Background Extractor,


ViBe). В соответствии с данным методом модель фона на кадре с номером k
представляется набором множеств 𝑀𝑘 (𝑝) = {𝑣1 , 𝑣2 , … , 𝑣𝑁 } для всех пикселей
𝑝 = (𝑥, 𝑦), где 𝑣𝑖 – интенсивность/цвет пикселя (в общем случае вектор). Для
классификации пикселя 𝑝 в цветовом пространстве строится сфера 𝑆𝑅 (𝑣(𝑥))
радиуса 𝑅 и определяется количество векторов множества 𝑀(𝑝), которые
попадают вовнутрь построенной сферы:
10

𝐾 = |𝑆𝑅 (𝑣(𝑝)) ∩ 𝑀(𝑝)|

Если 𝐾 > 𝑇𝑚𝑖𝑛 , где 𝑇𝑚𝑖𝑛 – фиксированное пороговое значение, то


принимается, что пиксель принадлежит фону, в противном случае, объекту.
На начальном этапе необходимо выполнить инициализацию множеств 𝑀0 (𝑝)
для всех пикселей 𝑝 следующим образом:

𝑀0 (𝑝) = {𝑣 0 (𝑦), 𝑦 ∈ 𝑁𝐺 (𝑝)},

где 𝑁𝐺 (𝑝) – окрестность пикселя 𝑝 размера 3x3 (9 клеток, включая текущий


пиксель), 𝑦 выбирается 𝑁 раз случайным образом.

Обновление модели фона для кадра 𝐼𝑘 (𝑥, 𝑦) выполняется в два шага:

1) Если 𝑝 проклассифицирован как пиксель фона, то из множества


𝑀𝑘 (𝑝) случайно выбирается компонента, которая заменяется значением 𝑣(𝑝).
2) Случайным образом выбирается один соседний пиксель из
окрестности 𝑁𝐺 (𝑝), для которого выполняется предыдущий шаг.
Также существует метод смеси Гауссовых распределений, который
основан на вероятностных моделях. Этот алгоритм будет подробно описан в
разделе 2.
Таким образом можно сделать вывод, что метод вычитания фона имеет
большое достоинство в простоте реализации и низкой вычислительной
сложности. Стандартный алгоритм вычитания фона для выделения и
удержания движущихся объектов имеет ряд недостатков, которые делают его
неприменимым на практике, но в то же время существует множество техник
вычитания фона подразделяющиеся на две группы в зависимости от
механизма построения фонового изображения: нерекурсивные и рекурсивные,
каждый из которых в некоторой степени подавляет недостатки стандартного
алгоритма.
11

РАЗДЕЛ 2.
РЕКУРСИВНЫЙ МЕТОД ВЫДЕЛЕНИЯ И УДЕРЖАНИЯ
ДВИЖУЩИХСЯ ОБЪЕКТОВ СМЕСИ ГАУССОВЫХ
РАСПРЕДЕЛЕНИЙ

При построении фона с использованием данного метода считается, что


для любого пикселя (𝑥0 , 𝑦0 ) изображения 𝐼𝑘 (𝑥, 𝑦) известна история
изменения его интенсивности/цвета на всех предшествующих
кадрах{𝑋1 , 𝑋2 , … , 𝑋𝑘 } = {𝐼𝑗 (𝑥0 , 𝑦0 ), ∀𝑗 ∈ {1, … , 𝑘} } . Тогда вероятность того,
что наблюдается значение 𝑋𝑘 , может быть представлена смесью из 𝑠
Гауссовых распределений:
𝑠

𝑃(𝑋𝑘 ) = ∑ 𝜔𝑗𝑘 𝑁(𝑋𝑘 |𝜇𝑗𝑘 , Σ𝑗𝑘 ),


𝑗=1

где 𝜔𝑗𝑘 - вес 𝑗-го распределения Гаусса для кадра с номером 𝑘, 𝜇𝑗𝑘 -
математическое ожидание, Σ𝑗𝑘 - среднеквадратичное отклонение,
𝑁(𝑋𝑘 |𝜇𝑗𝑘 , Σ𝑗𝑘 ) − функция плотности нормального распределения:

(𝑋𝑘 −𝜇𝑗𝑘 )𝑇 (𝑋𝑘 −𝜇𝑗𝑘 )


1 −
2Σ𝑘
𝑁(𝑋𝑘 |𝜇𝑗𝑘 , Σ𝑗𝑘 ) = ⋅𝑒 𝑗

√(2𝜋)𝐷 |Σ𝑗𝑘 |

Предполагается, что компоненты цвета независимы и имеют


одинаковое среднеквадратичное отклонение. Поэтому матрица ковариации
имеет вид Σ𝑗𝑘 = (𝜎𝑗𝑘 )2 𝐸, где 𝐸 – единичная матрица. Указанное
предположение позволяет снизить вычислительную трудоемкость метода за
счет отсутствия необходимости вычислять матрицу, обратную к матрице
ковариации Σ𝑗𝑘 . Таким образом, задано распределение наблюдаемых
значений цвета для каждого пикселя. Новое значение будет представляться
одной из основных компонент построенной смеси Гауссовых распределений
12

и использоваться для обновления параметров модели. Распределения


𝜔𝑗𝑘
сортируются в порядке уменьшения величины 𝑟𝑗𝑘 = . Такая сортировка
𝜎𝑗𝑘

предполагает, что пиксель фона отвечает распределению с большим весом и


малой дисперсией. Принимается, что первые 𝐵𝑘 распределений,
удовлетворяющих условию: 𝐵𝑘 = 𝑎𝑟𝑔𝑚𝑖𝑛𝑏 {∑𝑏𝑗=1 𝜔𝑗𝑘 > 𝑇}, где 𝑇 – некоторое
пороговое значение (параметр модели), соответствуют распределению цвета
фоновых пикселей. Когда приходит очередной кадр 𝐼𝑘+1 (𝑥, 𝑦) , для каждого
пикселя изображения выполняется тест, который позволяет определить с
использованием расстояния Махаланобиса, какому распределению

(𝑋𝑘+1 −𝜇𝑗𝑘 )𝑇 (𝑋𝑘+1 −𝜇𝑗𝑘 )


соответствует полученное значение: √ < 2,5𝜎𝑗𝑘 .
Σ𝑘
𝑗

В результате возможны две ситуации:

1) Если нашлось соответствующее распределение Гаусса, то в


зависимости от того, определяет ли оно распределение фоновых пикселей
(входит в группу из 𝐵𝑘 распределений) или нет, текущий пиксель
классифицируется как фоновый, либо как принадлежащий объекту.
2) Если не обнаружилось ни одного распределения,

(𝑋𝑘+1 −𝜇𝑗𝑘 )𝑇 (𝑋𝑘+1 −𝜇𝑗𝑘 )


удовлетворяющего условию √ < 2,5𝜎𝑗𝑘 , то считается, что
Σ𝑘
𝑗

пиксель принадлежит объекту.


На основании такого правила формируется двумерная маска. Чтобы
обработать следующий кадр, необходимо обновить параметры
распределений: математическое ожидание 𝜇𝑗𝑘 и среднеквадратичное
отклонение 𝜎𝑗𝑘 . В зависимости от того, нашлось ли соответствующее
распределение для цвета текущего пикселя, обновление выполняется по-
разному, а именно, если соответствие обнаружено, то весовые
коэффициенты, составляющие смесь Гауссовых распределений, которым
13

соответствует 𝑋𝑘+1 , и параметры распределений пересчитываются согласно


следующим формулам:
𝜔𝑗𝑘+1 = (1 − 𝛼)𝜔𝑗𝑘 + 𝛼,
𝜇𝑗𝑘+1 = (1 − 𝜌)𝜇𝑗𝑘 + 𝜌𝑋𝑘+1 ,
(𝜎𝑗𝑘+1 )2 = (1 − 𝜌)(𝜎𝑗𝑘 )2 + 𝜌(𝑋𝑘+1 − 𝜇𝑗𝑘+1 )𝑇+1 ,
где 𝛼 – заданная константа, 𝜌 = 𝛼𝑁(𝑋𝑘 |𝜇𝑗𝑘 , Σ𝑗𝑘 ).
Для всех распределений, которым 𝑋𝑘+1 не соответствует, параметры
не изменяются, только пересчитываются коэффициенты 𝜔𝑗𝑘+1 согласно
формуле: 𝜔𝑗𝑘+1 = (1 − 𝛼)𝜔𝑗𝑘 .
Если же соответствие не найдено, то в данном случае крайнее (в
смысле введенного отношения порядка) распределение Гаусса замещается
распределением с новыми параметрами. Математическое ожидание
выбирается равным текущему значению цвета пикселя 𝜇𝑠𝑘+1 = 𝑋𝑘+1
дисперсия (𝜎𝑠𝑘+1 )2 максимально возможной, а вес 𝜔𝑠𝑘+1 минимально
допустимым.
Количество распределений определяется сложностью фона и
имеющимися вычислительными мощностями. Начальная инициализация
параметров распределений может выполняться с использованием метода k-
средних, либо EM-алгоритма (Expectation Maximization).

Метод, используемый для классификации пикселей, очевидно,


допускает принадлежность к заднему плану сразу нескольких процессов.
Именно поэтому при наличии динамического заднего плана алгоритм через
некоторое время адаптируется к его повторяющимся движениям. Более того,
алгоритм способен адаптироваться к таким движениям сцены как дождь или
снег. Также алгоритм способен адаптироваться к изменениям заднего плана
т.к. через некоторое время после изменения вес созданного при изменении
процесса превысит порог, и он начнет сегментироваться в задний план. К
медленным изменениям освещения алгоритм способен адаптироваться
14

благодаря системе оценки параметров, т.к. по мере плавного изменения


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

Итак, у метода представления модели фона смесью Гауссовых


распределений имеет следующий недостаток: начальная инициализация
параметров распределений является достаточно трудоемкой процедурой.
Относительно большое количество параметров требует организации подбора
наиболее оптимальных значений для конкретных данных.
15

РАЗДЕЛ 3.
ЭЛЕМЕНТЫ ПРОГРАММНОЙ РЕАЛИЗАЦИИ И ПРИМЕРЫ
РАБОТЫ ПРОГРАММЫ ВЫДЕЛЕНИЯ И УДЕРЖАНИЯ
ДВИЖУЩИХСЯ ОБЪЕКТОВ

3.1. Некоторые элементы реализация программы для


выделения и удержания движущихся объектов
Программа для выделения и удержания движущихся объектов
написана на языке C++ с использованием библиотеки OpenCV.
Для выделения и удержания движущихся объектов используется класс
BackgroundSubtractorMOG22, который использует метод смеси Гауссовых
распределений (Gaussian Mixture-based Background/Foreground Segmentation
Algorithm).
1) Объявим два объекта Mat (класс для хранения изображений) для
хранения кадра, и для генерации маски переднего плана.
Mat frame; //Текущий кадр
Mat fgMaskMOG2; //Маска переднего плана, которая сгенерируется
методом MOG2
2) Объект cv::BackgroundSubtractor будет использоваться для
генерации переднего плана маски.
Ptr<BackgroundSubtractor> pMOG2;
...
//Создаем объекты для заднего фона
pMOG2 = createBackgroundSubtractorMOG2();

2
Декларация класса BackgroundSubtractorMOG2 описана на официальном сайте OpenCV.
[Электронный ресурс]:
http://docs.opencv.org/2.4/modules/video/doc/motion_analysis_and_object_tracking.html#back
groundsubtractormog
16

3) Объявляем объект capture класса VideoCapture, который


предназначен для подачи на вход обрабатываемой видеозаписи.
VideoCapture capture(0);//на вход конструктора подаётся путь к
видеофайлу, если передать значение 0, то в качестве источника видео
примется любая подключенная web-камера.
4) Каждый кадр используется как для расчета маски переднего плана,
так и для обновления фона. Можно изменить скорость обучения,
используемую для обновления модели фона, можно установить конкретную
скорость обучения (третий параметр метода "apply").
pMOG2->apply(frame, fgMaskMOG2,0.95);//apply вычисляет маску
переднего плана.
5) В результате работы алгоритма, может появляться шум на маске
переднего плана. Для устранения небольших шумов, применим
морфологическое замыкание, как примененную эрозию к маске переднего
плана, а затем, к результату эрозии, примени дилатацию, чтобы основные
объекты не потеряли свою толщину.

//задаём параметры для создания структурообразующих элементов


морфологических операций обработки изображений

int radius = 1;

int radius_max = 10;

int iterations = 1;

int iterations_max = 20;

//применяем морфологические операции обработки изображений к


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

image= cvCloneImage(&(IplImage)fgMaskMOG2);//копируем результат


работы алгоритма чтобы потом его отобразить на экране
17

dst = cvCloneImage(&(IplImage)fgMaskMOG2);//копируем результат


работы алгоритма для применения эрозии

dst2 = cvCloneImage(&(IplImage)fgMaskMOG2);//копируем результат


работы алгоритма для применения дилатации

IplConvKernel* Kern = cvCreateStructuringElementEx(radius * 2 + 1,


radius * 2 + 1, radius, radius, CV_SHAPE_ELLIPSE);//задаём
структурообразующий элемент для операции эрозии
IplConvKernel* Kern2 = cvCreateStructuringElementEx(radius * 2 + 3,
radius * 2 + 3, radius+2, radius+2, CV_SHAPE_ELLIPSE);// //задаём
структурообразующий элемент для операции дилатации

cvErode(image, dst, Kern, iterations);//применяем к результату работы


алгоритма хранящегося в image эрозию, со структурообразующим
элементом описанным в Kern, и сохраняем в dst.

cvDilate(dst, dst2, Kern2, iterations); //применяем к результату работы


эрозии хранящегося в dst дилатацию, со структурообразующим элементом
описанным в Kern2, и сохраняем в dst2.

6) Выводим итоговые результаты на экран.


imshow("Frame", frame);//показываем кадры из источника видео
cvShowImage("original", image);//показываем результат работы
алгоритма выделения и удержания движущихся объектов
cvShowImage("Erode", dst);//показываем результат работы алгоритма
выделения и удержания движущихся объектов с применённой эрозией
cvShowImage("Dilate", dst2);//показываем результат работы алгоритма
выделения и удержания движущихся объектов с применённой дилатацией к
эрозии (замыканием), что является конечным результатом.
7) Все полученные результаты записываем в видеофайл.
18

//Создаём поток вывода в видеофайл до начала работы процедуры


выделения и удержания движущихся объектов
CvVideoWriter *writer = cvCreateVideoWriter(filename,
CV_FOURCC('X', 'V', 'I', 'D'), fps, size, 0);//вывод будет осуществляться в
файл с названием хранящемся в переменной filename типа string, заданной
частотой кадров fps типа double, заданным размером кадра size типа
cv::CvSize, последний параметр принимающий значение 0 обозначает, что
видео будет чёрно-белым, значение второго параметра обозначает, что
записываемый видеофайл будет формата avi.
cvWriteFrame(writer, dst2);//Данный метод добавляет кадр dst2 к
записываемому видео через поток writer
8) После выполнения работы программы освобождаем ресурсы:
cvReleaseImage(&image);//освобождаем изображения
cvReleaseImage(&dst); //освобождаем изображения
cvReleaseImage(&dst2);//освобождаем изображения
cvReleaseVideoWriter(&writer);//удаляем поток записи видео
capture.release();//освобождаем web-камеру

3.2. Пример работы программы


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

Рисунок 2. Кадр исходного видео.

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


объектов.
20

На рисунке 3 виден мелкий шум. От него избавляемся при помощи


морфологического замыкания.

Рисунок 4. Результат применения морфологического замыкания.

Как видно на рисунке 4, морфологическое замыкание убрало мелкий


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

ЗАКЛЮЧЕНИЕ

Системы компьютерного зрения широко используются в таких


разделах, как робототехника, системы видеонаблюдения (охранные
системы), системы помощи водителям, мобильные приложения, поэтому
использование алгоритмов распознавания движущихся объектов очень
важно в решении ряда прикладных задач. Этим подтверждается
актуальность работы.

В ходе выполнения курсовой работы были изучены методы выделения


и удержания движущихся объектов при помощи вычитания фона. Были
рассмотрены алгоритмы распознавания движущихся объектов на видео, для
каждого из которых приведены их достоинства и недостатки. К одному из
наиболее эффективных относят метод смеси Гауссовых (нормальных)
распределений, относящийся к рекурсивным алгоритмам вычитания фона
для выделения и удержания движущихся объектов.

В результате исследования теоретического материала, была написана


программа на языке C++ с использованием библиотеки OpenCV. Программа
принимает на вход данные с web-камеры компьютера и обрабатывает
получаемые кадры. В библиотеке OpenCV описан класс
BackgroundSubtractorMOG2 использующий алгоритм смеси Гауссовых
(нормальных) распределений. Недочёты в виде шума на результирующих
изображениях были устранены использованием морфологической операции
замыкания. Итоговые изображения записываются в видеофайл и
сохраняются.

Перспектива дальнейшего исследования данной темы состоит в


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

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1. How to Use Background Subtraction Methods. OpenCV.


[Электронный ресурс] – Режим доступа:
http://docs.opencv.org/master/d1/dc5/tutorial_background_subtraction.html#gsc.t
ab=0
2. Motion Analysis and Object Tracking. OpenCV.
[Электронный ресурс] – Режим доступа:
http://docs.opencv.org/2.4/modules/video/doc/motion_analysis_and_object_tracki
ng.html#backgroundsubtractormog
3. OpenCV шаг за шагом. [Электронный ресурс] – Режим доступа:
http://robocraft.ru/page/opencv/
4. Лекция 4: Отслеживание движения и алгоритмы сопровождения
ключевых точек. НОУ ИНТУИТ. [Электронный ресурс] – Режим доступа:
http://www.intuit.ru/studies/courses/10622/1106/lecture/18022?page=1
5. Гонсалес Р., Вудс Р., Эддинс С. Цифровая обработка изображений
в среде MATLAB. Москва: Техносфера, 2006. – 616с.