Разработка программно-математического обеспечения корреляционного совмещения изображений с использованием быстрого преобразования Фурье

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 07.07.2012
Размер файла 3,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Рисунок 4.3 - Схема второго этапа вычисления ДПФ

Схема алгоритма второго шага преобразования Фурье представлена на рисунке 4.4.

Рисунок 4.4 - Схема алгоритма вычисления второго этапа ДПФ

Внешний цикл - это основные итерации. На каждой из них 2Nmax/N ДПФ (длиной по N/2 элементов каждое) преобразуются в Nmax/N ДПФ (длиной по N элементов каждое).

Следующий цикл по k представляет собой цикл синхронного вычисления элементов с индексами k и k + N/2 во всех результирующих ДПФ.

Самый внутренний цикл перебирает Nmax/N штук ДПФ одно за другим.

4.1.2 Восстановление исходного изображения по его Фурье-образу

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

Схема алгоритма нахождения исходного изображения по его Фурье-образу представлена на рисунке 4.5.

Рисунок 4.5 - Схема алгоритма нахождения исходного изображения по его Фурье-образу

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

совмещение изображение корреляционный фурье

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

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

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

3. Требования предметной области. Характеризуют ту предметную область, где будет эксплуатироваться система. Эти требования могут быть функциональными и нефункциональными.

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

1) выбор и загрузка рабочего изображения из файла. Данное изображение должно представлять собой растровое изображение в формате битовой карты (BMP) с 256 градациями яркости серого цвета (если изображение не соответствует указанным требованиям, возможно его преобразование к 256 градациям серого цвета);

2) отображение на экране загруженного изображения, которое должно использоваться в качестве исходного для дальнейших преобразований;

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

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

5) сохранение полученных результатов (графических отображений Фурье-образов);

Дополнительные требования, предъявляемые к программному стенду:

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

2) программный стенд необходимо разработать на языке C++ в среде разработки C++ Builder 6.0;

3) программный стенд должен работать в среде операционной системы Windows 2000, Windows XP SP1/SP2, Windows 7( все модификации) на IBM PC совместимой ПЭВМ;

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

4.2.1 Разработка структуры программного стенда

В соответствии приведенными в пункте 4.2 требованиям к программному стенду, была разработана следующая обобщенная структура программного стенда, приведенная на рисунке 4.5.

Рисунок 4.5 - Обобщенная структура программного стенда

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

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

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

1. Компонент «Интерфейс» отвечает за осуществление взаимодействия программного стенда и пользователя. Отвечает за графическое отображение исходного изображения, получаемых Фурье-образов, отображение изображений, подвергнутых геометрическим преобразованиям. Рассматриваемый компонент тесно связан с другими компонентами программного стенда: он обеспечивает ввод исходных данных в другие компоненты, визуализирует результаты проведенных операций.

При разработке компонента «Интерфейс» использовались стандартные средства среды программирования, такие как компоненты ввода и отображения текстовой и графической информации (окна редактирования Edit, изображения Image), управляющие элементы (кнопки Button), компоненты - меню (MainMenu), диалоги открытия файлов и рисунков (OpenDialog, OpenPictureDialog), компоненты внешнего оформления (панели Panel,) и другие.

2. Компонент «Графическое отображение полученных результатов» обеспечивает удобную и наглядную для пользователя работу с изображениями. В его функции входит отображение на экране загружаемого из файла исходного изображения, Фурье-образов исходного изображения, получаемых после преобразования, изображений, подвергнутых преобразования поворота и масштабирования, а также изображения, восстановленных по Фурье-образу.

3. Компонент «Критериальная функция» обеспечивает расчет корреляционной функции, являющейся мерой совмещения эталонного и текущего изображения. Фактически реализует алгоритмы корреляционного совмещения. Отметим, что в данной работе этот компонент реализован не будет.

4. Компонент «Блок преобразований» является основным для данного программного стенда. Он обеспечивает реализацию нахождения Фурье-образа исходного изображения, а также восстановление изображения по его Фурье-образу. Данный компонент реализует алгоритмы БПФ и ОБПФ, передает результаты своей работы компоненту «Графическое отображение полученных результатов» для их графического отображения на экране.

5. Компонент «Блок геометрических преобразований» обеспечивает выполнение операций поворота и масштабирования исходного изображений, подобно компоненту «Блок преобразований», передает результаты выполнения указанных операций компоненту «Графическое отображение полученных результатов» с целью их визуализации.

5. Разработка программной документации

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

· описание применения;

· руководство программиста;

· руководство оператора.

Разработка документации выполнялась в соответствии с ЕСПД ГОСТ 19.101-77, 19.105-78, 19.502-78, 19.504-79, 19.505-79.

5.1 Описание применения

5.1.1 Назначение программного стенда

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

Программный стенд предоставляет следующие возможности:

· загрузка РЛИ из файла, содержащего растровое изображение в формате BMP, и отображение его на экране в качестве исходного;

· нахождение Фурье-образа исходного изображения и отображение его в графическом виде;

· восстановление изображения по найденному Фурье-образу;

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

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

Программный стенд не предназначен для работы с РЛИ, содержащимися в файлах, формат которых отличен от битовой карты (BMP).

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

5.1.2 Условия применения

Требования к техническим средствам

Компьютер должен быть оснащен клавиатурой, дисплеем и манипулятором «мышь», устройством для получения программы (USB-порт, CD-дисковод). Видеоадаптер должен обеспечить разрешение не менее 800х600 пикселей (рекомендуется 1024x768) и 256 цветов.

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

