Программа адаптации распределенной структуры гибридной информационной системы идентификации объектов

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    604,44 Кб
  • Опубликовано:
    2017-01-19
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Программа адаптации распределенной структуры гибридной информационной системы идентификации объектов

Содержание

Введение

. Анализ существующих систем и подходов, обзор предметной области решения

.1 Обзор топологий существующих систем анализа объектов

.1.1 Система Macroscop

.1.2 Комплекс «Интеллектуальное видеонаблюдение Kipod»

.1.3 Системы видеонаблюдения VOCORD (Вокорд)

.1.4 Комплекс «Интеллектуальное видеонаблюдение ITV»

.2 Распределенная обработка информации

.2.1 Свойства систем распределенной обработки информации

.2.2 Структура распределенной системы

. Разработка технических требований и постановка задач квалификационной

работы

.1 Основные технические условия

.2 Требования к программно-аппаратному комплексу

. Разработка математической модели минимизации структуры

.1 Структура программы

.2 Описание и назначение модулей

.3 Описание выбранного метода - алгоритм поиска кратчайших покрытий

. Разработка программного обеспечения комплекса

.1 Построение контекстной диаграммы

.2 Разработка алгоритма минимизации структуры вычислительного комплекса

.3 Интерфейс программы

.4 Результат работы программы

. Разработка и оформление документации

.1 Программная реализация алгоритма минимизации

.2 Руководство программиста

.3 Тестирование программного обеспечения

Заключение

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

Приложение

Введение

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

Система технического зрения является средством слежения, наблюдения и основой для автоматического принятия решения в тех или иных ситуациях. Подобные системы активно применяются в качестве автоматических систем контроля и управления доступом, систем общей и технологической безопасности, для распознавания и оценки состояния различных объектов [1].

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

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

Идея минимизации и контроля транслируемого видео программными средствами представляется довольно привлекательной. Под термином “видеоанализ” подразумевается значительно больше, чем простое получение информации о параметрах движения: это анализ и распознавание типологии объектов (люди, автомобили, багаж, ручная кладь и пр.), а также применение заданных правил при контроле состояния/поведения объектов.

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

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

Непосредственно связана с выбором структуры распределённой вычислительной системы задача создания оптимальной топологии структуры сети.

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

Исходя из данной цели, в работе определены следующие задачи:

-       построение математической модели распределённой вычислительной системы обработки данных;

-       постановка и решение задачи оптимального выбора состава системы;

-       разработка и апробация работы программного комплекса.

 

1. Анализ существующих систем и подходов, обзор предметной области решения


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

 

.1 Обзор топологий существующих систем анализа объектов

 

В качестве примеров комплексов видеообработки, можно отметить следующие:

 

.1.1 Система Macroscop

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

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

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

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

Для увеличения функциональности системы видеонаблюдения к программе Macroscop подключаются интеллектуальные функции видеоанализа:

-       «суперпоиск» - интерактивный поиск и перехват объектов;

-       трекинг - отслеживание движущихся объектов;

-       обнаружение лиц;

-       распознавание лиц;

-       тепловая карта интенсивности движения;

-       распознавание автомобильных номеров;

-       подсчет посетителей;

-       подсчет людей в скоплениях;

-       подсчет людей в очереди;

-       детектор оставленных предметов.

Типы лицензий программного обеспечения Macroscop:ML. Программное обеспечение для создания небольшой системы IP-видеонаблюдения, содержащей до 20 IP-камер. Позволяет построить систему, содержащую 1 сервер и 2 рабочих места мониторинга. Версия ML не поддерживает работу интеллектуальных модулей, но при необходимости может быть расширена до версий LS или ST.LS. Версия-конструктор для построения систем IP-видеонаблюдения, содержащих до 400 IP-камер. Позволяет объединить в единую систему до 5 серверов, до 10 рабочих мест мониторинга, и подключить по выбору интеллектуальные модули (подсчета посетителей, обнаружения лиц, интерактивного поиска и перехвата объектов, трекинга, распознавания лиц, распознавания автономеров, контроля кассовых операций, обработки аудиопотоков, управления PTZ). Все модули идут за дополнительную плату. При необходимости может быть расширена до версии ST.ST. Самая мощная и функциональная версия программного обеспечения Macroscop. Позволяет построить систему IP-видеонаблюдения, содержащую неограниченное количество IP-камер, неограниченное количество серверов и рабочих мест. В версию уже включены модули обнаружения лиц, интерактивного поиска и «перехвата» похожих объектов, трекинга. За дополнительную плату возможно подключение других интеллектуальных модулей: подсчета посетителей, распознавания лиц, распознавания автономеров, контроля кассовых операций, обработки аудиопотоков, управления PTZ [4].

 

.1.2 Комплекс «Интеллектуальное видеонаблюдение Kipod»

Kipod - интеллектуальная система видеонаблюдения на основе компьютерного зрения. Kipod создан специально для приложений видеоаналитики <#"897046.files/image001.gif">

Рисунок 1.1 - Распределенная система

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

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

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

