2 Разработка математической модели системы
Пусть у нас имеется видеопоследовательность, получаемая из файла, или стационарной видеокамеры. Пусть первые n кадров перед видеокамерой не происходит никакого движения, а начиная с n+1 кадра перед камерой могут появляться объекты интереса, т.е. люди машины или что-то еще. Для каждого кадра последовательности требуется получить бинарное изображение (маску) переднего плана (движущихся объектов). В полученной маске 0/черный соответствует заднему плану, а 1/белый соответствует переднему плану. Пример успешной сегментации можно увидеть на рисунке 1.
Стоит дополнительно заметить, что требование о том, что первые n кадров перед камерой не происходит никакого движения не всегда может быть выполнено. В качестве примера можно рассмотреть видеопоследовательность с видом на улицу, на которой находится дерево с качающимися от ветра листьями. Подобное явление мы будем называть динамическим задним планом. Т.ч. данное требование можно заменить на то, что первые n кадров перед камерой не появляется никаких объектов интереса т.е. виден только задний план, статический или динамический.
Рис 1. Пример сегментации кадра видеопоследовательности.
Рассмотрим два алгоритма:
1) Простейший алгоритм.
Рассмотрим простейший алгоритм вычитания фона. Будем считать, что к нам поступают полутоновые изображения. Если с камеры поступают цветные изображения то их очевидно можно привести к полутоновым, например используя формулу:
. (2.1)
Алгоритм сохраняет первый кадр видеопоследовательности (обозначим его B), а потом для каждого следующего кадра (обозначим текущий кадр C) применяет порог к модулю разности текущего и сохраненного изображения по каждому пикселю используя условие:
,
(2.2)
где w и h это ширина и высота картинки соответственно, то пиксель (i,j) считается переднеплановым, иначе он считается заднеплановым.
Отметим
2 вида ошибок такого алгоритма:
переднеплановый пиксель был классифицирован
как заднеплановый (например в следствии
шума или из-за того, что цвет переднепланового
объекта совпадает с цветом заднего
плана) и заднеплановый пиксель был
классифицирован как переднеплановый
(например из-за шума). Изменяя параметр
(порог) и параметры последующей фильтрации
можно регулировать чувствительность
алгоритма т.е. уровни этих ошибок.
Несомненными достоинствами данного
алгоритма является исключительная
простота реализации и высокая
производительность. Не смотря на эти
достоинства существует ряд проблем,
которые делают этот алгоритм практически
неприменимым на практике.
2) Алгоритм с нормальным распределением.
Опять будем считать, что с камеры поступают полутоновые изображения. Данный алгоритм моделирует каждый пиксель заднего плана с помощью одномерной нормально распределенной случайной величины т.е.
(2.3)
Первые
n
кадров (когда камере виден только задний
план) для каждого пикселя алгоритм
производит оценку параметров модели
т.е
и
используя аппарат
мат. статистики а потом, после того как
обучение закончено, попиксельно
использует вероятностный порог для
того, чтобы определить принадлежит ли
значение пикселя заднему плану или
переднему. Итак:
1) Обучение модели заднего плана по первым n кадрам. Для оценки параметров модели и для каждого пикселя можно применять математическое ожидание и среднее квадратичное отклонение значений в данном пикселе т.е.
(2.4)
где
- значения в пикселе по первым n кадрам.
2) Далее для каждого следующего кадра и для каждого пикселя. Обозначим за с значение в текущем кадре для (i,j) пикселя. Если
(2.5)
то данный пиксель сегментируется в задний план, иначе он сегментируется в передний план.
Параметр
e влияет на чувствительность алгоритма
и выбирается из след. соображений.
Фиксируется некоторое число
После этого относительно e
решается уравнение
(2.6)
где
Число a
есть ни что иное как вероятность того,
что отклонение вызванное шумом камеры
попадет в указанную выше e-окрестность.
Очень часто пользуются e
= 3 (т.н.
Mahalanobis distance) которому соответствует
значение
.
Данный алгоритм решает проблему шума
камеры т.к. имеет адаптивный вероятностный
порог, но все остальные проблемы остаются
в силе.
Заметим,
что данный алгоритм допускает реализации
не только для полутоновых но и, например,
для RGB изображений, что улучшает качество
работы алгоритма. При реализации в RGB
следует использовать 3х мерное нормальное
распределение вместо одномерного и
построить вероятностный порог для 3х
мерной сл. величины.
3 Разработка концептуальной объектной модели системы
В программе существует два класса TBackground и наследуемый от него TNRBackround. Класс TBackground описывает задний план для простого алгоритма. В нем необходимо обеспечить хранение заднего плана. Задний план Mask будет строиться в конструкторе объекта. Так как необходимо обеспечить различные уровни настройки работы алгоритма, то существуют различные переменные:
- AStep, отвечает за шаг алгоритма(например при значении 2, будут обрабатываться только каждые вторые пиксели);
-
delt, отвечает за точность,
(формула 2.2)
- count, счетчик сегментированных в передний план пикселей для текущего кадра.
- Sensetiv, хранит значение параметра, для установления является ли текущий кадр переднеплановым, или нет.
Для всех этих параметров предусмотрены свойства для чтения и записи.
Необходима функция CompImg для сравнения текущего кадра с задним планом. В нее необходимо передавать текущий кадр и флаг, который будет равен true при условии, что Sensetiv будет меньше, чем количество пикселей, которые сегментируются в передний план. Функция будет возвращать изображение типа TBitmap для текущего кадра, в которой черный цвет соответствует, что пиксель сегментировался в передний план, белый, что пиксель сегментировался в задний план.
Класс TNRBackground наследует все поля, свойства и методы от предка, кроме поля Mask. Так как этот класс используется для описания заднего плана при нормальном распределении, то поле Mask будет представлять собой два двумерных массива, в одном будет храниться математическое ожидание, в другом – среднее квадратичное отклонение (формула 2.4). В нем поле delt тоже отвечает за точность e (формула 2.5). Конструктор и функция сравнения в этом классе будут перекрываться. В конструктор уже необходимо передавать первые n кадров, то есть массив, а для функции сравнения необходима другая реализация.
Так как обработка кадра довольно трудоемкий процесс, поэтому ее необходимо выполнять в отдельном потоке. Для вывода и обработки кадров используется класс TShowAnim типа TThread.