Программный стенд работает в среде операционных систем Windows 2000, Windows XP SP1/SP2, Windows 7 (все модификации) на IBM PC совместимой ПЭВМ;

Надежность работы в операционных системах Windows более ранних версий не гарантируется.

Общие характеристики входной и выходной информации

Программный стенд использует в качестве входной информации файлы РЛИ в формате BMP. Размер обрабатываемого входного изображения ограничивается производительностью процессора и объемом оперативной памяти.

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

Требования организационного характера

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

5.1.3 Описание задачи

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

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

5.1.4 Входные и выходные данные

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

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

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

5.2.1 Назначение и условия применения программы

Программный стенд предназначен для исследования прямого и обратного преобразования Фурье с целью дальнейшего использования полученных Фурье-образов для проведения корреляционного совмещения ЭИ и ТИ.

Функции, выполняемые программным стендом, описаны в документе «Руководство пользователя».

Компьютер должен быть оснащен клавиатурой, дисплеем и манипулятором «мышь», устройством для получения программы (USB-порт, CD-дисковод). Видеоадаптер должен обеспечить разрешение не менее 800х600 пикселей (рекомендуется 1024x768) и 256 цветов.

Программный стенд работает в среде операционных систем Windows 2000, Windows XP SP1/SP2, Windows 7 (все модификации) на IBM PC совместимой ПЭВМ.

5.2.2 Характеристики программы

Программный стенд позволяет выполнять одновременно обработку одного РЛИ, загруженного в программу.

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

В программном стенде предусмотрена стандартная обработка ошибок, не приводящих к нарушению работы программы.

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

5.2.3 Обращение к программе

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

Порядок работы с программой описан в документе «Руководство оператора».

Завершение работы программного стенда возможно с помощью:

· пункта главного меню «Файл/Выход»;

· кнопки «Завершение программы» на стандартной панели инструментов;

5.2.4 Входные и выходные данные

Входными данными для работы программного стенда служат РЛИ в виде растровых изображений в формате битовой карты (BMP) с 256 градациями серого цвета. Для работы программы требуется произвести загрузку РЛИ.

Результаты работы отображаются на экране в виде изображений.

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

5.2.5 Сообщения

При работе программы оператору могут выдаваться сообщения в виде стандартных модальных окон. Перечень сообщений и порядок действия описан в документе «Руководство оператора».

5.3 Руководство оператора

5.3.1 Назначение программы

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

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

· загрузка РЛИ из файла, содержащего растровое изображение в формате BMP, и отображение его на экране в качестве исходного;

· нахождение Фурье-образа исходного изображения и отображение его в графическом виде;

· восстановление изображения по найденному Фурье-образу;

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

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

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

5.3.2 Условия выполнения программы

Компьютер должен быть оснащен клавиатурой, дисплеем и манипулятором «мышь», устройством для получения программы (USB-порт, CD-дисковод). Видеоадаптер должен обеспечить разрешение не менее 800х600 пикселей (рекомендуется 1024x768) и 256 цветов.

Программный стенд работает в среде операционных систем Windows 2000, Windows XP SP1/SP2, Windows 7 (все модификации) на IBM PC совместимой ПЭВМ.

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

5.3.3 Выполнение программы

Загрузка и запуск программы

Загрузка и запуск программного стенда выполняется запуском на выполнение файла FourierTransformation.exe.

В случае успешного запуска программы на рабочем столе будет отображено главное окно программы (рисунок 5.1)

Рисунок 5.1 - Главное окно программного стенда

Главное окно программного стенда содержит следующие элементы:

· в верхней части окна - главное меню программы;

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

· панель ввода параметров:

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

- требуемый масштаб;

Загрузка изображения из файла

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

· выбором пункта «Файл/Открыть» главного меню;

· с помощью кнопки «Загрузить» в области «Исходное изображение»;

В результате выполнения одного из вышеуказанных пунктов появится окно «Открыть»

После выбора нужного файла и нажатия кнопки «Открыть» в рабочей области программы отобразится выбранное изображение. Оно будет в дальнейшем использоваться как исходное для всех видов преобразований (рисунок 5.3).

Рисунок 5.3 - Главное окно программы с загруженным изображением

Для выполнения прямого преобразования Фурье с помощью рассматриваемого программного стенда, необходимо выполнить одно из следующих действий:

· выбрать пункт «Преобразования/Прямое преобразование Фурье» главного меню;

· произвести нажатие кнопки «Прямое преобразование» в области «Преобразование Фурье»;

Результат выполнения указанных действий показан на рисунке 5.4

Рисунок 5.4 - Окно программы с выполненным преобразованием Фурье

Выполнение прямого преобразования Фурье

Для выполнения обратного преобразования Фурье с помощью рассматриваемого программного стенда, необходимо выполнить одно из следующих действий:

· выбрать пункт «Преобразования/Обратное преобразование Фурье» главного меню;

· произвести нажатие кнопки «Обратное преобразование» в области «Преобразование Фурье»;

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

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

Выполнение геометрических преобразований

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

· выбрать пункт «Геометрические искажения/Поворот» главного меню или произвести нажатие кнопки «Поворот» в области «Геометрические искажения»;

· выбрать пункт «Геометрические искажения/Масштабирование» главного меню или произвести нажатие кнопки «Масштаб» в области «Геометрические искажения»;

Результат выполнения указанных действий показан на рисунке 5.6.

Рисунок 5.6 - Окно программы с выполненными геометрическими искажениями

Завершение работы программы

Завершение работы программного стенда возможно с помощью:

· пункта главного меню «Файл/Выход»;

· кнопки «Завершение программы» на стандартной панели инструментов;

5.3.4 Сообщения оператору

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

При попытке открыть исходное изображение в неподдерживаемом формате, будет выдано сообщение об ошибке

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

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

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

Программа и методика испытаний разработана в соответствии с ЕСПД ГОСТ 19.301-79.

6.1 Объект испытаний

Объектом испытаний является программный стенд для исследования и проведения прямого и обратного преобразования Фурье (далее - программный стенд).

На испытания предъявляется перечень документов программного стенда:

· «Программный стенд для исследования и проведения прямого и обратного преобразования Фурье. Описание применения»;

· «Программный стенд для исследования и проведения прямого и обратного преобразования Фурье. Руководство программиста»;

· «Программный стенд для исследования и проведения прямого и обратного преобразования Фурье. Руководство оператора».

6.2 Цель испытаний

Настоящие испытания программного стенда проводятся в целях оценки:

· работоспособности программного стенда и соответствия его характеристик функциональным и иным требованиям, предъявляемым к программе на этапе проектирования;

· соответствия документации требованиям задания на дипломное проектирование и ЕСПД.

6.3 Требования к программе

Состав проводимых проверок приведен в таблице 6.1.

Таблица 6.1 - Состав проводимых проверок

Номер пункта

Выполнение проверки

Номер пункта методики

1

Загрузка и запуск программного стенда

6.6.1

2

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

6.6.1

3

Загрузка РЛИ из файла, содержащего растровое изображение в формате BMP, отображение его на экране в качестве исходного изображения

6.6.2

4

Выполнение прямого преобразования Фурье текущего изображения

6.6.3

5

Выполнение обратного преобразования Фурье полученных Фурье-образов исходного изображения

6.6.4

6

Выполнение операции поворота текущего изображения

6.6.5

7

Выполнение операции масштабирования текущего изображения

6.6.6

8

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

6.6.7

6.4 Требования к программной документации

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

1. Эксплуатационные документы:

· описание применения (ГОСТ 19.502-78);

· руководство программиста (ГОСТ 19.504-79);

· руководство оператора (ГОСТ 19.505-79).

2. Программа и методика испытаний. (ГОСТ 19.301-79).

6.5 Средства и порядок испытаний

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

· персональный компьютер на базе процессора Intel Core i5 2.27 ГГц;

· ОЗУ 4 ГБ;

· монитор 17'' Easynote LJ75;

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

· манипулятор типа «мышь»;

· ОС MS Windows 7 Home Basic Rus;

Испытания проводятся на контрольном примере путем ввода и обработки данных контрольного примера. Контрольный пример включает набор файлов РЛИ в формате BMP.

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

Далее проводится тестирование функций методами «белого ящика» и «черного ящика».

6.6 Методы испытаний

6.6.1 Проверка процедуры загрузки и запуска программного стенда

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

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

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

6.6.2 Проверка процедуры загрузки РЛИ из файла и отображения его в качестве ТИ

Для выполнения проверки файл с РЛИ последовательно открывается стандартной программой просмотра изображений Windows из состава операционной системы и загружается в программный стенд. Результат работы наблюдается визуально на экране ПЭВМ.

Результат проверки считается положительным, если:

· загруженное в программу РЛИ отображается в рабочей области программного стенда;

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

6.6.3 Проверка процедуры прямого преобразования Фурье

После загрузки исходного изображения любым из двух доступных способов инициируется выполнение процедуры нахождения Фурье-образа изображения.

Результат проверки можно считать положительным, если:

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

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

6.6.4 Проверка процедуры обратного преобразования Фурье

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

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

6.6.5 Проверка процедуры поворота изображения

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

Результат проверки считается положительным, если:

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

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

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

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

Результат проверки считается положительным, если:

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

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

6.6.7 Проверка процедуры сохранения результата Фурье-преобразования

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

Результат проверки данной процедуры является успешным, если:

· в процессе выполнения процедуры не возникло ошибок;

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

6.6.8 Оценка комплектности и качества документации

Оценка качества и комплектности документации выполняется экспертным методом путем анализа документации на соответствие требованиям нормативно-технических документов. Номенклатура разработанных документов определяется заданием на проектирование. Содержание документов проверяется на соответствие требованиям ГОСТ ЕСПД.

6.7 Тестирование методом «белого ящика». Способ базового пути

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

Procedure Zoom(int WidthSource, HeightSource, Tbitmap *sour, Tbitmap *dest)

1. if (StrToFloat(Edit2->Text)>50){

2. MessageBox(NULL, "Масштаб слишком велик", "Ошибка!", MB_OK | MB_ICONERROR);}

3. else {

4. If (StrToFloat(Edit2->Text)<=0){

5. MessageBox(NULL, "Масштаб слишком мал", "Ошибка!", MB_OK | MB_ICONERROR);}

6. else {

7. Image6->Height=Image1->Height*StrToFloat(Edit2->Text);Image6->Width=Image1->Width*StrToFloat(Edit2->Text)

8. sour=Image1->Picture->Bitmap;

9. WidthSource = sour->Width; HeightSource = sour->Height;

10. WidthDest = Image1->Width*StrToFloat(Edit2->Text);

11. HeightDest = Image1->Height*StrToFloat(Edit2->Text);

12. dest->Width = WidthDest; dest->Height = HeightDest;

13. float kX = (float)WidthDest / (float)WidthSource;

14. float kY = (float)HeightDest / (float)HeightSource;

15. for (int x = 0; x < WidthSource; x++)

16. for (int y = 0; y < HeightSource; y++){

17. for (int i = 0; i < kX; i++)

18. for (int j = 0; j < kY; j++){

19. dest->Canvas->Pixels[x*kX+i][y*kY+j] = sour->Canvas->Pixels[x][y];}}

20. Image6->Canvas->Draw(0,0, dest);}

21. }

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