Еще одним примером служит служба World Wide Web(WWW). Web предоставляет простой, целостный единообразный стандарт распределенных документов. Для того, чтобы отобразить на экране документ, пользователь должен лишь нажать на ссылку. Вслед за этим документ появляется на мониторе. Самому пользователю нет нужды знать, с какого сервера происходит доставка документа, достаточно лишь информации о том, где он расположен. Публикация документа также крайне проста: достаточно задать ему уникальное имя соответствующее форме унифицированного указателя ресурса (Uniform Resource Locator, URL), который ссылается на локальный файл содержащим нужные данные. Если бы World Wide Web представлялась своим пользователям огромной централизованной системой документооборота, то она также могла бы считаться распределенной системой. Очевидно, что документы физически хранятся в различных местах и распределены на разных серверах.

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

 

2. Разработка технических требований и постановка задач квалификационной работы

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

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

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

Использование видеоаналитики позволяет выполнить предобработку информации к виду, в котором она может быть использована другими анализаторами (экспертные системы, системы поддержки принятия решений, имитационное моделирование и т.д.).

Прикладное программное обеспечение (ПО) можно рассматривать, как соединение трех элементов, называемых слоями (уровнями):

) слой (уровень) логики (алгоритмов) представления, иначе называемый презентационным слоем;

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

) слой (уровень) логики доступа к данным, или слой управления ресурсами.

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

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

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

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

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

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

2.1 Основные технические условия

В настоящее время термин обработка изображений указывает на такую его обработку, в результате которой вновь получается изображение. Сказанному эквивалентен англоязычный термин Image Processing. Иногда указанную обработку изображений называют предварительной обработкой.

К примеру, задачи включающие в себя необходимость предварительной обработки графических данных включают в себя следующее: шумоподавление (низкочастотная фильтрация); регулировку диапазона яркостей; исправление имеющихся геометрических искажений; преобразование гистограмм; высокочастотная и нелинейная фильтрация; подчеркивание (выделение) перепадов яркостей и границ; компенсация искажений; и т.д. [3].

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

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

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

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

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

Рисунок 2.1. Структура распределенного децентрализованного комплекса

.2 Требования к программному комплексу

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

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

Рисунок 2.2 - Схема адаптивной системы управления информацией в составе информационно-измерительного комплекса

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

На рисунке 2.3 представлена предлагаемая упрощенная структура комплекса, в основе которого содержится работа с входящей информацией. Комплекс состоит из распределенной системы конечного числа элементов измерительных узлов (ИзУ), аккумулирующих информацию средствами чувствительных элементов (датчики) с конечного числа объектов наблюдения (О).

Узлы осуществляют преобразование сигналов датчиков и формируют потоковый контент, например, видеопоток, в реальном времени, передаваемый по информационным каналам. Такие узлы могут быть географически разнесены на значительные расстояния. Однако с использованием коммуникационных средств связи, например, локальной сети или Интернет, данные стекаются в адаптивную систему управления потоковой информацией (АдСУПИ) [13]. Эта система осуществляет окончательное преобразование массивов данных, их анализ и может содержать блок функций экспертной системы, чтобы осуществлять поддержку принятия решений, например, для задач технической диагностики.

Рисунок 2.3 - Схема адаптивной системы сбора и анализа информации

 

3. Разработка математической модели минимизации структуры

.1 Структура программы

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

Функциональную структуру программы можно представить в виде схемы взаимодействия модулей, представленных на рисунке 3.1:





Рисунок 3.1 - Функциональная структура программы

.2 Описание и назначение модулей

Описание и назначение модулей программы представлено в таблице 3.1.

Таблица 3.1 - Описание модулей программы

Модули

Название модуля

Назначение модуля

Модуль А1

Модуль ввода параметров матрицы

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

Модуль А2

Модуль минимизации

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

Модуль А3

Модуль вывода результатов

Служит для вывода итоговых результатов обработки

.3 Описание выбранного метода - алгоритм поиска кратчайших покрытий

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

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

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

Говорят, что i-я строка покрывает j-й столбец, если на их пересечении стоит единица, то есть =1. Причем каждая строка обязательно покрывает некоторое подмножество столбцов, а каждый столбец покрывается хотя бы одной строкой.

Подмножество строк матрицы B, в совокупности покрывающее все ее столбцы, образует строчное покрытие этой матрицы.

Подмножество столбцов матрицы B, в совокупности покрывающее все ее строки, образует столбцовое покрытие этой матрицы.

Покрытие, содержащее минимальное число строк (столбцов) матрицы B, называется кратчайшим покрытием матрицы B:

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

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

. все столбцы, покрываемые этой строкой, из матрицы удаляем.

Действия продолжаем до тех пор, пока не удалится вся матрица. Кратчайшее строчное покрытие матрицы В:

. столбец 6 содержит минимальное число единиц - 1;

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

. удаляются столбцы 3, 5, 6.

Рисунок 3.2 - Матрица B отношения

Получаем матрицу:

Рисунок 3.3 - Матрица B отношения

Затем выполним с матрицей В аналогичные действия:

.        столбец 1 (крайний слева) содержит только две единицы;

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

.        удаляем столбцы 1 и 2;

.        остается лишь один столбец матрицы - 4;

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

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

Алгоритм определения столбцового покрытия методом Патрика:

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

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

. все строки, покрываемые полученным столбцом, удаляем.

Эти операции повторяются, покуда не окажется удаленной вся матрица. Результатом получаем {3, 4} - столбцовое покрытие рассматриваемой матрицы.

 

4. Разработка программного обеспечения комплекса

.1 Построение контекстной диаграммы

Для визуализации требований к информационной системе зачастую используется графическое моделирование. Разработка модели производилась с использованием программы ALLFusiona Process Modeler (Computer Associates BPwin), в нотациях IDEF0 (SADT - Structured Analysis and Design Technique) и IDEF3. Визуальное представление дополнено текстовым описанием.

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

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

-       ограничение сложности, по этому принципу число блоков, представленных на диаграмме, должно быть в диапазоне от двух до шести, т.н. условие удобочитаемости;

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

Контекстная диаграмма представлена на рисунке 4.1.

Рисунок 4.1 - Контекстная диаграмма программы адаптации распределенной структуры информационной системы идентификации объектов

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

Процесс проектирования комплекса, представлен на рисунке 4.2, состоит из трех этапов:

.        выделение объекта;

.        выбор сервера для обработки;

.        представление обработанной информации.

Рисунок 4.2 - Диаграмма декомпозиции первого уровня

Этап «Выбор сервера для обработки», представлен на рисунке 4.3, разбивается на четыре функциональных блока:

.        информация поступает на обработку;

.        выбор сервера;

.        анализ степени загруженности сервера;

.        сервер удовлетворяет требованиям.

Рисунок 4.3 - Диаграмма декомпозиции второго уровня

4.2 Разработка алгоритма программного обеспечения минимизации структуры вычислительного комплекса

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

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

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

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

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

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

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

Алгоритм нахождения строчного покрытия методом Патрика реализует эффективный способ нахождения малой величины покрытия булевой матрицы (разложение по минимальному столбцу и минимальной строке) (рисунок 4.4-4.6).

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

Рисунок 4.5 - Продолжение блок-схемы алгоритма метода Патрика

Рисунок 4.6 - Продолжение блок-схемы алгоритма метода Патрика

4.3 Интерфейс программы

.exe - откомпилированная и отлаженная программа. При запуске отображается окно с основной формой программы.

Рисунок 4.7 - Вид программы и задание параметров заполнения

При задании числа строк и столбцов матрицы, а также выборе вероятности появления 1, т.е. предполагается заполнение по считанным данным состояния обработчиков видео контента - видеосерверов. После выбора режима «Генерировать» появляется окно с матрицей. По умолчанию белый цвет элемента соответствует его нулевому значению, а элемент, отмеченный знаком (*), соответствует единице.

Рисунок 4.8 - Матрица, сгенерированная программой

.4 Результат работы программы

Тестирование - это важная часть разработки. Оно проводится для выявления дефектов, возникновения логических ошибок во время работы, определения несоответствия между реальным поведением реализованных функций и ожидаемым поведением в соответствии с заложенными требованиями [15].

Для проверки работы программы зададим матрицу размером 7 на 7. При нажатии кнопки «Генерировать» на экране мы увидим сформированную матрицу. Матрица А имеет вид:

Рисунок 4.9 - Матрица А

Найдем кратчайшее строчное покрытие:

1. столбец 3 содержит минимальное число единиц - 1;

. строка а является строкой с максимальным числом единиц - заносится в покрытие и удаляется из матрицы;

. удаляются столбцы 1, 2, 3, 4, 5.

4. продолжаем работу с матрицей :


Столбец 6 содержит меньшее число единиц, строка в заносится в покрытие и удаляется из матрицы. Таким образом получаем строчное покрытие {а, в}.

Определим кратчайшее столбцовое покрытие:

1.      строки б и е имеют наименьшее количество единиц, выберем строку б;

.        находим столбец с наибольшим покрывающим числом. Под это условие подходит и 2, и 6 столбец. Выбираем 2 - заносим в покрытие;

.        cтроки а, б и в, покрывающие столбец 2, удаляются из матрицы;

4.      продолжаем работу с матрицей :


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

Таким образом, получаем столбцовое покрытие {1, 2, 7} проверяемой матрицы.

Результат сходится с итогом, полученным программным методом.

Рисунок 4.10 - Программно построенные покрытия

 

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

 

5. Разработка и оформление документации

 

.1      Программная реализация алгоритма минимизации


В качестве средства программирования выбрана среда разработки Microsoft Visual Studio, язык программирования C++, графическая оболочка приложения Windows Forms.++ широко используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования. Синтаксис C++ унаследован от языка C. Язык программирования C++ - это универсальный язык программирования, который позволяет разрабатывать программы в соответствии с разными парадигмами: процедурным программированием, объектно-ориентированным, параметрическим.

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

