Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сегментация изображения в видеопотоке.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.34 Mб
Скачать

4 Проектирование программы

4.1 Разработка интерфейса

После запуска программы появится окно, вид которого представлен на рисунке 4.1.

Рисунок 4.1 – Главное окно программы

Главное окно программы содержит окно, для отображения видео, компонент TMemo для отображения лога в процессе выполнения программы. и управляющие элементы, служащие для настройки работы алгоритмов .

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

В элементе меню «Алгоритмы» происходит выбор одного из двух алгоритмов, реализованных в программе. По умолчанию выбран «Простой алгоритм».

В элементе меню «Помощь» содержится два пункта, «О программе» и «Помощь».

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

- «Чувствительность» задает точность текущего алгоритма;

- «Уровень» влияет на скорость обработки, от него зависит шаг обработки текущего кадра.

- «Порог сохранения» настраивается в соответствии со значением «Порог», которое располагается внизу в строке состояния. Если «Порог сохранения» меньше, чем значение в строке состояния, то данный кадр считается переднеплановым (на нем существуют движущиеся фрагменты), то, в зависимости от элемента «Сохранять в:» и от пути сохранения, которые указаны внизу после лога программы, текущий кадр сохраняется в указанную папку.

- «Сохранить время и дату» используется для сохранения лога программы в текстовом формате.

- «Сбросить» останавливает обработку текущим алгоритмом, после чего можно выбрать другой алгоритм и продолжить обработку.

- «Звуковое оповещение» выдает звуковой сигнал при обнаружении движения.

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

4.2 Разработка алгоритмов

Главными алгоритмами программы являются алгоритмы сегментации:

  1. Алгоритм построения заднего плана (маски) для «Простого алгоритма»

  2. Алгоритм построения заднего плана (маски) для «Нормального распределения»

  3. Алгоритм сегментации кадра в «Простом алгоритме».

  4. Алгоритм сегментации кадра в «Нормальном распределении».

Рассмотрим их по отдельности.

4.2.1 Алгоритм построения заднего плана (маски) для «Простого алгоритма»

Берем изображение, которое будем использовать в качестве заднего плана. Далее в двумерном цикле начинаем перебор всех пикселей. Для каждого текущего пикселя получаем цвет в формате RGB. Затем из полученного цвета берем составляющие и записываем в маску(задний план) по формуле

Блок схема алгоритма представлена на рисунке 4.2.

Рисунок 4.2 – Алгоритм построения заднего плана (маски) для «Простого алгоритма»

4.2.2 Алгоритм построения заднего плана (маски) для «Нормального распределения».

В этом методе алгоритм построения маски усложнится в связи с тем, что необходимо построить две маски. Первая содержит математическое ожидание, вторая – среднее квадратичное отклонение для каждого пикселя заднего плана.

Для построения заднего плана берется первые n изображений с камеры.

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

Блок схема данного алгоритма представлена на рисунке 4.3.

Рисунок 4.3 Блок схема алгоритма построения заднего плана (маски) для «Нормального распределения».

4.3.3 Алгоритм сегментации кадра в «Простом алгоритме».

Берем текущий кадр из видеопоследовательности. Далее для каждого пикселя представляем цвет в черно-белом формате с помощью формулы 2.1.

И далее сравнивается с маской по условию:

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

Блок схема алгоритма представлена на рисунке 4.4.

Рисунок 4.4 – Блок схема алгоритма сегментации кадра

в «Простом алгоритме».

4.3.3 Алгоритм сегментации кадра в «Нормальном распределении».

Данный алгоритм отличается от предыдущего только методом сравнения текущего пикселя с маской. Маска состоит из двух параметров математического ожидания M и среднего квадратичного отклонения D. Чувствительность алгоритма определяет е. В качестве условия используется формула 2.5.

Блок схема представлена на рисунке 4.5.

Рисунок 4.5 – Блок схема Алгоритм сегментации кадра

в «Нормальном распределении»

4.3 Кодирование программы.

Рассмотрим механизм работы с видеоустройствами. Для этого в программе используется пакет DSPack.

Рис. 4.6 – Структура классов пакета DSPack

DSPack использует механизм DirectShow, и имеет следующие компоненты:

- TFilterGraph. Этот компонент – обертка над менеджером графа фильтров DirectShow. Используется для построения и управления графом фильтров.

- TFilter, является оболочкой над интерфейсом, представляющим фильтр–IbaseFilter. Этот интерфейс предоставляет методы для управления фильтром. Его реализуют все фильтры DirectShow.

- TVideoWindow, используется для отображения (рендеринга) проходящих через граф фильтров данных.

При запуске приложения нужно провести поиск доступных видеоустройств. Для этого создается объект класса SysDevEnum, который служит для создания списка устройств. В данной программе используются видео устройства, это и указывается при создании объекта:

SysDev:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);

Нам же необходимо вывести список всех доступных устройств в меню, для последующего выбора:

if SysDev.CountFilters > 0 then

for i := 0 to SysDev.CountFilters - 1 do

begin

Device := TMenuItem.Create(Devices);

Device.Caption := SysDev.Filters[i].FriendlyName;

Device.Tag := i;

Device.OnClick := OnSelectDevice;

Devices.Add(Device);

end;

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

Filter.BaseFilter.Moniker:= SysDev.GetMoniker(TMenuItem(Sender).tag);

FilterGraph.Active := true;

with FilterGraph as ICaptureGraphBuilder2 do

RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter as IBaseFilter, SampleGrabber as IBaseFilter, VideoWindow as IbaseFilter);

FilterGraph.Play;

Для получения изображения из видеопотока используется компонент SampleGrabber. Имеющий процедуру SampleGrabber.GetBitmap(img).

Так же необходимо знать разрешение видео, ширину и высоту. Они находятся с помощью SampleGrabber: Реализация представлена в следующей процедуре:

procedure TVideoForm.GetResolution(var VWidth,VHeight:integer);

var

info:_AMMediaType;

begin

SampleGrabber.SampleGrabber.GetConnectedMediaType(info);

VWidth:=VIDEOINFOHEADER(info.pbFormat^).bmiHeader.biWidth;

VHeight:=VIDEOINFOHEADER(info.pbFormat^).bmiHeader.biHeight;

end;

5 Разработка контрольного примера (тестирование)

Рассмотрим работу программы с различными алгоритмами сегментации. Так как камеры имеют различный уровень шумов, то логично было бы выбрать в качестве входных данных видеофайл, не имеющий шумов(создан в программе 3DSMax), и видеофайл, записанный с помощью простой веб-камеры.

5.1 Входные данные - видеофайл без шумов.

1) Простой алгоритм

Рисунок 5.1 – результат работы простого алгоритма с видеофайлом без шума.

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

2) Нормальное распределение.

Рисунок 5.2 – Результат работы с нормальным распределением.

Данный алгоритм не подходит для сегментации видеопотока не имеющего шумов, так как теряется смысл построения нормального распределения. Так как если видеопоток не имеет шума, следовательно среднее квадратичное отклонение будет равно 0 для каждого пикселя построенного заднего плана. Если посмотреть на формулу 2.5, то видно, что в формуле знаменателем является как раз среднее квадратичное отклонение. Но мы получили, что оно в данном случае будет равно 0 для каждого пикселя, следовательно мы искусственно должны изменить его, чтобы не было ошибки деления на 0. Но тогда при оценке по формуле (2.5) некоторые пиксели могут быть ошибочно сегментированы в передний план.

5.2 Входные данные - видеофайл с шумом.

1) Простой алгоритм.

Рисунок 5.4 –Результат работы простого алгоритма с зашумленным видеофайлом.

Данный алгоритм справляется с поставленной задачей, но при большой чувствительности(40), при малой чувствительности(10) шум видеокамеры будет тоже сегментироваться в передний план.

2) Нормальное распределение.

Рисунок 5.4 – Результат работы алгоритма с нормальным распределением с зашумленным видеофайлом.

6 Руководство пользователя

После запуска программы необходимо выбрать источник данных в меню «Файл». Далее выбирается алгоритм работы в меню «Алгоритмы». Затем выбрать подходящий момент, чтобы на экране не было никаких движущихся объектов, и нажать на кнопку «Задать ». Программа начнет свое функционирование.

При появлении на экране движущихся объектов необходимо произвести настройку. Установить флажок «сегментация». Исходя из картинки, настроить чувствительность и уровень. В строке состояния следить за значением «Порог», и из своих соображений установить «Порог сохранения», при превышении которого будет фиксироваться движение.

Для остановки работы нажмите кнопку «Сбросить», после чего можно сменить алгоритм и продолжить работу.

Для того, чтобы все время не следить за видеозаписью можно установить «звуковое оповещение». При первом же появлении движения объекта на экране издаться звук.

Для сохранения кадров видео необходимо установить флажок «Сохранить в», указать путь сохранения, для этого следует нажать кнопку «Обзор…», указать имя файла.

Для сохранения лога, нажать «Сохранить время и дату».

Заключение

Из-за своей простоты и потому, что камера чаще всего зафиксирована, вычитание фона, вероятно, самая фундаментальная операция обработки изображений в сфере охранного видеонаблюдения. Для того чтобы выполнить вычитание фона, сначала мы должны "изучить" модель фона. Однажды изученная, эта модель фона сравнивается с текущим изображением, а затем известные части фона вычитаются. Объекты, оставшиеся после вычитания, предположительно будут являться новыми объектами переднего плана.

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

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

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