Рисунок 6.1 - Потоковый граф, отображающий структуру функции

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

1.Цикломатическая сложность графа равна количеству регионов потокового графа: V(G)=3

2. Цикломатическая сложность графа равна количеству дуг минус количество узлов плюс 2: V(G)=22 -21+2= 3

3. Цикломатическая сложность графа равна количеству предикатных узлов плюс 1: V(G)=2 +1=3

Базовое множество путей приведено в таблице 6.2.

Таблица 6.2 - Базовое множество независимых путей

1

1-2-21

2

1-3-4-5-21

3

1-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21

Каждый тестовый вариант формируется в следующем виде:

· исходные данные;

· ожидаемые результаты;

· реальные результаты.

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

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

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

Таблица 6.3 - Результаты тестирования методом «белого ящика»

№ пути

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

Ожидаемые результаты

Реальные результаты

1

Введен коэффициент масштабирования, превышающий 50

Выдано сообщение об ошибке (коэффициент масштабирования слишком велик)

Выдано сообщение об ошибочно введенном коэффициенте масштабирования

2

Введен коэффициент масштабирования меньший или равный нулю

Выдано сообщение об ошибке (коэффициент масштабирования слишком мал)

Выдано сообщение об ошибке (коэффициент масштабирования слишком мал)

3

Введенный коэффициент масштабирования больше нуля и не превышает 50

Масштабирование выполнено успешно, результирующее изображение выведено на экран

Масштабирование выполнено успешно, результирующее изображение выведено на экран

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

6.8 Тестирование методом «черного ящика»

Рассмотрим тестирование методом «черного ящика» процедуры из п. 6.7.

Предусловия:

· Введенный коэффициент масштабирования не лежит в пределах (0; 50];

· Введенный коэффициент масштабирования лежит в пределах (0; 50].

Учет данных состояний необходим при проведении тестирования.

Постусловия:

· Вывод изображения, подвергнутого масштабированию.

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

Построенное дерево разбиений представлено на рисунке 6.2:

Рисунок 6.2 - Дерево разбиений

Дерево содержит 3 листа. Составим тестовые варианты для каждого из них:

Таблица 6.4 - Тестовые варианты и результаты

№ листа

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

Ожидаемые результаты

Реальные результаты

1

Введенный коэффициент масштабирования больше нуля и не превышает 50

Масштабирование выполнено успешно, результирующее изображение выведено на экран

Масштабирование выполнено успешно, результирующее изображение выведено на экран

2

Введен коэффициент масштабирования меньший или равный нулю

Выдано сообщение об ошибке (коэффициент масштабирования слишком мал)

Выдано сообщение об ошибке (коэффициент масштабирования слишком мал)

3

Введен коэффициент масштабирования, превышающий 50

Выдано сообщение об ошибке (коэффициент масштабирования слишком велик)

Выдано сообщение об ошибочно введенном коэффициенте масштабирования

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

7. Экспериментальные исследования

7.1 Практическая проверка выполнения Фурье-преобразования РЛИ

В качестве исходного изображения для проверки выполнения Фурье-преобразования взято РЛИ размером 100х100 пикселей, представленное на рисунке 7.1.

Рисунок 7.1 - Исходное РЛИ изображение

Результирующие Фурье-образы исходного РЛИ представлены на рисунке 7.2

Рисунок 7.2 - Фурье-образы исходного РЛИ

С помощью программного стенда подвергнем исходное РЛИ геометрическим преобразованиям: масштабирования и повороту, найдем Фурье-образы полученных таким способом изображений.

Масштабный коэффициент изображения примем равным 0.75. Полученное в результате масштабирования изображение приведено на рисунке 7.3, его Фурье-образы представлены на рисунке 7.4.

Рисунок 7.3 - Изображение, полученное в результате масштабирования исходного РЛИ

Рисунок 7.4 - Фурье-образы отмасштабированного РЛИ

Угол поворота примем равным 90 градусам. Полученное в результате поворота изображение приведено на рисунке 7.5, его Фурье-образы представлены на рисунке 7.6.

Рисунок 7.5 - Изображение, полученное в результате поворота исходного РЛИ

Рисунок 7.6 - Фурье-образы повернутого РЛИ

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

Заключение

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

Были разработаны следующие алгоритмы:

· нахождения Фурье-образов РЛИ;

· восстановление исходного РЛИ по его Фурье-образу;

· операции поворота РЛИ на произвольный угол;

· операции масштабирования изображения/

Разработанный программный стенд может быть использован как основа для построения программного комплекса по корреляционному совмещению РЛИ на основе их Фурье-образов.

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

Результаты исследований будут использоваться в НИР, проводимых на кафедре ЭВМ.

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

1 ГОСТ 19.101-77 Единая система программной документации. ВИДЫ ПРОГРАММ И ПРОГРАММНЫХ ДОКУМЕНТОВ.

2 ГОСТ 19.105-78 Единая система программной документации. ОБЩИЕ ТРЕБОВАНИЯ К ПРОГРАММНЫМ ДОКУМЕНТАМ.

3 ГОСТ 19.502-78 Единая система программной документации. ОПИСАНИЕ ПРИМЕНЕНИЯ.