5.2    Руководство программиста


Для того, чтобы программист смог внести какие-либо изменения в программу, ему необходимо открыть файл проекта. Для этого достаточно выполнить двойной клик по файлу MatrixPatrika.sln или открыть Visual Studio и выбрать этот файл через открытие проекта. Проект программы представлен на рисунке 5.1.

Рисунок 5.1 - Проект программы

Для навигации по проекту используется окно Solution Explorer, которое расположено слева. Исходный код программы находится в файлах cpp и h, ресурсы программы, такие как иконки расположены в директории Resource Files. Внешний вид формы, а также логика ее работы реализована в файле Form1.h.

После изменений нужно сохранить программу, заново скомпилировать, запустить и желательно протестировать.

5.3    Тестирование программного обеспечения


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

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

Таблица 5.1 - Виды тестирования программного обеспечения

Модульное тестирование

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

Исследовательское тестирование

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

Интеграционное тестирование

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

Функциональное тестирование

предполагает проверку конкретных требований к ПО и проводится после добавление к системе новых функций.

Нагрузочное тестирование

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

Регрессионное тестирование

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

Комплексное тестирование

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

Приемочное тестирование

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


Для разработчика программного обеспечения в VisualStudio предоставлена возможность создавать модульные и нагрузочные тесты, а также тесты пользовательского интерфейса. В VisualStudio имеются следующие шаблоны тестовых проектов [16 <http://www.intuit.ru/studies/courses/4806/1054/literature>]:

-       проект модульного теста, который позволяет создавать модульные тесты в процессе разработки;

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

-       проект с закодированными тестами пользовательского интерфейса.

Инструментарием тестировщика в VisualStudio является Microsoft Test Manager (MTM). MTM предназначен для управления жизненным циклом тестирования программного обеспечения, включает в себя планирование, мониторинг и тестирование. MTM интегрирован с Team Foundation Server. С помощью Microsoft Test Manager можно подготовить план тестирования, управление самим тестированием. При создании плана тестирования в него добавляются наборы тестов, тестовые случаи и конфигурации, необходимые для тестирования. Конфигурации используются для установления среды, в которой будут исполняться наборы тестов. MTM позволяет выполнять автоматические и ручные тесты, а также исследовательские тесты. Ошибки, выявленные в процессе тестирования, фиксируются для их устранения. При внесении изменений в код программной системы возникает необходимость в регрессионном тестировании, причем MTM автоматически формирует план регрессионного тестирования, выявляя какие тесты должны быть повторно выполнены.

Для тестировщиков и разработчиков программного обеспечения VisualStudio включает диспетчер виртуальной среды Lab Management. Инструментарий тестирования LabManagement позволяет создать инфраструктуру, которая максимально близко имитирует реальную среду планируемого использования программного продукта. Такие среды могут использоваться для выполнения автоматических построений, автоматизации тестов и выполнения разработанного кода.

Заключение

В ВКР решены задачи построения математической модели распределённой вычислительной системы обработки данных; постановка и решение задачи оптимального выбора состава системы; разработки программного комплекса минимизирующего загрузку отдельных узлов с использованием заданных критериев.

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

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

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

1.      Официальный сайт компании DSSL [Электронный ресурс]: офиц. сайт. - Режим доступа: www.dssl.ru <http://www.dssl.ru>

.        Техническое зрение в системах управления 2011: сборник трудов научно-технической конференции / под ред. Р.Р. Назирова. - Москва: Механика, управление и информатика, 2012. - 236 с.

.        Яншин, В. В. Анализ и обработка изображений: принципы и алгоритмы/ В. В. Яншин. - Москва: Машиностроение, 1994. - 112 с.

.        Программа для IP-камер Macrosop [Электронный ресурс]: офиц. сайт. - Режим доступа: <http://macroscop.com>.

.        Синезис видеоаналитика [Электронный ресурс]: офиц. сайт. - Режим доступа: <http://synesis.ru>.

.        Вокорд. Системы видеонаблюдения [Электронный ресурс]: офиц. сайт. - Режим доступа: <http://www.vocord.ru>.

.        Системы безопасности и видеонаблюдения [Электронный ресурс]: офиц. сайт. - Режим доступа: <http://www.itv.ru>.

.        Храпский, С.Ф. Распределенная обработка информации/ С.Ф. Храпский. - Омск: Омский государственный институт сервиса, 2006. - 108 с.

.        Габалин, А.В. Вопросы оптимизации структуры распределенной обработки информации / А.В. Габалин // Прикладная информатика. -2007. - Выпуск 6(12) - С 129.

.        Таненбаум, Э. Распределенные системы. Принципы и парадигмы / Э. Таненбаум, М. Ван-Стеен - Санкт-Петербург: Питер, 2003. - 877 с.

.        Радченко, Г. И. Распределенные вычислительные системы [Электронный ресурс]: учеб. пособие / Г. И. Радченко - Челябинск: Фотохудожник, 2012. - 184 с. - Режим доступа: <http://glebradchenko.ru/doc>.

.        Писаревский, Н. Системы технического зрения / А.Н. Писаревский, Ф. Чернявский, Г. К. Афанасьев - Санкт-Петербург: Машиностроение, 2008. - 424 с.

.        Лачугин, Д.В. Проектирование программного комплекса адаптивной системы управления, сбора и анализа потоковых данных / А.А. Большаков, Д.В. Лачугин, В.В. Лобанов // Программная инженерия, 2015. - No 2. - С. 13-22.

.        Цапенко, М.П. Измерительные информационные системы: Структуры и алгоритмы, системотехническое проектирование.: Учеб. пособие для вузов / М.П. Цапенко. - М.: Энергоатомиздат, 1985. - 438 с.

.        Национальный открытый университет [Электронный ресурс]: офиц. сайт. - Режим доступа: <http://www.intuit.ru>

.        «MSDN» - информационный сервис для разработчиков [Электронный ресурс]: офиц. сайт. - Режим доступа: <https://msdn.microsoft.com>

.        Методические рекомендации по оформлению выпускных квалификационных работ, курсовых проектов/работ для студентов очной, очно - заочной (вечерней) и заочной форм обучения [Электронный ресурс] Вып. 4/ сост.: Тритенко А. Н., Сафонова О. В., Дурягина Н. В. - Вологда:, 2016. - 120 с.

Приложение

Листинг программы

BoolMatrix.h

#pragma onceBoolMatrix

{:(int cols, int rows, float ver);

~BoolMatrix();cols;//количество столбцовrows;//количество строк**matrix;//исходная матрица*colPokr;//массив покрытия по столбцам*rowPokr;//массив покрытия по строкам:

//функции нахождения покрытий

//вызываются рекурсивно

//cols, rows - размеры поданной матрицы

//matrix - матрица для обработки, на первом шаге идентична исходной, дальше становится меньше

//names - массив чисел с номерами строк(столбцов) для добавления в покрытиеcalcWithRows(int cols, int rows, bool **matrix, int *names);calcWithCols(int cols, int rows, bool **matrix, int *names);

};

BoolMatrix.cpp

#include "stdafx.h"

#include "BoolMatrix.h"

#include <stdlib.h>::BoolMatrix(int cols, int rows, float ver)

{>cols = cols;>rows = rows;

//создаем исходную матрицу= new bool *[rows];

//создаем матрицы для преобразований** matrix1 = new bool *[rows];** matrix2 = new bool *[rows];

//заполняем матрицу(int i = 0; i < rows; i++)

{

//создаем строки у матрицы[i] = new bool[cols];[i] = new bool[cols];[i] = new bool[cols];

//заполняем элементы случайными значениями(int j = 0; j < cols; j++)

{[i][j] = (float)rand() / (float)RAND_MAX > (1-ver) ? true: false;[i][j] = matrix[i][j];[i][j] = matrix[i][j];

}

}

//создаем массивы для покрытий= new bool[cols];= new bool[rows];(int i = 0; i < cols; i++)[i] = false;(int i = 0; i < rows; i++)[i] = false;

//массив для номеров строк(столбцов), нужен чтобы остались оригинальные номера после уменьшения размера матрцы*names = new int[rows];(int i = 0; i < rows; i++)[i] = i;

//находим строчное покрытие(cols, rows, matrix1, names);[] names;(int i = 0; i < rows; i++)[] matrix1[i];matrix1;= new int[cols];(int i = 0; i < cols; i++)[i] = i;

//находим столбцовое покрытие(cols, rows, matrix2, names);[] names;(int i = 0; i < rows; i++)[] matrix2[i];matrix2;

}BoolMatrix::calcWithRows(int cols, int rows, bool **matrix, int *names)

{min = -1;ind = 0;

//ищем столбец с минимальным кол-вом элементов(int i = 0; i < cols; i++)

{cnt = 0;

//считаем кол-во эл в столбце(int j = 0; j < rows; j++)

{(matrix[j][i])++;

}(cnt < min || min == -1)

{= cnt;= i;

}

}

//ищем строку из найденного столбца с максимальным количеством элементовmax = -1;indRow = 0;(int i = 0; i < rows; i++)

{

//если строка не покрывается найденным столбцом, пропускаем(!matrix[i][ind]);cnt = 0;(int j = 0; j < cols; j++)

{(matrix[i][j])++;

}(cnt > max || max == -1)

{= cnt;= i;

}

}

//добавляем в покрытие[ names[indRow] ] = true;

//удаляем столбцы из покрытияx = 0;(int i = 0; i < cols; i++)

{(matrix[indRow][i]);

(int j = 0; j < rows; j++)[j][x] = matrix[j][i];++;

}

//удаляем строку из покрытияy = 0;(int i = 0; i < rows; i++)

{(i == indRow);[y] = names[i];(int j = 0; j < cols; j++)[y][j] = matrix[i][j];++;

}

//новые размеры матрицы= x;;

//если размеры больше 0, следующий шаг(x != 0 && rows!=0)(cols, rows, matrix, names);

}BoolMatrix::calcWithCols(int cols, int rows, bool **matrix, int *names)

{min = -1;ind = 0;

//ищем строку с минимальным кол-вом элементов(int i = 0; i < rows; i++)

{cnt = 0;(int j = 0; j < cols; j++)

{(matrix[i][j])++;

}(cnt < min || min == -1)

{= cnt;= i;

}

}

//ищем столбец из покрытия найденной строки с максимальным кол-вом элементовmax = -1;indCol = 0;(int i = 0; i < cols; i++)

{(!matrix[ind][i]);cnt = 0;(int j = 0; j < rows; j++)

{(matrix[j][i])++;

}(cnt > max || max == -1)

{= cnt;= i;

}

//добавляем в покрытие[names[indCol]] = true;x = 0;

//удаялем строки из покрытия(int i = 0; i < rows; i++)

{(matrix[i][indCol]);

for (int j = 0; j < cols; j++)

matrix[x][j] = matrix[i][j];++;

}

//удаляем стобецy = 0;(int i = 0; i < cols; i++)

{(i == indCol);[y] = names[i];(int j = 0; j < rows; j++)[j][y] = matrix[j][i];++;

}

// новые размеры матрицы= x;;

//если размеры больше 0, следующий шаг(x != 0 && cols != 0)(cols, rows, matrix, names);

}::~BoolMatrix()

{(int i = 0; i < rows; i++)[] matrix[i];matrix;

}

Form1.h

#pragma once

#include "BoolMatrix.h"

#include "ResultForm.h"WindowsForms {namespace System;namespace System::ComponentModel;namespace System::Collections;namespace System::Windows::Forms;namespace System::Data;namespace System::Drawing;namespace MatrixZacrevskogo;

/// <summary>

/// Summary for Form1

///

/// WARNING: If you change the name of this class, you will need to change the

/// 'Resource File Name' property for the managed resource compiler tool

/// associated with all.resx files this class depends on. Otherwise,

/// the designers will not be able to interact properly with localized

/// resources associated with this form.

/// </summary>ref class Form1: public System::Windows::Forms::Form

{:(void)

{();

//

//TODO: Add the constructor code here

//

}:

/// <summary>

/// Clean up any resources being used.

/// </summary>

~Form1()

{(components)

{components;

}

}: System::Windows::Forms::Label^ label1;:: System::Windows::Forms::NumericUpDown^ numericUpDown1;: System::Windows::Forms::NumericUpDown^ numericUpDown2;: System::Windows::Forms::Label^ label2;: System::Windows::Forms::NumericUpDown^ numericUpDown3;: System::Windows::Forms::Label^ label3;: System::Windows::Forms::Button^ button1;: System::Windows::Forms::Panel^ panel1;:

/// <summary>

/// Required designer variable.

/// </summary>::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>InitializeComponent(void)

{>label1 = (gcnew System::Windows::Forms::Label());>numericUpDown1 = (gcnew System::Windows::Forms::NumericUpDown());>numericUpDown2 = (gcnew System::Windows::Forms::NumericUpDown());>label2 = (gcnew System::Windows::Forms::Label());>numericUpDown3 = (gcnew System::Windows::Forms::NumericUpDown());>label3 = (gcnew System::Windows::Forms::Label());>button1 = (gcnew System::Windows::Forms::Button());>panel1 = (gcnew System::Windows::Forms::Panel());

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->numericUpDown1))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->numericUpDown2))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->numericUpDown3))->BeginInit();>SuspendLayout();

