Выделение контуров изображения по методу Собела

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

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

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

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

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ

Государственное образовательное учреждение высшего профессионального образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

КАФЕДРА №

ОЦЕНКА

КУРСОВАЯ РАБОТА

ПРОГРАММА “Выделение контуров изображения по методу Собела”

по курсу: Объектно-ориентированное программирование

Санкт-Петербург

2013

ОГЛАВЛЕНИЕ

Цель курсовой работы

Вступление(общие сведения об языке программирования)

Краткое описание методов изменения контраста изображения

Алгоритм действий

Формализация программы

Блок-схема программы

Код программы

Список используемой литературы

ЦЕЛЬ КУРСОВОЙ РАБОТЫ

Разработать приложение для выделения контуров на изображении по методу Собела.

ВСТУПЛЕНИЕ (ОБЩИЕ СВЕДЕНИЕ ОБ ЯЗЫКЕ ПРОГРАМИРОВАНИЯ)

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

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

Такой метод построения программ часто называют абстракцией данных.

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

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

C++ и его стандартные библиотеки спроектированы так, чтобы

обеспечивать переносимость. Имеющаяся на текущий момент реализация

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

С++ builder - это среда разработки, в которой в качестве языка программирования используется C++ builder ( C++ builder - это расширенный язык C++, имеющий некоторые особенности, которых нет в оригинальном языке C++).

КРАТКОЕ ОПИСАНИЕ МЕТОДА СОБЕЛА

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

Рисунок 1. Нелинейный оператор растровых элементов

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

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

,

,

а затем значение функции

,

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

АЛГОРИТМ ДЕЙСТВИЙ

1) Создание пользовательского интерфейса.

2) Написание функции выделения перепадов яркости:

a) Определение коэффициентов

b) Выделение элементов, принадлежащих контуру яркости

с) Присваивание точкам, не удовлетворяющим контуру значения яркости .

3) Вывод полученного контура в пользовательский интерфейс.

ФОРМАЛИЗАЦИЯ ПРОГРАММЫ

приложение контур изображение

Краткое описание компонентов используемых в программе:

1) Image - обеспечивает вывод изображения в формате .bmp на форму.

2) Button - командная кнопка.

3) Label - метка для вывода текстовой информации на форму.

4) OpenDialog - позволяет видеть диалог для открытия изображения.

5) SaveDialog - позволяет видеть диалог для сохранения изображения.

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

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

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

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

Рисунок 2. Вид пользовательского интерфейса.

С помощью пункта меню “Загрузить изображение” пользователь может загрузить желаемое изображение на форму :

Рисунок 3. Вид формы c выделенным элементом “Загрузить изображение”.

После этого пользователю предлагается воспользоваться фильтром Собеля, результат будет показан в разделе обработанное изображение:

Рисунок 4. Вид формы c выделенным элементом “Применить фильтр Собеля”.

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

Рисунок 5. Вид формы c выделенным элементом “Сохранить результат”.

Далее пользователь может покинуть программу или применить метод Собеля для другого изображения.

БЛОК-СХЕМА ПРОГРАММЫ

КОД ПРОГРАММЫ

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

#include <vcl.h>

#pragma hdrstop

#include <vcl.h>

#include <math.h>

#pragma hdrstop

#include <tchar.h>

#pragma argsused

#include "Unit1.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

int GX[3][3], GY[3][3], sumX = 0, sumY = 0, SUM = 0;

Graphics::TBitmap *img = new Graphics::TBitmap;

img->LoadFromFile(OpenDialog1->FileName);

GX[0][0] = -1; GX[0][1] = 0; GX[0][2] = 1;

GX[1][0] = -2; GX[1][1] = 0; GX[1][2] = 2;

GX[2][0] = -1; GX[2][1] = 0; GX[2][2] = 1;

GY[0][0] = 1; GY[0][1] = 2; GY[0][2] = 1;

GY[1][0] = 0; GY[1][1] = 0; GY[1][2] = 0;

GY[2][0] = -1; GY[2][1] = -2; GY[2][2] = -1;

for (int Y = 0; Y < img->Height; Y++) {

for (int X = 0; X < img->Width; X++) {

sumX = 0;

sumY = 0;

if (Y == 0 || Y == img->Height)

SUM = 0;

else if (X == 0 || X == img->Width)

SUM = 0;

else {

for (int I = -1; I <= 1; I++) {

for (int J = -1; J <= 1; J++) {

int piX = J + X;

int piY = I + Y;

COLORREF pixVal = img->Canvas->Pixels[piX][piY];

int R = GetRValue(pixVal);

int G = GetGValue(pixVal);

int B = GetBValue(pixVal);

int NC = (R + G + B) / 3;

sumX = sumX + (NC) * GX[J + 1][I + 1];

sumY = sumY + (NC) * GY[J + 1][I + 1];

}

}

SUM = sqrt(pow(sumX,2) + pow(sumY,2));

}

if (SUM > 255)

SUM = 255;

if (SUM < 0)

SUM = 0;

int newPixel = SUM;

COLORREF newPixCol = RGB(newPixel, newPixel, newPixel);

img->Canvas->Pixels[X][Y] = newPixCol;

}

}

//img->SaveToFile("3.bmp");

Image2->Picture->Bitmap = img;

}

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{

if (OpenDialog1->Execute())

Image1->Picture->LoadFromFile(OpenDialog1->FileName);

}

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

void __fastcall TForm1::Button3Click(TObject *Sender)

{

if (SaveDialog1->Execute())

Image2->Picture->LoadFromFile(SaveDialog1->FileName);

}

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

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

Лаптев В.В “Экспресс курс С++”, БХВ, Санкт-Петербург 2004 г.

Страуструп Б. “Язык программирования С++”, Бином, Москва 2011 г.

Павловская Т.А “С++, Программирование на языке высокого уровня”, Питер , Санкт-Петербург 2003г.

Размещено на Allbest.ru


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

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

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

  • Анализ целевой аудитории. Функциональные характеристики пользовательского приложения. Разработка алгоритмов и интерфейса программного продукта, функций рабочей области. Написание скриптов на языке C#. Тестирование программы методом чёрного ящика.

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

  • Написание программы для вычисления функции f(x), изображенной на графике, используя оператор if. Построение графика функции. Составление программы, вычисляющей сумму 101 из последовательно расположенных нечетных чисел. Нахождение корней системы уравнений.

    контрольная работа [694,4 K], добавлен 07.08.2013

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

    курсовая работа [1,6 M], добавлен 14.06.2014

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

    курсовая работа [568,3 K], добавлен 07.03.2015

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

    контрольная работа [418,9 K], добавлен 23.04.2013

  • Представление графической информации в компьютере. Понятие пикселя и растрового изображения. Редактор растровой графики Photoshop. Инструменты выделения. Механизм выделения областей. Геометрические контуры выделения. Эффект растровой графики шум.

    контрольная работа [1,4 M], добавлен 01.02.2009

  • Передаточная функция кривой отклика. Структурная схема контуров регулирования. Определение настроек регуляторов по методу Зиглера-Никольса. Метод ограничения на частотный показатель колебательности. Проверка прямых и косвенных показателей качества.

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

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

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

  • Размещение элементов графического интерфейса, обработка событий в нем. Написание программы "Домино", результатом работы которой будет графический интерфейс, реализующий одноименную настольную игру. Объектная декомпозиция классов. Текст программы.

    курсовая работа [404,3 K], добавлен 13.10.2014

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