4 ГОСТ 19.301-79 Единая система программной документации. ПРОГРАММА И МЕТОДИКА ИСПЫТАНИЙ. Требования к содержанию и оформлению.

5 ГОСТ 19.504-79 Единая система программной документации. РУКОВОДСТВО ПРОГРАММИСТА. Требования к содержанию и оформлению.

6 Блейхут Р. Быстрые алгоритмы цифровой обработки сигналов М.: Мир, 1989. 448 с., ил.

7 Крот А.М, Минервина Е.Б. Быстрые алгоритмы и программы цифровой спектральной обработки сигналов и изображений. Мн.: Навука i тэхнiка, 1995. 407 с.

8 Гольденберг Л.М, Поляк М.Н. Цифровая обработка сигналов. Справочное пособие. М.: Радио и связь, 1985. 312 с., ил.

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

10 Павловская Т.А. С/С++ Программирование на языке высокого уровня. СПб.: Питер, 2005. 461 с.

11 Архангельский А.Я. C++Builder 6 Справочное пособие. Книга 1. Язык С++. Справочное пособие. М.: Бином-Пресс , 2003. 1152с.

12 Культин Н.Б. Самоучитель C++ Builder. СПб: БХВ-Петербург, 2004. 320 с.

13 Теория и практика цифровой обработки сигналов. URL: http://www.dsplib.ru/index.html

14 Программирование на С++ Builder. URL: http://cbuilder.ru/

Приложение

Текст модуля Unit1_log.h:

//---------------------------------------------------------------------------

#ifndef Unit1_logH

#define Unit1_logH

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ExtCtrls.hpp>

#include <Dialogs.hpp>

#include <ExtDlgs.hpp>

#include <ComCtrls.hpp>

#include <Menus.hpp>

//---------------------------------------------------------------------------

class TForm1 : public TForm