//

// label1

//>label1->AutoSize = true;>label1->Location = System::Drawing::Point(13, 13);>label1->Name = L"label1";>label1->Size = System::Drawing::Size(51, 13);>label1->TabIndex = 0;>label1->Text = L"Столбцы";

//

// numericUpDown1

//>numericUpDown1->Location = System::Drawing::Point(70, 11);>numericUpDown1->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 2, 0, 0, 0 });>numericUpDown1->Name = L"numericUpDown1";>numericUpDown1->Size = System::Drawing::Size(55, 20);>numericUpDown1->TabIndex = 1;>numericUpDown1->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) { 10, 0, 0, 0 });

//

// numericUpDown2

//>numericUpDown2->Location = System::Drawing::Point(180, 12);>numericUpDown2->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 2, 0, 0, 0 });>numericUpDown2->Name = L"numericUpDown2";>numericUpDown2->Size = System::Drawing::Size(55, 20);>numericUpDown2->TabIndex = 3;>numericUpDown2->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) { 10, 0, 0, 0 });

//

// label2

//>label2->AutoSize = true;>label2->Location = System::Drawing::Point(131, 14);>label2->Name = L"label2";>label2->Size = System::Drawing::Size(43, 13);>label2->TabIndex = 2;>label2->Text = L"Строки";

