Внимание! Studlandia не продает дипломы, аттестаты и иные документы об образовании. Наши специалисты оказывают услуги консультирования и помощи в написании студенческих работ: в сборе информации, ее обработке, структурировании и оформления работы в соответствии с ГОСТом. Все услуги на сайте предоставляются исключительно в рамках законодательства РФ.
Нужна индивидуальная работа?
Подберем литературу
Поможем справиться с любым заданием
Подготовим презентацию и речь
Оформим готовую работу
Узнать стоимость своей работы
Дарим 200 руб.
на первый
заказ

Дипломная работа на тему: Разработка подсистемы линейной сегментации в составе системы автоматизированного анализа

Купить за 600 руб.
Страниц
88
Размер файла
471.08 КБ
Просмотров
13
Покупок
0
Компьютерная графика и обработка изображений с помощью электронно-вычислительных машин в стоящее время являются одними из иболее важных аспектов использования ЭВМ во всех сферах человеческой

Введение

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

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

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

Оглавление

- Введение 7

- Разработка подсистемы линейной сегментации в составе системы автоматизированного анализа пространственной структуры изображений

- Обоснование целесообразности разработки системы

- Назначение системы

- Обоснование цели создания системы

- Назначение Подсистемы линейной сегментации

- Характеристика организационной и функциональной структуры

- Обоснование состава автоматизируемых задач

- Обоснование применения типовых и оригинальных решений

- Общая оценка экономической целесообразности создания подсистемы

- Основные требования к Подсистеме линейной сегментации

- Основные цели создания подсистемы

- Функциональное назначение подсистемы

- Требования к функциональной структуре подсистемы

- Требования к техническому обеспечению

- Требования к информационному обеспечению

- Требования к программному обеспечению

- Основные технические решения проекта подсистемы Линейная сегментация

- Решения по комплексу технических средств

- Описание организации информационной базы

- Разработка задачи поиск узлов

- Описание постановки задачи

- Характеристика задачи

- Входная информация

- Выходная информация

- Математическая постановка задачи

- Специальные требования к техническому обеспечению

- Описание алгоритма Поиск узлов

- Назначение и характеристика

- Используемая информация

- Результаты решения

- Алгоритм решения

- Условные обозначения

- Описание программы Поиск узлов

- Вводная часть

- Функциональное назначение

- Описание информации

- Используемые подпрограммы

- Описание логики

- Настройка программных средств

- Разработка задачи поиск сегментов

- Описание постановки задачи

- Характеристика задачи

- Входная информация

- Выходная информация

- Математическая постановка задачи

- Специальные требования к техническому обеспечению

- Описание алгоритма Поиск сегментов

- Назначение и характеристика

- Используемая информация

- Результаты решения

- Алгоритм решения

- Требования к контрольному примеру

- Условные обозначения

- Описание программы Поиск сегментов

- Вводная часть

- Функционально назначение

- Описание информации

- Используемые подпрограммы

- Описание логики

- Настройка программных средств

- Разработка задачи обработка и кодирование сегментов

- Описание постановки задачи

- Характеристика задачи

- Входная информация

- Выходная информация

- Математическая постановка задачи

- Специальные требования к техническому обеспечению

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

- Назначение и характеристика

- Используемая информация

- Результаты решения

- Алгоритм решения

- Требования к контрольному примеру

- Список условных обозначений

- Описание программы Обработка и кодирование сегментов

- Вводная часть

- Функциональное назначение

- Описание информации

- Используемые подпрограммы

- Описание логики

- Настройка программных средств

- Описание контрольного примера

- Назначение

- Исходные данные

- Результаты расчета

- Результаты испытания программы

- Организационно-экономическая часть

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

- Экологичность и безопасность проекта

- Актуальность безопасности труда

- Анализ опасных и вредных производственных факторов

- Техника безопасности при работе с компьютером

- Организация рабочего места оператора

- Расчет защитного заземления

- Требования к параметрам микроклимата

- Пожаробезопасность

- 6.8. Выводы 74

- Заключение 75

- Список литературы 77

- Приложение 1 руководство программиста

- Приложение 2 руководство оператора

- Приложение 3 текст программы

Заключение

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

Список литературы

1. Павлидис Т. Алгоритмы машинной графики и обработки изображений. - М.: Радио и связь, 1986. - 400с.

2. Дуда Р., Харт П. Распознавание образов и анализ сцен. - М.: Мир, 1976. - 512с.

3. Колмогоров А.Н., Фомин С.В. Элементы теории функций и функционального анализа. - М.: Наука, 1981. - 544с.

