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

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

ГОУ ВПО Рыбинская государственная авиационная технологическая академия

имени П. А. Соловьёва

Факультет Радиоэлектроники и информатики

Кафедра Вычислительных систем

КУРСОВОЙ ПРОЕКТ

по дисциплине

Технология программирования

на тему

Сегментация изображения в видеопотоке

Пояснительная записка

Студент группы ВС2-08 Широкова Е.Н.

Руководитель канд. техн. наук, доцент Паламарь И. Н.

Нормоконтролер канд. техн. наук, доцент Паламарь И. Н.

Рыбинск 2011

Содержание

Содержание 4

Введение 8

2 Разработка математической модели системы 11

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

Класс TNRBackground наследует все поля, свойства и методы от предка, кроме поля Mask. Так как этот класс используется для описания заднего плана при нормальном распределении, то поле Mask будет представлять собой два двумерных массива, в одном будет храниться математическое ожидание, в другом – среднее квадратичное отклонение (формула 2.4). В нем поле delt тоже отвечает за точность e (формула 2.5). Конструктор и функция сравнения в этом классе будут перекрываться. В конструктор уже необходимо передавать первые n кадров, то есть массив, а для функции сравнения необходима другая реализация. 15

Так как обработка кадра довольно трудоемкий процесс, поэтому ее необходимо выполнять в отдельном потоке. Для вывода и обработки кадров используется класс TShowAnim типа TThread. 16

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

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

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

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

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

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

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

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

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

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

23

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

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

27

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

28

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

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

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

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

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

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

SysDev:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory); 29

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

if SysDev.CountFilters > 0 then 29

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

begin 29

Device := TMenuItem.Create(Devices); 29

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

Device.Tag := i; 29

Device.OnClick := OnSelectDevice; 29

Devices.Add(Device); 29

end; 29

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

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

FilterGraph.Active := true; 29

with FilterGraph as ICaptureGraphBuilder2 do 29

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

FilterGraph.Play; 29

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

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

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

var 30

info:_AMMediaType; 30

begin 30

SampleGrabber.SampleGrabber.GetConnectedMediaType(info); 30

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

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

end; 30

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

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

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

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

31

Заключение 36

Список использованных источников 38

Введение

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

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

Моя программа предназначена для отслеживания движущихся объектов в видеопотоке.

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

1 Анализ технического задания

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

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

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

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