//

// numericUpDown3

//>numericUpDown3->DecimalPlaces = 2;>numericUpDown3->Increment = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1, 0, 0, 131072 });>numericUpDown3->Location = System::Drawing::Point(390, 12);>numericUpDown3->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1, 0, 0, 0 });>numericUpDown3->Name = L"numericUpDown3";>numericUpDown3->RightToLeft = System::Windows::Forms::RightToLeft::No;>numericUpDown3->Size = System::Drawing::Size(55, 20);>numericUpDown3->TabIndex = 5;>numericUpDown3->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) { 4, 0, 0, 65536 });

//

// label3

//>label3->AutoSize = true;>label3->Location = System::Drawing::Point(250, 16);>label3->Name = L"label3";>label3->Size = System::Drawing::Size(138, 13);>label3->TabIndex = 4;>label3->Text = L"Вероятность появления 1";

//

// button1

//>button1->Location = System::Drawing::Point(452, 10);>button1->Name = L"button1";>button1->Size = System::Drawing::Size(96, 23);>button1->TabIndex = 6;>button1->Text = L"Генерировать";>button1->UseVisualStyleBackColor = true;>button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);

//

// panel1

//>panel1->Anchor = static_cast<System::Windows::Forms::AnchorStyles>((((System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Bottom)