4. Бакут П.А., Колмогоров П.С. Сегментация изображений: Методы выделения границ областей // Зарубежная радиоэлектроника, 1987, № 10. - С. 25-46.

5. Бакут П.А., Колмогоров П.С., Варновицкий И.Э. Сегментация изображений: методы пороговой обработки // Зарубежная радиоэлектроника, 1988, № 4. - С. 6-24.

6. Быстрые алгоритмы в цифровой обработке изображений. - М.: Радио и связь, 1984. - 224с.

7. Вдовин А.М., Хаба Б.С., Мурынов А.И., Лялин В.Е. Исследование планарных элементов пространственной структуры изображений // Химическая физика и мезоскопия. Т.3, 2001, №2. - С.134-147.

8. Журавлев Ю.И., Гуревич И.Б. Распознавание образов и анализ изображений // Искусственный интеллект. Кн. 2. Модели и методы. - М.: Радио и связь, 1990. - 304с.

9. Прэтт У. Цифровая обработка изображений. - Кн. 1. - М.: Мир, 1982. - 312с. - Кн. 2. - М.: Мир, 1982. - 480с.

10. Розенфельд А., Дейвис Л.С. Сегментация и модели изображения // ТИИЭР, т. 67, 1979, № 5. - С. 71-81.

11. Толковый словарь по искусственному интеллекту / А. Н. Аверкин, М.Г. Гаазе-Рапопорт, Д.А. Поспелов. - М.: Радио и связь, 1992. - 256с.

12. Эйнджел Э. Интерактивная компьютерная графика. - М.: Вильямс, 2001. - 592с.

13. Murynov А.I., Levitskaya L.N., Shibaeva I.V. The model discretely - planimetry graphic structures оf the image graphic // Тез. докл. - Нижний Новгород: Изд-во Нижегородского госуниверситета, 2004. - С. 258.

14. Николаев Д.П. Алгоритмы цветовой сегментации, применимые в условиях сложного освещения сцены // Автореф. дисс. - М: Изд-во института по проблем передачи информации РАН, 2004

15. Радыгина И. И. Методические пособия для выполнения раздела "Организационно экономическая часть".- Ижевск: ИжГТУ, 2002.

16. Бычин В.Б., Малинин С.В. Нормирование труда: Учебник. - Москва: Издательство "Экзамен", 2002.

17. ГОСТ 12.0.002-80 Система стандартов безопасности труда. Термины и определения - М.: Издательство стандартов, 1984.

18. СанПиН 2.2.4.548-96 Гигиенические требования к микроклимату производственных помещений. -М.: Издательство стандартов, 1996.

19. ГОСТ 12.1.003-89 Система стандартов безопасности труда. Шум. Общие требования безопасности. -М.: Издательство стандартов, 1989.

20. ГОСТ 12.1.009-76 Система стандартов безопасности труда. Электробезопасность. -М.: Издательство стандартов, 1976.

21. ГОСТ 12.1.004-91 Система стандартов безопасности труда. Пожарная безопасность. Общие требования. -М.: Издательство стандартов, 1992.

22. СНиП 24-05-95 Правила устройства электроустановок. -М.: Издательство стандартов, 1995.

23. Сенилов М.А., Почерняев С. В., Килин И. В. Методические указания по дипломному проектированию. - Ижевск: ИжГТУ, 1998.

24. ГОСТ 19.701-90 ЕСПД. Схемы алгоритмов, программ, данных и систем. - М.: Издательство стандартов, 1991.

25. ГОСТ 19.504-79 ЕСПД. Руководство программиста. Требования к содержанию и оформлению. - М.: Издательство стандартов, 1979.

26. ГОСТ 19.505-79 ЕСПД. Руководство оператора. Требования к содержанию и оформлению. - М.: Издательство стандартов, 1979.

ПРИЛОЖЕНИЕ 1

РУКОВОДСТВО ПРОГРАММИСТА

П.1.1. Назначение программы

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

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

П.1.2. Условия применения программы

При работе с программой необходимо обеспечить выполнение следующих требований к комплексу технических средств:

- персональный компьютер IBM РС с процессором не ниже Pentium I;

- клавиатура;

- монитор;

- жесткий диск с объемом свободного пространства не менее 50 МБ;

- оперативная память объемом не менее 128 МБ.

Работа программы возможна только на ЭВМ, которые поддерживают 32-разрядные операционные системы семейства Windows, такие как Windows 95, Windows NТ или выше.

Программа реализована в среде программирования Borland С++ Builder 6.

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

Программа состоит из модулей, каждый из которых обращается к подпрограммам:

Модуль lineseg.cpp:

- actExitExecute - обработка запроса завершения работы программы;

- FormCreate - создание формы обработки изображения;

- actZoomInExecute - режим увеличения изображения;

- actZoomOutExecute - режим уменьшения изображения;

- actOpenFileExecute - открытие файла для обработки;

- actSaveFileExecute - сохранение файла;

- Image2MouseMove - обработка события движения указателя мыши при наведении на элементы изображения;

- Image2MouseDown - обработка события нажатия кнопки мыши при редаутировании изображения;

- actZoom1Execute - режим установки масштаба изображения 100%;

- actAnalyzeExecute - вызов основной функции обработки изображения;

- FormCanResize - изменение размера окна;

- actNewFileExecute - создание нового файла для обработки;

- actGridCheckExecute - изменение режима просмотра сетки;

- actLightCheckExecute - изменение режима подсветки структурных элементов изображения;

- actZoom10Execute - режим установки 10-кратного увеличения изображения;

- actSegLightCheckExecute - изменение режима подсветки сегментов линий;

- actLockViewExecute - изменение режима блокировки изображения;

- actAnalyzeNodeExecute - обработка узлов изображения ;

- actAnalyzeSegExecute - обработка сегментов изображения;

- FormCloseQuery - обработка запроса на закрытие окна;

- actOpenArrayExecute - открытие изображения из файла массива точек;

- actSaveArrayExecute - сохранение изображения в файл массива точек;

- actOptionsExecute - вызов окна настройки;

- actSaveCodeExecute - запись результата обработки изображения в файл;

- actSegCodeOutExecute - выполнение алгоритма формирования координат сегментов;

- ZoomTo -установка заданного масштаба изображения;

- DrawGrid - рисование сетки изображения;

- ShowInfo - отображение информации о текущем состоянии;

- NeigCount - определение количества соседних точек;

- VectMove - осуществление движения координат обработки изобржаения в заданном направлении;

- wlog - вывод информации в журнал вычислений;

- VectToStr - преобразование кода вектора направления в строку;

- ValidateView - обработка свойств доступности элементов панели управления;

- plDistance(x, y, x1, y1, x2, y2) - вычисление расстояние (минимального) от точки (x,y) до прямой, заданной точками (x1,y1) и (x2,y2)

StrToLen - выравнивание строки для образования формата определенной длины;

- NeigNode - рекурсивная обработка соседей точки на принадлежность узлу

- NeigLine - рекурсивная обраобтка соседей точки (x,y) на принадлежность сегменту

- GetLineVect - рекурсивная обработка кода сегмента линии;

- NodeCentre - вычисление значения центра узла;

- FillLine изменение принадлежности точек одного сегмента другому;

- CodeLine - формирование кода сегмента линии.

Модуль lsImgSize:

- btnCancelClick - обработка события отмены создания нового файла;

TfrmImgSize - конструктор диалога создания нового файла;

Модуль lsOptions:

- btnCancelClick - обработка события отмены изменения настроек программы;

- Label1MouseDown - обработка события изменения цвета сетки изображения;

- Label2MouseDown - обработка события изменения цвета подсветки линий изображения;

- Label3MouseDown - обработка события изменения цвета подсветки узлов изображения;

- Label4MouseDown - обработка события изменения шрифта окна журнала;

- Label5MouseDown - обработка события изменения шрифта окна результатов;

- TfrmOptions - конструктор диалога настройки программы;

П.1.3. Характеристики программы

Программа имеет следующие режимы работы:

- импорт/экспорт файлов изображений;

- просмотр и редактирование изображений;

- поиск узлов;

- поиск сегментов;

- кодирование сегментов;

- автоматическая обработка изображения.

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

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

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

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

Любой из режимов работы может быть выбран пользователем с выбором соответствующего пункта меню.

П.1.4. Обращение к программе

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

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

П.1.5. Входные и выходные данные

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

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

П.1.6. Сообщения

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

Таблица П.1.1

Сообщения, выдаваемые при работе программы и необходимые действия при их получении

Сообщение

Описание

Действия

Размер нового изображения

Программа предлагает выбрать размер вновь создаваемого изображения в точках

Ввести значение ширины и высоты изображения

Неверно указано число

Введенное число не соответствует заданному формату

Ввести корректное число

Выход ?

Запрос на подтверждение выхода из программы. Не сохраненные данные могут быть утеряны

Подтвердить или опровергнуть запрос на выход

Невозможно открыть файл

Произошла ошибка при попытке открыть указанный файл

Проверить наличие файла и доступа к нему

Невозможно сохранить файл

Произошла ошибка при попытке сохранить указанный файл