{

__published: // IDE-managed Components

TOpenPictureDialog *OpenPictureDialog1;

TRadioButton *RadioButton1;

TGroupBox *GroupBox1;

TButton *Button1;

TImage *Image1;

TGroupBox *GroupBox2;

TImage *Image5;

TImage *Image6;

TButton *Button4;

TButton *Button5;

TEdit *Edit1;

TEdit *Edit2;

TGroupBox *GroupBox3;

TButton *Button2;

TButton *Button3;

TImage *Image2;

TImage *Image3;

TImage *Image4;

TLabel *Label1;

TLabel *Label2;

TMainMenu *MainMenu1;

TMenuItem *N1;

TMenuItem *N2;

TMenuItem *N3;

TMenuItem *N4;

TMenuItem *N5;

TMenuItem *N6;

TMenuItem *N7;

TMenuItem *N8;

TMenuItem *N9;

TMenuItem *N10;

TMenuItem *N11;

TMenuItem *N12;

TMenuItem *N13;

TButton *Button6;

TSavePictureDialog *SavePictureDialog1;

TButton *Button7;

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall Button3Click(TObject *Sender);

void __fastcall FormCreate(TObject *Sender);

void __fastcall Button4Click(TObject *Sender);

void __fastcall Button5Click(TObject *Sender);

void __fastcall N4Click(TObject *Sender);

void __fastcall N2Click(TObject *Sender);

void __fastcall N6Click(TObject *Sender);

void __fastcall N7Click(TObject *Sender);

void __fastcall N9Click(TObject *Sender);

void __fastcall N10Click(TObject *Sender);

void __fastcall N13Click(TObject *Sender);

void __fastcall Button7Click(TObject *Sender);

void __fastcall Button6Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

Текст модуля Unit1_log.cpp:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "io.h"

#include "fcntl.h"

#include "unit1_log.h"

#include "math.h"

#include "stdio.h"

#include "Unit1_log.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

typedef

PBMP_Arr [160000];

PBMP_Arr *Ptr0; // исходное РЛС-изображение

PBMP_Arr *Ptr1; // Фурье-образ РЛС-изображения (A)

PBMP_Arr *Ptr2; // Фурье-образ РЛС-изображения (B)

PBMP_Arr *Ptr3; // восстановленное РЛС-изображение

typedef struct {

TLogPalette lpal;

TPaletteEntry dummy[256];

} LogPal;

int i_c;

int i_c2;

int kol_k;

int f1;

unsigned char f[160000]; // исходное РЛС-изображение

long double f1_v[160000]; // восстановленное РЛС-изображение

unsigned char f1_vc[160000]; // восстановленное РЛС-изображение

unsigned char f2[160000]; // ? --

unsigned char f7[160000]; // ? массив фрагмента для контура корреляции

// Переменные для Фурье-образа РЛС

long double a1_tmp; // промежуточная переменная

long double a2_tmp; // промежуточная переменная

long double b1_tmp; // промежуточная переменная

long double b2_tmp; // промежуточная переменная

long double a_new[400][400]; // А-Фурье (РЛС)

long double b_new[400][400]; // В-Фурье (РЛС)

unsigned char a_new_uc[400][400]; // А-Фурье (РЛС) 256гр

unsigned char b_new_uc[400][400]; // В-Фурье (РЛС) 256гр

unsigned char a_new_uc_tmp[160000];// А-Фурье (РЛС) 256гр - одном

unsigned char b_new_uc_tmp[160000];// В-Фурье (РЛС) 256гр - одном

// Переменные для Фурье-образа А-Д

long double a1_tmp2; // промежуточная переменная

long double a2_tmp2; // промежуточная переменная

long double b1_tmp2; // промежуточная переменная

long double b2_tmp2; // промежуточная переменная

long double a_new2[400][400]; // А-Фурье (А-Д)

long double b_new2[400][400]; // В-Фурье (А-Д)

unsigned char a_new_uc2[400][400]; // А-Фурье (А-Д) 256гр

unsigned char b_new_uc2[400][400]; // В-Фурье (А-Д) 256гр

unsigned char a_new_uc_tmp2[160000];// А-Фурье (А-Д) 256гр - одном

unsigned char b_new_uc_tmp2[160000];// В-Фурье (А-Д) 256гр - одном

int i1, i2, i, j;

unsigned char f_new[400][400];

long double korr_b[160000]; // корр

long double korr_b_tmp[400][400];

unsigned char korr_b_uc[160000];//

long double korr_b_max;

int pik_a_x;

int pik_a_y;

int pik_b_x;

int pik_b_y;

int pik_a;

int pik_b;

int k,l;

Graphics::TBitmap *Bmp0 = new Graphics::TBitmap();

Graphics::TBitmap *Bmp1 = new Graphics::TBitmap();

Graphics::TBitmap *Bmp2 = new Graphics::TBitmap();

Graphics::TBitmap *Bmp3 = new Graphics::TBitmap();

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

//Запрещение выполнения операций до загрузки исходного РЛИ

Button2->Enabled=false;

Button3->Enabled=false;

Button4->Enabled=false;

Button5->Enabled=false;

Button6->Enabled=false;

Button7->Enabled=false;

N6->Enabled=false;

N7->Enabled=false;

N9->Enabled=false;

N10->Enabled=false;

}

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{ //Окрытие исходного изображения

try

{

if (OpenPictureDialog1->Execute())

Bmp0->LoadFromFile(OpenPictureDialog1->FileName);

Bmp0->PixelFormat = pf8bit;

Ptr0 = (PBMP_Arr *)Bmp0->ScanLine[Bmp0->Height-1];

for (i_c=Bmp0->Height-1;i_c>=0;i_c--)

CopyMemory((void *)&f[Bmp0->Width*i_c],Bmp0->ScanLine[i_c],Bmp0->Width);

Image1->Width = Bmp0->Width;

Image1->Height = Bmp0->Height;

Image1->Canvas->Draw(0,0, Bmp0);

//разрешение выполнения операций

Button2->Enabled=true;

Button4->Enabled=true;

Button5->Enabled=true;

N6->Enabled=true;

N9->Enabled=true;

N10->Enabled=true;

//Загрузка исходного РЛИ в соответствующих массив

i = 0;

for (i1=0;i1<Bmp0->Height;i1++)

{

for (i2=0;i2<Bmp0->Width;i2++)

{

if (RadioButton1->Checked == True)

{

f_new[i1][i2] = 0x01 && f[i];

f2[i] = 0x01 && f[i];

}

else

{

f_new[i1][i2] = f[i];

f2[i] = f[i];

}

i++;

}

}

}

//обработка попытки открытия изображения неподходящего формата

catch(Exception *ex)

{

MessageBox(NULL, "Выбран неверный формат изображения", "Ошибка!", MB_OK | MB_ICONERROR);

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

//разрешение выполнения операций

Button3->Enabled=true;

Button6->Enabled=true;

Button7->Enabled=true;

N7->Enabled=true;

//основной цикл Фурье-преобразования

//Более подробное описание - в пояснительной записке

//к дипломному проекту

kol_k = 100;

for (k=0;k<Bmp0->Height;k++)

{

for (l=0;l<Bmp0->Width;l++)

{

a1_tmp = 0;

b1_tmp = 0;

for (i1=0;i1<Bmp0->Height;i1++)

{

a2_tmp = 0;

b2_tmp = 0;

for (i2=0;i2<Bmp0->Width;i2++)

{

a2_tmp = a2_tmp + f_new[i1][i2]*cos(2*M_PI*k*i1/Bmp0->Height + 2*M_PI*l*i2/Bmp0->Width);

b2_tmp = b2_tmp + f_new[i1][i2]*sin(2*M_PI*k*i1/Bmp0->Height + 2*M_PI*l*i2/Bmp0->Width);

}

a1_tmp = a1_tmp + a2_tmp;

b1_tmp = b1_tmp + b2_tmp;

}

a_new[k][l] = a1_tmp / Bmp0->Height / Bmp0->Width;

b_new[k][l] = b1_tmp * (-1) / Bmp0->Height / Bmp0->Width;

}

}

i = 0;

for (i1=0;i1<Bmp0->Height;i1++)

for (i2=0;i2<Bmp0->Width;i2++)

{

a_new_uc[i1][i2] = floor(a_new[i1][i2] + 0.5);

a_new_uc_tmp[i] = a_new_uc[i1][i2];

b_new_uc[i1][i2] = floor(b_new[i1][i2] + 0.5);

b_new_uc_tmp[i] = b_new_uc[i1][i2];

i++;

}

// Вывод коэффициента A в графической форме

Bmp1->PixelFormat = pf8bit; //формат

Bmp1->Width = Bmp0->Width; //ширина

Bmp1->Height = Bmp0->Height;//высота

Ptr1 = (PBMP_Arr *)Bmp1->ScanLine[Bmp1->Height-1];

LogPal SysPal;

TCanvas *tempCanvas = new TCanvas;

HWND notUsed;

tempCanvas->Handle = GetDeviceContext(notUsed);

SysPal.lpal.palVersion = 0x300;

SysPal.lpal.palNumEntries = 256;

GetSystemPaletteEntries(tempCanvas->Handle,0,256,SysPal.lpal.palPalEntry);

for(i=0;i<=255;i++)

{

SysPal.lpal.palPalEntry[i].peRed = i; //красный канал

SysPal.lpal.palPalEntry[i].peGreen = i;//зеленый канал

SysPal.lpal.palPalEntry[i].peBlue = i; //синий канал

}

Bmp1->Palette = CreatePalette((const tagLOGPALETTE *)&SysPal.lpal);

Ptr1 = (PBMP_Arr *)Bmp1->ScanLine[Bmp1->Height-1];

for (i_c=Bmp0->Height-1;i_c>=0;i_c--)

CopyMemory(Bmp1->ScanLine[i_c],(void *)&a_new_uc_tmp[(Bmp1->Width)*i_c],Bmp1->Width);

Image2->Width = Bmp0->Width;

Image2->Height = Bmp0->Height;

Image2->Canvas->Draw(0,0, Bmp1);

// Вывод коэффициента B

Bmp2->PixelFormat = pf8bit; //формат

Bmp2->Width = Bmp0->Width; //ширина

Bmp2->Height = Bmp0->Height;//высота

Ptr2 = (PBMP_Arr *)Bmp2->ScanLine[Bmp2->Height-1];

LogPal SysPal2;

TCanvas *tempCanvas2 = new TCanvas;

HWND notUsed2;

tempCanvas2->Handle = GetDeviceContext(notUsed2);

SysPal2.lpal.palVersion = 0x300;

SysPal2.lpal.palNumEntries = 256;

GetSystemPaletteEntries(tempCanvas2->Handle,0,256,SysPal2.lpal.palPalEntry);

for(i=0;i<=255;i++)

{

SysPal2.lpal.palPalEntry[i].peRed = i; //красный канал

SysPal2.lpal.palPalEntry[i].peGreen = i;//зеленый канал

SysPal2.lpal.palPalEntry[i].peBlue = i; //синий канал

}

Bmp2->Palette = CreatePalette((const tagLOGPALETTE *)&SysPal2.lpal);

Ptr2 = (PBMP_Arr *)Bmp2->ScanLine[Bmp2->Height-1];

for (i_c=Bmp0->Height-1;i_c>=0;i_c--)

CopyMemory(Bmp2->ScanLine[i_c],(void *)&b_new_uc_tmp[(Bmp2->Width)*i_c],Bmp2->Width);

Image3->Width = Bmp0->Width;

Image3->Height = Bmp0->Height;

Image3->Canvas->Draw(0,0, Bmp2);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{ // восстановление РЛИ

// Обратное Фурье-преобразование

i1 = 0;

i2 = 0;

i = 0;

for(i1=0;i1<Bmp0->Height;i1++)

{

for(i2=0;i2<Bmp0->Width;i2++)

{

f1_v[i1*Bmp0->Width + i2] = 0;

for (k=0;k<Bmp0->Height;k++)

{

for (l=0;l<Bmp0->Width;l++)

{

f1_v[i1*Bmp0->Width + i2] = f1_v[i1*Bmp0->Width + i2] +

a_new[k][l] * cos(2*M_PI*k*i1/Bmp0->Height + 2*M_PI*l*i2/Bmp0->Width) -

b_new[k][l] * sin(2*M_PI*k*i1/Bmp0->Height + 2*M_PI*l*i2/Bmp0->Width);

}

}

f1_v[i1*Bmp0->Width + i2] = f1_v[i1*Bmp0->Width + i2] * 1 ;

}

}

// восстановление РЛИ

// визуальное отображение восстановленного РЛИ

long int tmp_x;

if (RadioButton1->Checked == True)

{

for (i=0;i<(Bmp0->Height)*(Bmp0->Width);i++)

{

f1_vc[i] = floor (f1_v[i] + 0.5) * 256; //

if (f1_vc[i] > 255) f1_vc[i] = 255;

}

}

else

{

for (i=0;i<(Bmp0->Height)*(Bmp0->Width);i++)

{

f1_vc[i] = floor (f1_v[i] + 0.5); // * 255

}

}

// Вывод восстановленного РЛИ

Bmp3->PixelFormat = pf8bit;

Bmp3->Width = Bmp0->Width; //ширина

Bmp3->Height = Bmp0->Height;

Ptr3 = (PBMP_Arr *)Bmp3->ScanLine[Bmp3->Height-1];

LogPal SysPal3;

TCanvas *tempCanvas3 = new TCanvas;

HWND notUsed3;

tempCanvas3->Handle = GetDeviceContext(notUsed3);

SysPal3.lpal.palVersion = 0x300;

SysPal3.lpal.palNumEntries = 256;

GetSystemPaletteEntries(tempCanvas3->Handle,0,256,SysPal3.lpal.palPalEntry);

for(i=0;i<=255;i++)

{

SysPal3.lpal.palPalEntry[i].peRed = i;

SysPal3.lpal.palPalEntry[i].peGreen = i;

SysPal3.lpal.palPalEntry[i].peBlue = i;

}

Bmp3->Palette = CreatePalette((const tagLOGPALETTE *)&SysPal3.lpal);

Ptr3 = (PBMP_Arr *)Bmp3->ScanLine[Bmp3->Height-1];

for (i_c=Bmp0->Height-1;i_c>=0;i_c--)

CopyMemory(Bmp3->ScanLine[i_c],(void *)&f1_vc[(Bmp3->Width)*i_c],Bmp3->Width);

Image4->Width = Bmp0->Width;

Image4->Height = Bmp0->Height;

Image4->Canvas->Draw(0,0, Bmp3);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)

{

//Процедура поворота РЛИ на произвольный угол

try{

int angle=StrToFloat(Edit1->Text); //угол поворота

Graphics::TBitmap *SrcBitmap=new Graphics::TBitmap;

Graphics::TBitmap *DestBitmap=new Graphics::TBitmap;

SrcBitmap=Image1->Picture->Bitmap;

// преобразуем градусы в радианы

float radians=(2*3.1416*angle)/360;

float cosine=(float)cos(radians);

float sine=(float)sin(radians);

float Point1x=(-SrcBitmap->Height*sine);

float Point1y=(SrcBitmap->Height*cosine);

float Point2x=(SrcBitmap->Width*cosine-SrcBitmap->Height*sine);

float Point2y=(SrcBitmap->Height*cosine+SrcBitmap->Width*sine);

float Point3x=(SrcBitmap->Width*cosine);

float Point3y=(SrcBitmap->Width*sine);

//Расчет координат результирующего изображения

float minx=0;

if (minx>Point1x)

{minx=Point1x;}

if (minx>Point2x)

{minx=Point2x;}

if (minx>Point3x)

{minx=Point3x;}

//Расчет координат результирующего изображения

float miny=0;

if (miny>Point1y)

{miny=Point1y;}

if (miny>Point2y)

{miny=Point2y;}

if (miny>Point3y)

{miny=Point3y;}

//Расчет координат результирующего изображения

float maxx=Point1x;

if (maxx<Point2x)

{maxx=Point2x;}

if (maxx<Point3x)

{maxx=Point3x;}

//Расчет координат результирующего изображения

float maxy=Point1y;

if (maxy<Point2y)

{maxy=Point2y;}

if (maxy<Point3y)

{maxy=Point3y;}

//Расчет координат результирующего изображения

int DestBitmapWidth=2*(int)ceil(maxx-minx);

int DestBitmapHeight=2*(int)ceil(maxy-miny);

DestBitmap->Height=DestBitmapHeight;

DestBitmap->Width=DestBitmapWidth;

//отображение повернутого РЛИ

for(int x=0;x<DestBitmapWidth;x++)

{

for(int y=0;y<DestBitmapHeight;y++)

{

int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine);

int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine);

if(SrcBitmapx>=0&&SrcBitmapx<SrcBitmap->Width&&SrcBitmapy>=0&&

SrcBitmapy<SrcBitmap->Height)

{

DestBitmap->Canvas->Pixels[x][y]=

SrcBitmap->Canvas->Pixels[SrcBitmapx][SrcBitmapy];

}

}

}

Image5->Picture->Bitmap=DestBitmap;

DestBitmap = NULL;

SrcBitmap = NULL;

}

catch(Exception *ex)

{

MessageBox(NULL, "Неверно задан угол поворота", "Ошибка!", MB_OK | MB_ICONERROR);

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)

{

//процедура масштабирования исходного РЛИ

try{

if (StrToFloat(Edit2->Text)>50 | StrToFloat(Edit2->Text)<0)

{MessageBox(NULL, "Масштаб слишком велик или мал", "Ошибка!", MB_OK | MB_ICONERROR);}

else {

for (int i=0; i<Image6->Width;i++)

{

for (int j=0; j<Image6->Height;j++)

{

Image6->Canvas->Pixels[i][j]=(255,255,255);

}

}

int WidthSource, HeightSource; // исходные размеры

int WidthDest, HeightDest; // конечные размеры

Graphics::TBitmap *sour = new Graphics::TBitmap();

Graphics::TBitmap *dest = new Graphics::TBitmap();

Image6->Height=Image1->Height*StrToFloat(Edit2->Text);

Image6->Width=Image1->Width*StrToFloat(Edit2->Text);

sour=Image1->Picture->Bitmap;

WidthSource = sour->Width;

HeightSource = sour->Height;


Подобные документы

  • Сигнал как некоторое средство для передачи информации. Знакомство с параллельными алгоритмами двумерного быстрого преобразования Фурье, анализ способов вычисления. Общая характеристика процессора Power5 64-bit RISC. Рассмотрение функций библиотеки MPI.

    дипломная работа [1,6 M], добавлен 09.10.2013

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

    лабораторная работа [228,8 K], добавлен 13.11.2010

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

    дипломная работа [3,0 M], добавлен 29.11.2011

  • Обработка изображений на современных вычислительных устройствах. Устройство и представление различных форматов изображений. Исследование алгоритмов обработки изображений на базе различных архитектур. Сжатие изображений на основе сверточных нейросетей.

    дипломная работа [6,1 M], добавлен 03.06.2022

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

    дипломная работа [8,0 M], добавлен 23.09.2012

  • Общая информация о графическом формате. Описание формата Microsoft Windows Bitmap. Структура файла DDВ исходного формата ВМР. Преобразования графических файлов. Просмотр и редактирование растровых изображений. Создание многодокументного приложения.

    дипломная работа [1,5 M], добавлен 06.06.2010

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

    курсовая работа [2,3 M], добавлен 15.04.2019

  • Цифровые рентгенографические системы. Методы автоматического анализа изображений в среде MatLab. Анализ рентгеновского изображения. Фильтрация, сегментация, улучшение изображений. Аппаратурные возможности предварительной нормализации изображений.

    курсовая работа [890,9 K], добавлен 07.12.2013

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

    реферат [573,5 K], добавлен 15.01.2017

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

    дипломная работа [1,7 M], добавлен 27.03.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.