| System::Windows::Forms::AnchorStyles::Left)

| System::Windows::Forms::AnchorStyles::Right));>panel1->Location = System::Drawing::Point(16, 39);>panel1->Name = L"panel1";>panel1->Size = System::Drawing::Size(533, 312);>panel1->TabIndex = 7;>panel1->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &Form1::panel1_Paint);

//

// Form1

//>AutoScaleDimensions = System::Drawing::SizeF(6, 13);>AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;>ClientSize = System::Drawing::Size(561, 363);>Controls->Add(this->panel1);>Controls->Add(this->button1);>Controls->Add(this->numericUpDown3);>Controls->Add(this->label3);>Controls->Add(this->numericUpDown2);>Controls->Add(this->label2);>Controls->Add(this->numericUpDown1);>Controls->Add(this->label1);>Name = L"Form1";>Text = L"Алгоритм поиска кратчайших покрытий методом Патрика";>Resize += gcnew System::EventHandler(this, &Form1::Form1_Resize);

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->numericUpDown1))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->numericUpDown2))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->numericUpDown3))->EndInit();>ResumeLayout(false);>PerformLayout();

}

#pragma endregion*bMatrix=0;: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {cols = (int)numericUpDown1->Value;rows = (int)numericUpDown2->Value;ver = (float)numericUpDown3->Value;

//создаем класс с матрицей и покрытиями= new BoolMatrix(cols, rows, ver);

//обновляем изображение->Invalidate();^form = gcnew ResultForm(bMatrix);>Show();

}: System::Void panel1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {(!bMatrix);

//находим какой ширины и высоты будут клетки, если растянуть на все полеwidRect = (panel1->Width -1 )/ (bMatrix->cols + 2);heiRect = (panel1->Height - 1) / (bMatrix->rows + 2);

//берем минимальное значение, чтобы все вместилосьsize = widRect < heiRect ? widRect: heiRect;^gr = e->Graphics;::Drawing::Font^ drawFont =System::Drawing::Font("Arial", 16);::Drawing::StringFormat^ drawFormat =System::Drawing::StringFormat();::Drawing::Size^ textSize = TextRenderer::MeasureText("*", drawFont);

//выводим матрицу(int i = 0; i < bMatrix->rows; i++)

{(int j = 0; j < bMatrix->cols; j++)

{

//прямоугольник, куда будет выводитьсяreck = Rectangle(size * 2 + j*size, size * 2 + i*size, size, size);

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

//if (bMatrix->matrix[i][j])

//gr->FillRectangle(Brushes::Blue, reck);

//else

//gr->FillRectangle(Brushes::White, reck);

gr->FillRectangle(Brushes::White, reck);

if (bMatrix->matrix[i][j])>DrawString("*", drawFont, Brushes::Black,* 2 + j*size + size / 2 - textSize->Width/2,* 2 + i*size + size / 2 - textSize->Height / 2, drawFormat);

//рисуем рамку квадратика>DrawRectangle(Pens::DarkBlue, reck);

}

}

}: System::Void Form1_Resize(System::Object^ sender, System::EventArgs^ e) {->Invalidate();

}

};

}

ResultForm.h

#pragma once

#include "BoolMatrix.h"MatrixZacrevskogo {namespace System;namespace System::ComponentModel;namespace System::Collections;namespace System::Windows::Forms;namespace System::Data;namespace System::Drawing;

/// <summary>

/// Сводка для ResultForm

/// </summary>ref class ResultForm: public System::Windows::Forms::Form