Проверить наличие доступа к указанному пути.

Файл уже существует. Перезаписать ?

Файл с именем, указанным для сохранения, уже существует

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

Настройка

Вызван диалог настройки программы

Выполнить необходимые действия по настройке, затем нажать кнопку "ОК" для сохранения изменений или кнопку "Отмена" для их отмены

Не выполнен поиск узлов

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

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

Не выполнен поиск сегментов

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

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

П.1.7. Настройка программы

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

ПРИЛОЖЕНИЕ 2

РУКОВОДСТВО ОПЕРАТОРА

П.2.1. Назначение программы

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

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

П.2.2. Условия применения программы

При работе с программой необходимо обеспечить выполнение следующих требований к комплексу технических средств:

- персональный компьютер IBM РС с процессором не ниже Pentium I;

- клавиатура;

- монитор;

- жесткий диск с объемом свободного пространства не менее 50 МБ;

- оперативная память объемом не менее 128 МБ.

Работа программы возможна только на ЭВМ, которые поддерживают 32-разрядные операционные системы семейства Windows, такие как Windows 95, Windows NТ или выше.

П.2.3. Пуск программы

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

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

П.2.4. Команды оператора

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

Ниже приведено описание пиктограмм с указанием в скобках "горячих клавиш":

- Создать новый файл (F2);

- Открыть BMP-файл (F3);

- Открыть массив точек из файла (Ctrl+F3);

- Сохранить BMP-файл (F4);

- Сохранить массив точек в файл (Ctrl+F4);

- Сохранить код линий в файл (Shift+F4);

- Выполнить полную обработку изображения (F9);

- Выполнить поиск узлов (F5);

- Выполнить поиск сегментов линий (F6);

- Выполнить кодирование сегментов линий(F7);

- Уменьшить масштаб изображения (Ctrl+=);

- Увеличить масштаб изображения (Ctrl+-);

- Установить масштаб изображения 100% (Ctrl+1);

- Установить 10-кратное увеличение изображения (Ctrl+0);

- Установить масштаб изображения по размерам окна (Ctrl+\);

- Вкл/Выкл сетку (Ctrl+G);

- Вкл/Выкл подсветку сегментов (Ctrl+J);

- Вкл/Выкл подсветку узлов пересечений (Ctrl+К);

- Вкл/Выкл блокировку изображения (Ctrl+L);

- Показать окно настройки программы (F10);

Окно программы представлено на рис. П.2.1.

Окно программы

Рис. П.2.1

Для открытия файла, содержащего входное изображение следует выбрать в меню "Файл" пункт "Открыть файл" или "Загрузить массив" для получения изображения из файла формата BMP или файла массива точек соответственно (рис. П.2.2). Далее в диалоге выбора файла следует выбрать необходимый файл или ввести его имя и нажать кнопку "Открыть". После этого файл будет загружен и из него будет сформирован массив точек исходного изображения.

Меню "Файл"

Рис. П.2.2

При просмотре изображения для изменения масштаба следует воспользоваться элементами подменю "Масштаб" меню "Вид" (рис. П.2.3).

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

Подменю "Масштаб" меню "Вид"

Рис. П.2.3

Режим редактирования изображения

Рис. П.2.4

Для создания нового изображения следует использовать в меню "Файл" пункт "Новый". При этом будет вызван диалог, позволяющий задать необходимые размеры нового изображения (рис. П.2.5).

Выбор размера нового изображения

Рис. П.2.5

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

- в режиме пошаговой обработки;

- в режиме полной обработки.

Доступ к режимам обработки изображения осуществляется с помощью пунктов меню "Обработка" (рис. П.2.6).

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

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

Меню "Обработка"

Рис. П.2.6

После выполнения обработки изображения ее результаты могут быть просмотрены на самом исходном изображении. Для этого следует воспользоваться пунктами-переключателями меню "Вид" (рис. П.2.7).

Пункт "Сетка" позволяет включить или выключить отображение сетки изображения при его увеличении.

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

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

Пункт "Заблокировать вид" позволяет зафиксировать выделенные элементы изображения, не изменяя подсветку при перемещении курсора мыши в области изображения.

Меню "Вид"

Рис. П.2.7

Пример подсветки узла приведен на рис. П.2.8

Подсветка узла

Рис. П.2.8

Пример подсветки сегмента приведен на рис. П.2.9

Подсветка сегмента

Рис. П.2.9

В результате окончательной обработки изображения в области "Результат обработки" будут выведены коды, предназначенные для последующей передачи в подсистему цепного кодирования (рис. П.2.10). Данные результаты могут быть сохранены в файл. Для этого следует использовать пункт "Сохранить код" в меню "Файл".

Результат кодирования сегментов

Рис. П.2.10

После работы с изображением исходный массив точек может быть сохранен в файл, для этого следует воспользоваться пунктами "Сохранить массив" или "Сохранить файл" в меню "Файл" для сохранения в файл массива точек или в файл формата BMP соответственно. При выборе этих пунктов будет вызван стандартный диалог для сохранения файла, где следует указать имя сохраняемого файла и нажать кнопку "Сохранить".

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

Выход из программы

Рис. П.2.11

Запрос на подтверждение выхода

Рис. П.2.12

П.2.5. Сообщения оператору

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

Таблица П.2.1

Сообщения, выдаваемые при работе программы и необходимые действия при их получении

Сообщение

Описание

Действия

Размер нового изображения

Программа предлагает выбрать размер вновь создаваемого изображения в точках

Ввести значение ширины и высоты изображения

Неверно указано число

Введенное число не соответствует заданному формату

Ввести корректное число

Выход ?

Запрос на подтверждение выхода из программы. Не сохраненные данные могут быть утеряны

Подтвердить или опровергнуть запрос на выход

Невозможно открыть файл

Произошла ошибка при попытке открыть указанный файл

Проверить наличие файла и доступа к нему

Невозможно сохранить файл

Произошла ошибка при попытке сохранить указанный файл

Проверить наличие доступа к указанному пути.

Файл уже существует. Перезаписать ?

Файл с именем, указанным для сохранения, уже существует

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

Настройка

Вызван диалог настройки программы

Выполнить необходимые действия по настройке, затем нажать кнопку "ОК" для сохранения изменений или кнопку "Отмена" для их отмены

Не выполнен поиск узлов

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

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

Не выполнен поиск сегментов

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

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

ПРИЛОЖЕНИЕ 3

ТЕКСТ ПРОГРАММЫ

П.3.1. Текст модуля lineseg.h

// plDistance вычисляет расстояние (минимальное) от точки (x,y)

// до прямой, заданной точками (x1,y1) и (x2,y2)

// StrToLen возвражает строку длины len

// заполняя пробелями недостающие символы в начале строки str

// NeigSeg обрабатывает соседей точки (x,y)

// на принадлежность узлу n

// является рекурсивной

// NeigLine обрабатывает соседей точки (x,y)

// на продолжение линии n

// является рекурсивной

// GetLineVect обрабатывает линию в код

// рекурсивная

// NodeCentre возвращает центр узла n (координаты узловой точки)

// FillLine присваивает линии n2 пикселы линии n1 (объединение двух линий)

// FindMatch возвращает точку, соответствующую точке x,y

// CodeLine добавляет в глобальную переменную linecode код для отрезка (x1,y1)-(x2,y2)

// GetLineVect2 обрабатывает линию в код

// рекурсивная

П.3.2. Текст модуля lineseg.cpp

TColor с0,с1,с2,с3,с4,c21,с5;

bool logs; // вести журнал вычислений

AnsiString linecode; // содержит код текущей линии

// apix[i][j][0] - массив точек

// apix[i][j][1] - массив линий, номер линии

// apix[i][j][2] - массив узлов, номер узла

// -1 - пиксел не обработан, 0 - нет точки, >0 - номер линии, кот. принадлежит точка

// apix[i][j][3] - массив врЕменных атрибутов

с0=TColor(RGB(0,0,0)); с1=TColor(RGB(255,255,255));

с2=TColor(RGB(0,255,0)); с3=TColor(RGB(0,0,255));

с4=TColor(RGB(255,0,0)); c21=TColor(RGB(255,255,0));

с5=TColor(RGB(200,200,200));

CanClose=MessageBox(Handle,"Выход ?", "ЛС", MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2)==ID_YES;

Image2->Canvas->Pen->Color=с5;

OpenDialog1->Title="Открыть изображение";

OpenDialog1->Filter="Файлы изображений (*.bmp)|*.bmp|Все файлы (*.*)|*.*";

sb1->SimplePanel=true; sb1->SimpleText="Открытие файла ...";

apix[i][j][0]=Image1->Canvas->Pixels[i][j]==с0?1:0;

SaveDialog1->Filter="Файлы изображений (*.bmp)|*.bmp|Все файлы (*.*)|*.*";

SaveDialog1->Title="Сохранить изображение";

if(Image1->Canvas->Pixels[ix][iy]!=с0)

Image1->Canvas->Pixels[ix][iy]=с0;

if(Image1->Canvas->Pixels[ix][iy]!=с1)