{:(BoolMatrix *bMatrix)

{>bMatrix = bMatrix;();

//считаем количество столбцов в покрытииcnt = 0;(int i = 0; i < bMatrix->cols; i++)(bMatrix->colPokr[i])++;

//выводим>Text = "" + cnt;

//считаем количество строк в покрытии= 0;(int i = 0; i < bMatrix->rows; i++)(bMatrix->rowPokr[i])++;

//выводим>Text = "" + cnt;

}: System::Windows::Forms::Label^ label5;:: System::Windows::Forms::Label^ labelCols;: System::Windows::Forms::Label^ labelRows;: System::Windows::Forms::Label^ label4;: System::Windows::Forms::Panel^ panel1;:*bMatrix;

/// <summary>

/// Освободить все используемые ресурсы.

/// </summary>

~ResultForm()

{(components)

{components;

}

}:

/// <summary>

/// Требуется переменная конструктора.

/// </summary>::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code

/// <summary>

/// Обязательный метод для поддержки конструктора - не изменяйте

/// содержимое данного метода при помощи редактора кода.

/// </summary>InitializeComponent(void)

{>label5 = (gcnew System::Windows::Forms::Label());>labelCols = (gcnew System::Windows::Forms::Label());>labelRows = (gcnew System::Windows::Forms::Label());>label4 = (gcnew System::Windows::Forms::Label());>panel1 = (gcnew System::Windows::Forms::Panel());>SuspendLayout();

//

// label5

//>label5->AutoSize = true;>label5->Location = System::Drawing::Point(225, 9);>label5->Name = L"label5";>label5->Size = System::Drawing::Size(119, 13);>label5->TabIndex = 13;>label5->Text = L"Столбцовое покрытие";

//

// labelCols

//>labelCols->AutoSize = true;>labelCols->Location = System::Drawing::Point(350, 9);>labelCols->Name = L"labelCols";>labelCols->Size = System::Drawing::Size(13, 13);>labelCols->TabIndex = 15;>labelCols->Text = L"0";

//

// labelRows

//>labelRows->AutoSize = true;>labelRows->Location = System::Drawing::Point(22, 183);>labelRows->Name = L"labelRows";>labelRows->Size = System::Drawing::Size(13, 13);>labelRows->TabIndex = 14;>labelRows->Text = L"0";

//

// label4

//>label4->AutoSize = true;>label4->Location = System::Drawing::Point(12, 170);>label4->Name = L"label4";>label4->Size = System::Drawing::Size(106, 13);>label4->TabIndex = 12;>label4->Text = L"Строчное покрытие";

//

// panel1

//>panel1->Anchor = static_cast<System::Windows::Forms::AnchorStyles>((((System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Bottom)

| System::Windows::Forms::AnchorStyles::Left)

| System::Windows::Forms::AnchorStyles::Right));>panel1->Location = System::Drawing::Point(127, 39);>panel1->Name = L"panel1";>panel1->Size = System::Drawing::Size(421, 302);>panel1->TabIndex = 16;>panel1->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &ResultForm::ResultForm_Paint);>AutoScaleDimensions = System::Drawing::SizeF(6, 13);>AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;>ClientSize = System::Drawing::Size(560, 363);>Controls->Add(this->panel1);>Controls->Add(this->label5);>Controls->Add(this->labelCols);>Controls->Add(this->labelRows);>Controls->Add(this->label4);>Name = L"ResultForm";>Text = L"Результат";>ResumeLayout(false);>PerformLayout();

}

#pragma endregion: System::Void ResultForm_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {

//находим какой ширины и высоты будут клетки, если растянуть на все полеwidRect = (panel1->Width - 1) / (bMatrix->cols + 2);heiRect = (panel1->Height - 1) / (bMatrix->rows + 2);

//берем минимальное значение, чтобы все вместилосьsize = widRect < heiRect ? widRect: heiRect;^gr = e->Graphics;::Drawing::Font^ drawFont =System::Drawing::Font("Arial", 16);::Drawing::StringFormat^ drawFormat =System::Drawing::StringFormat();::Drawing::Size^ textSize = TextRenderer::MeasureText("*", drawFont);

//выводим строчное покрытие(int j = 0; j < bMatrix->cols; j++)

{reck = Rectangle(size * 2 + j*size, 0, size, size);

//if (bMatrix->colPokr[j])

//gr->FillRectangle(Brushes::Blue, reck);

//else

//gr->FillRectangle(Brushes::White, reck);>FillRectangle(Brushes::White, reck);(bMatrix->colPokr[j])>DrawString("*", drawFont, Brushes::Black,* 2 + j*size + size / 2 - textSize->Width / 2,

+ size / 2 - textSize->Height / 2, drawFormat);

//рисуем рамку квадратика>DrawRectangle(Pens::DarkBlue, reck);

}

//выводим столбцовое покрытие(int j = 0; j < bMatrix->rows; j++)

{reck = Rectangle(0, size * 2 + j*size, size, size);

//if (bMatrix->rowPokr[j])

//gr->FillRectangle(Brushes::Blue, reck);

//else

//gr->FillRectangle(Brushes::White, reck);>FillRectangle(Brushes::White, reck);(bMatrix->rowPokr[j])>DrawString("*", drawFont, Brushes::Black,

+ size / 2 - textSize->Width / 2,* 2 + j*size + size / 2 - textSize->Height / 2, drawFormat);

//рисуем рамку квадратика>DrawRectangle(Pens::DarkBlue, reck);

}

}

};

}

Похожие работы на - Программа адаптации распределенной структуры гибридной информационной системы идентификации объектов

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!