Image1->Canvas->Pixels[ix][iy]=с1;

TPoint р=NodeCentre(selnode);

Image1->Canvas->Pen->Color=с0;

Image1->Canvas->Pixels[ix][iy]=с0;

Image1->Canvas->Pen->Color=с1;

Image1->Canvas->Pixels[ix][iy]=с1;

if(apix[ix][iy][1]>0) // есть линия

Image2->Canvas->Pen->Color=с2;

for(int i=0;i<w;i++) // выделяем линию

if(apix[i][j][1]==selline) // линия

if(NeigCount(i,j)==1) // начало линии

if(apix[i][j][2]>0) // пересечение линии с узлом

р=NodeCentre(apix[i][j][2]);

Image2->Canvas->Pen->Color=с4;

Image2->Canvas->MoveTo(int(zoom*р.x),int(zoom*р.y));

Image2->Canvas->LineTo(int(zoom*(р.x+1)),int(zoom*р.y));

Image2->Canvas->LineTo(int(zoom*(р.x+1)),int(zoom*(р.y+1)));

Image2->Canvas->LineTo(int(zoom*р.x),int(zoom*(р.y+1)));

Image2->Canvas->LineTo(int(zoom*р.x),int(zoom*р.y));

Image2->Canvas->Pen->Color=с2;

if(apix[ix][iy][2]>0) // есть узел

Image2->Canvas->Pen->Color=с3;

for(int i=0;i<w;i++) // выделяем узел

if(apix[i][j][2]==selnode) // узел

if(apix[i][j][1]>0) // пересечение узла с линией

Image2->Canvas->Pen->Color=с4;

Image2->Canvas->MoveTo(int(zoom*р.x),int(zoom*р.y));

Image2->Canvas->LineTo(int(zoom*(р.x+1)),int(zoom*р.y));

Image2->Canvas->LineTo(int(zoom*(р.x+1)),int(zoom*(р.y+1)));

Image2->Canvas->LineTo(int(zoom*р.x),int(zoom*(р.y+1)));

Image2->Canvas->LineTo(int(zoom*р.x),int(zoom*р.y));

if(Image1->Canvas->Pixels[x-1][y-1]==с0 && x>0 && y>0) n+=1; // lu=1

if(Image1->Canvas->Pixels[x ][y-1]==с0 && y>0) n+=1; // u=2

if(Image1->Canvas->Pixels[x+1][y-1]==с0 && x<w && y>0) n+=1; // ru=3

if(Image1->Canvas->Pixels[x-1][y ]==с0 && x>0 ) n+=1; // l=4

if(Image1->Canvas->Pixels[x+1][y ]==с0 && x<w ) n+=1; // r=5

if(Image1->Canvas->Pixels[x-1][y+1]==с0 && x>0 && y<h) n+=1; // ld=6

if(Image1->Canvas->Pixels[x ][y+1]==с0 && y<h) n+=1; // d=7

if(Image1->Canvas->Pixels[x+1][y+1]==с0 && x<w && y<h) n+=1; // rd=8

// точка принадлежит линии

apix[i][j][0]=Image1->Canvas->Pixels[i][j]==с0?1:0;

MessageBox(Handle,"Неверно указано число", "Ошибка", MB_OK);

if(x<0 || y<0 || x>=w || y>=h) return; //если не принадлежит области изображения

if(apix[x][y][0]!=1) return; // если не является точкой

if(apix[x][y][2]!=-1) return; // если уже обработана на принадлежность узлу

if(NeigCount(x,y)<=2) return;// если мало соседей для сегментации

if(apix[x][y][2]==-1) // если точка не обработана

apix[x][y][2]=n; // точка будет принадлежать узлу n

// обрабатываем ее соседей

sb1->SimplePanel=true; sb1->SimpleText="Поиск узлов ...";

TPoint р;

wlog("Поиск узлов ...");

if( apix[i][j][0]==1 // есть точка

&& apix[i][j][2]==-1 // не обработана на принадлежность узлу

&& NeigCount(i,j)>2 ) // является частью узла

{// начинаем выделение узла

wlog("Найден узел №"+IntToStr(nsegs));

// wlog("Точки в области узла:");

NeigNode(i,j,nsegs); // обрабатываем точки вокруг узла

р=NodeCentre(nsegs);

wlog("Координаты узла: "+IntToStr(р.x)+","+IntToStr(h-1-р.y));

wlog("Поиск узлов завершен");

wlog("ВСЕГО УЗЛОВ: "+IntToStr(nsegs));

int nс=NeigCount(x,y);

if(nс==1 || nс==2) // если начало или продолжение линии

// если ( есть точка И не обработана на принадлежность линии )

else if(nс>2) // соединение с узлом

sb1->SimplePanel=true; sb1->SimpleText="Поиск сегментов линий ...";

wlog("Поиск сегментов ...");

if( apix[i][j][0]==1 // есть точка

&& apix[i][j][1]==-1 // и она не обработана на принадлежность сегменту линии

&& (NeigCount(i,j)==1 // и является началом (1 сосед)

|| NeigCount(i,j)==2 )) // или продолжением линии (2 соседа)

{// начинаем выделение сегмента

wlog("Найден сегмент №"+IntToStr(nlines)+": ["+IntToStr(i)+","+IntToStr(h-1-j)+"]");

wlog("Точки сегмента:");

NeigLine(i,j,nlines); // обрабатываем сегмент линии

wlog("Поиск сегментов завершен");

wlog("ВСЕГО СЕГМЕНТОВ: "+IntToStr(nlines));

sb1->SimplePanel=true; sb1->SimpleText="Поиск линий ...";

TPoint р;

wlog("Поиск линий ...");

if(apix[i][j][1]>0 && apix[i][j][2]>0 // есть соединение с сегментом

&& apix[i][j][3]==-1 // точка не обработана

{ // обрабатываем точку и выполняем поиск ей соответствующей

cline=apix[i][j][1]; // текущая линия

cseg=apix[i][j][2]; // текущий сегмент

р=NodeCentre(cseg);

wlog("Поиск соответствия фрагменту "+IntToStr(apix[i][j][1])+" ["+IntToStr(i)+","+IntToStr(j)+"]");

wlog("Центр сегмента "+IntToStr(cseg)+" ["+IntToStr(р.x)+","+IntToStr(р.y)+"]");

for(int j1=0;j1<h;j1++) // поиск точки соответствия

if(apix[i1][j1][0]==1 // есть точка

&& apix[i1][j1][3]==-1 // не обработана на соответствие линий

&& apix[i1][j1][1]>0 && apix[i1][j1][2]==cseg // является пересечением этого сегмента с одной из линий

if((dist=plDistance(р.x,р.y,i,j,i1,j1))<=mindist) // если образует наименьшее отклонение от центра сегмента

{ // запоминаем точку как самую подходящую

wlog("["+IntToStr(i1)+","+IntToStr(j1)+"] - соотв.:"+FloatToStr(dist));

wlog("["+IntToStr(i1)+","+IntToStr(j1)+"] - не соотв:"+FloatToStr(dist));

wlog("Найдено соответствие фрагментов: "+IntToStr(cline)+" и "+IntToStr(apix[x][y][1]));

apix[x][y][3]=1; // точка обработана

FillLine(apix[x][y][1],cline); // заполняем линию

if( apix[i][j][2]==n // точка принадлежит этому узлу

// && apix[i][j][1]>0 // есть пересечение с линией

TPoint р;

if(apix[x][y][1]==n && apix[x][y][3]==-1) // принадлежит этой линии и не обработана в код

// обработка текущей точки

// обрабтка продолжения линии

if(apix[x][y][2]>0) // если пересечение с сегментом

{// обработка линии внутри сегмента

р=FindMatch(x,y);

CodeLine(x,y,р.x,р.y); // вывод кода линии внутри сегмента

x=р.x;

y=р.y;

wlog("Кодирование линии ["+IntToStr(x1)+","+IntToStr(h-1-y1)+"]-["+IntToStr(x2)+","+IntToStr(h-1-y2)+"]:");

if(abs(x1-x2)>abs(y1-y2)) // точек по x больше

wlog("Цикл по оси x. Точки линии:");

double к=double(y2-y1)/(x2-x1), b=y1-x1*к;

y=к*x+b;

else // точек по y больше

wlog("Цикл по оси y. Точки линии:");

double к=double(x2-x1)/(y2-y1), b=x1-y1*к;

x=к*y+b;

TPoint р;

р.x=x;

р.y=y;

if(apix[i][j][1]==apix[x][y][1] // если принадлежит той же линии

&& apix[i][j][2]==apix[x][y][2] // и принадлежит тому же сегменту

&& (i!=x || j!=y) // и это другая точка

{ // это искомая точка

р.x=i;

р.y=j;

return р;

sb1->SimplePanel=true; sb1->SimpleText="Вывод кода линий ...";

for(j=0;j<h;j++) // инициализация массива временных атрибутов

if( apix[i][j][1]>0// есть линия

&& apix[i][j][3]==-1 // и она не обработана

&& (NeigCount(i,j)==1 // точка является началом линии

|| apix[i][j][2]>0) // или узлом

{ // формируем код для этой линии

OpenDialog1->Title="Открыть массив точек";

OpenDialog1->Filter="Файлы массивов точек (*.dat)|*.dat|Все файлы (*.*)|*.*";

sb1->SimplePanel=true; sb1->SimpleText="Открытие массива точек ...";

if(s[i+1]=='1') // есть точка

Image1->Canvas->Pixels[i][j]=с0;

else // нет точки

Image1->Canvas->Pixels[i][j]=с1;

MessageBox(Handle,"Ошибка открытия массива", "ОШИБКА", MB_OK);

SaveDialog1->Filter="Файлы массивов точек (*.dat)|*.dat|Все файлы (*.*)|*.*";

SaveDialog1->Title="Сохранить массив точек";

sb1->SimplePanel=true; sb1->SimpleText="Запись массива точек ...";

frmOptions->Label1->Font->Color=с5;

frmOptions->Label2->Font->Color=с2;

frmOptions->Label3->Font->Color=с3;

с5=frmOptions->Label1->Font->Color;

с2=frmOptions->Label2->Font->Color;

с3=frmOptions->Label3->Font->Color;

MessageBox(Handle,"Неверно указано число", "Ошибка", MB_OK);

SaveDialog1->Filter="Файлы кодов линий (*.lsc)|*.lsc|Все файлы (*.*)|*.*";

SaveDialog1->Title="Сохранить коды линий";

TPoint р;

if(apix[x][y][1]==n && apix[x][y][3]==-1) // принадлежит этой линии и не обработана в код

// обработка текущей точки

if (NeigCount(x,y)==1) // если конец линии

{ // обработка конца линии

if(nodescnt==0) // если не было найдено конечных точек

xs1=x; ys1=1; // первая координата

else if(nodescnt==1) // если уже имеется одна конечная точка

else if(apix[x][y][2]>0) // если начинается узел

else // продолжение линии, продолжаем обработку

sb1->SimplePanel=true; sb1->SimpleText="Вывод кода сегментов ...";

for(j=0;j<h;j++) // инициализация массива временных атрибутов

if( apix[i][j][1]>0 // есть сегмент

&& apix[i][j][3]==-1 // и он не обработан

&& (NeigCount(i,j)==1 // точка является началом сегмента

|| NeigCount(i,j)==2) // или продолжением сегмента

{ // формируем код для этой линии

П.3.3. Текст модуля lsimgsize.h

П.3.4. Текст модуля lsimgsize.cpp

П.3.5. Текст модуля lsoptions.h

П.3.6. Текст модуля lsoptions.cpp

П.3.7. Текст модуля prjlineseg.cpp

Application->Title = "Линейная сегментация";

Как купить готовую работу?
Авторизоваться
или зарегистрироваться
в сервисе
Оплатить работу
удобным
способом
После оплаты
вы получите ссылку
на скачивание
Страниц
88
Размер файла
471.08 КБ
Просмотров
430
Покупок
0
Разработка подсистемы линейной сегментации в составе системы автоматизированного анализа
Купить за 600 руб.
Похожие работы
Сумма к оплате
500 руб.
Купить
Заказать
индивидуальную работу
Гарантия 21 день
Работа 100% по ваши требованиям
от 1 000 руб.
Заказать
Прочие работы по предмету
Сумма к оплате
500 руб.
Купить
Заказать
индивидуальную работу
Гарантия 21 день
Работа 100% по ваши требованиям
от 1 000 руб.
Заказать
103 972 студента обратились
к нам за прошлый год
1950 оценок
среднее 4.2 из 5
Михаил Очень долго искала эксперта, который сможет выполнить работу. Наконец-то нашла. Работа выполнена в срок, все,как...
Юлия работа выполнена отлично, раньше срока, недочётов не обнаружено!
Юлия Работа выполнена качественно и в указанный срок
Ярослава Эксперта рекомендую !!!! Все четко и оперативно. Спасибо большое за помощь!Буду обращаться еще.
Ярослава Благодарю за отличную курсовую работу! Хороший эксперт, рекомендую!
Марина Хорошая и быстрая работа, доработки выполнялись в кратчайшие сроки! Огромной спасибо Марине за помощь!!! Очень...
Мария Благодарю за работу, замечаний нет!
Елена Елена прекрасно справилась с задачей! Спасибо большое за великолепно выполненную работу! Однозначно рекомендую!
Михаил Михаил отличный эксперт! Работу сделал раньше заявленного срока, все недочеты поправили, работой довольна! 5+
Мария Благодарю за работу! Замечаний нет!