Программа пороговой обработки изображения

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

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

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

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

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

Содержание

Задание на курсовую работу

Введение

1. Разработка алгоритма решения задачи

1.1 Методы пороговой сегментации

1.2 Блок схема алгоритма программы

2. Разработка интерфейса программы

2.1 Загрузка и фильтрация изображения с выбранным порогом

2.2 Поиск объекта на бинарном изображении

Заключение

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

Приложение

Задание на курсовую работу

Разработать программу пороговой обработки изображения.

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

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

Введение

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

Задачи цифровой обработки изображений можно разделить на две основные категории:

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

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

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

1. Разработка алгоритма решения задачи

1.1 Методы пороговой сегментации

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

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

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

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

1.2 Блок схема алгоритма программы

Общая блок схема алгоритма программы представлена на рис. 1, которая состоит из семи блоков. Более подробная блок схема алгоритма блока 2 и 3 представлена на рис. 2 и рис. 3(а,б) соответственно. В блоке 5 происходит поиск объекта на бинарном изображении, в области поиска, выделенной пользователем.

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

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

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

2. Разработка интерфейса программы

Программа состоит из трех форм (Form):

Form1 - Рабочая среда (рис. 5)

Form2 -Титульный лист (рис. 4)

В программе задействовано 45 процедур.

Рис.4

После запуска программы появляется первая форма (рис. 4), которая является заставкой этой работы, и несет информацию о разработчике и о теме курсовой работы. Через 5 секунд появляется активная кнопка внизу формы, с названием "Перейти к программе", по нажатию которой появится рабочая среда программы (рис. 5).

Рис.5

Кнопка "Открыть изображение" предназначена для загрузки изображения с помощью диалогового окна.

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

2.1 Загрузка и фильтрация изображения с выбранным порогом

При нажатии кнопки "открыть изображение" пользователю предоставляется возможность выбора BMP файла, содержащего изображения (рис. 6).

Рис.6

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

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

Рис.7

2.2 Поиск объекта на бинарном изображении

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

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

Рис.8

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

Рис.9

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

Сохраненный текстовый файл будет иметь следующий вид (рис. 10).

Рис.10

В меню "вид" можно изменить цвет фона канвы и двух нижних панелей.

Заключение

В результате выполнения данной курсовой работы была разработана программа, обрабатывающая изображение выбранным порогом (автоматически или вручную) и определяющая местоположения объекта на бинарном изображении. Было проведено исследование компонентов программной среды Borland Turbo Delphi, которые могут использоваться для создания подобного рода программ.

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

пороговый сегментация программа изображение

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

1) Селяев А.А. "Конспект лекций по ПиОА";

2) Селяев А.А. "Обзор и часть диплома";

3) http://www.DelphiSources.ru/;

4) http://www.programmersforum.ru/

Приложение

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, jpeg, ExtCtrls, MPlayer, StdCtrls;

type

TForm1 = class(TForm)

Image1: TImage;

MediaPlayer1: TMediaPlayer;

Timer1: TTimer;

Label1: TLabel;

procedure FormActivate(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure Label1MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

procedure Label1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

var

sec: integer; // секунды

procedure TForm1.FormActivate(Sender: TObject);

begin

MediaPlayer1.Play;

Form1.Timer1.Enabled:=True

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

sec:=sec+1;

If sec=5 then label1.show;

if (sec mod 2) = 1

then begin label1.Font.color:=clGreen; label1.Color:=ClYellow; end

else begin label1.Font.color:=clYellow;label1.Color:=clgreen ; end;

end;

procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

label1.Cursor:=crHandPoint

end;

procedure TForm1.Label1Click(Sender: TObject);

begin

Form2.show;

Form1.Hide;

Mediaplayer1.Stop;

Timer1.Enabled:=False;

end;

end.

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, StdCtrls, ExtDlgs,math, ExtCtrls,shellapi;

type

TForm2 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

SaveDialog1: TSaveDialog;

Label2: TLabel;

Label3: TLabel;

Timer1: TTimer;

N11: TMenuItem;

N12: TMenuItem;

N21: TMenuItem;

N31: TMenuItem;

N41: TMenuItem;

Panel1: TPanel;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Label6: TLabel;

Label5: TLabel;

N13: TMenuItem;

N14: TMenuItem;

N15: TMenuItem;

ColorDialog1: TColorDialog;

Panel2: TPanel;

Button4: TButton;

GroupBox1: TGroupBox;

Edit1: TEdit;

Label7: TLabel;

Label8: TLabel;

Edit3: TEdit;

Label9: TLabel;

Edit2: TEdit;

Edit4: TEdit;

Label10: TLabel;

GroupBox2: TGroupBox;

Label11: TLabel;

Label13: TLabel;

Edit5: TEdit;

Edit7: TEdit;

Button5: TButton;

Memo1: TMemo;

Button6: TButton;

N2: TMenuItem;

Edit6: TEdit;

Edit8: TEdit;

Label20: TLabel;

Label21: TLabel;

GroupBox3: TGroupBox;

Label1: TLabel;

Label4: TLabel;

ScrollBar1: TScrollBar;

Label12: TLabel;

Label14: TLabel;

Label15: TLabel;

Label16: TLabel;

Label17: TLabel;

Label18: TLabel;

Label19: TLabel;

Label22: TLabel;

Label23: TLabel;

Label24: TLabel;

Label25: TLabel;

Label26: TLabel;

Label27: TLabel;

Label28: TLabel;

Label29: TLabel;

Label30: TLabel;

Label31: TLabel;

Label32: TLabel;

OpenDialog1: TOpenDialog;

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure N6Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure N8Click(Sender: TObject);

procedure ScrollBar1Change(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure N12Click(Sender: TObject);

procedure N21Click(Sender: TObject);

procedure N31Click(Sender: TObject);

procedure N41Click(Sender: TObject);

procedure N14Click(Sender: TObject);

procedure N15Click(Sender: TObject);

procedure Edit1Change(Sender: TObject);

procedure Edit3Change(Sender: TObject);

procedure Edit2Change(Sender: TObject);

procedure Edit4Change(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

procedure FormMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Button6Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

procedure Edit3KeyPress(Sender: TObject; var Key: Char);

procedure Edit4KeyPress(Sender: TObject; var Key: Char);

procedure Edit5KeyPress(Sender: TObject; var Key: Char);

procedure Edit7KeyPress(Sender: TObject; var Key: Char);

procedure N7Click(Sender: TObject);

procedure Edit5Change(Sender: TObject);

procedure Edit7Change(Sender: TObject);

procedure Edit6Change(Sender: TObject);

procedure Edit8Change(Sender: TObject);

procedure N5Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var//newmatr,matr-матрицы сод исх и бин изображ;ykon,ynach,xnach,xkon-коорд обл поиск

Form2: TForm2;

newmatr,matr:array[1..1000,1..1000] of byte;

ykon,ynach,xnach,xkon:integer;

x,y,nx,ny,k,i:integer;

a,form,objekt:byte;

c:TColor;

startwork:string;

new,move:boolean;

implementation

uses Unit1, Unit3;

{$R *.dfm}

procedure pryamoug(xnach,ynach,xkon,ykon,nx:integer);//процедура рисования прямоугольника

begin

form2.canvas.Pen.Width:=1;

form2.Canvas.Pen.Style:=psdot;

Form2.Canvas.Brush.style:=bsclear;

Form2.Canvas.Rectangle(xnach+nx+41,ynach+21,xkon+41+nx,ykon+21);

end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);//Нажатие на кнопку закрытия окна

begin

if N9.Enabled=true then k:=messagedlg('Вы хотите сохранить результаты работы программы?',mtwarning, [mbYes,mbNo],0);

if k=6 then N9.Click;

Form1.Close;

end;

procedure TForm2.N6Click(Sender: TObject);//Вызов формы "о программе"

begin

Form3.showmodal

end;

procedure TForm2.N9Click(Sender: TObject);//Сохранение результатов работы программы

var

Fail: textfile;

begin

savedialog1.Filter:='*.txt | *.txt';

if savedialog1.execute then

begin

n9.Enabled:=false;

savedialog1.FileName:= changeFileExt(savedialog1.FileName,'.txt');

assignFile(fail,savedialog1.FileName);

rewrite(fail);

writeln(fail,'Время и дата начала работы программы: '+ startwork);

writeln(fail,'');

writeln(fail,'Имя файла: '+opendialog1.FileName);

writeln(fail,'Разрешение: '+inttostr(nx)+'x'+inttostr(ny));

writeln(fail,'');

writeln(fail,'Выбранный порог обработки изображения :'+inttostr(scrollbar1.position));

writeln(fail,'');

writeln(fail,'Предпологаемые размеры объекта: ');

writeln(fail,'minШирина= '+edit5.text + ' maxШирина= '+edit6.text);

writeln(fail,'minВысота= '+edit7.text + ' maxВысота= '+edit8.text);

writeln(fail,'');

writeln(fail, memo1.text);

writeln(fail, 'Время обнаружения объекта: '+ Formatdatetime('c',now));

closefile(fail);

showmessage('Файл '+savedialog1.FileName +' успешно сохранен');

end;

end;

procedure TForm2.Button2Click(Sender: TObject);//Фильтрация изображения с выьранным порогом

begin

for y:=1 to ny do

for x:=nx downto 1 do

begin

a:=matr[x,y];

if a<scrollbar1.position then a:=0 else a:=255;

newmatr[x,y]:=a;

c:=$00010101*a;

form2.Canvas.Pixels[x+40+nx,y+20]:=c;

end;

label3.Left:=40+nx;

label3.Show;

button3.Show;

button5.Enabled:=false;

new:=true;

end;

procedure TForm2.Button3Click(Sender: TObject);//Отобразить вторую панель

begin

Panel2.Show;

end;

procedure TForm2.N8Click(Sender: TObject);//Загрузка изображения на канву

var

f:file of byte;

mas:array[18..25] of byte;

begin

N7.Click ;

opendialog1.Filter:='*.bmp | *.bmp';

if opendialog1.Execute then

begin

assignfile(f,opendialog1.FileName);

reset(f);

for i:=18 to 21 do

begin

seek(f,i);

read(f,a);

mas[i]:=a;

seek(f,i+4);

read(f,a);

mas[i+4]:=a;

end;

nx:=mas[18]+mas[19]*256+mas[20]*256+mas[21]*256;

ny:=mas[22]+mas[23]*256+mas[24]*256+mas[25]*256;

k:=filesize(f);

for y:=1 to ny do

for x:=nx downto 1 do

begin

seek(f,k-1);

read(f,a);

matr[x,y]:=a;

c:=$00010101*a;

form2.Canvas.Pixels[x+20,y+20]:=c;

k:=k-1;

end;

label2.Left:=20;

label2.Show;

label1.Show;

label4.Show;

button2.Show;

scrollbar1.Show;

closefile(f);

groupbox3.show;

end;

end;

procedure TForm2.ScrollBar1Change(Sender: TObject);//Изменение значение scrollBar

begin

label1.Caption:=inttostr(scrollbar1.position) ;

end;

procedure TForm2.FormCreate(Sender: TObject);

begin

form2.Height:=700;

form2.Width:=1000;

form:=1;

label12.color:=$00010101*0;

label14.color:=$00010101*16;

label15.color:=$00010101*32;

label16.color:=$00010101*48;

label17.color:=$00010101*64;

label18.color:=$00010101*80;

label19.color:=$00010101*96;

label22.color:=$00010101*112;

label23.color:=$00010101*128;

label24.color:=$00010101*144;

label25.color:=$00010101*160;

label26.color:=$00010101*176;

label27.color:=$00010101*192;

label28.color:=$00010101*208;

label29.color:=$00010101*224;

label30.color:=$00010101*240;

label31.color:=$00010101*255;

startwork:=FormatDatetime('c',now);

end;

procedure TForm2.Timer1Timer(Sender: TObject);//процедура таймера

begin

case form of

1:label5.Caption:=FormatDatetime('c ',now);

2:label5.Caption:=FormatDatetime('m, tt ',now);

3:label5.Caption:=FormatDatetime('dddd, t ',now);

4:label5.Caption:=FormatDatetime('ddddd, t',now);

end;

if new=false then

begin

form2.canvas.Pen.Color:=clgreen;

pryamoug(xnach,ynach,xkon,ykon,nx);

end;

end;

procedure TForm2.N12Click(Sender: TObject);//выбор формата отображения часов

begin

form:=1;

end;

procedure TForm2.N21Click(Sender: TObject);//выбор формата отображения часов

begin

form:=2

end;

procedure TForm2.N31Click(Sender: TObject);//выбор формата отображения часов

begin

form:=3;

end;

procedure TForm2.N41Click(Sender: TObject);//выбор формата отображения часов

begin

form:=4;

end;

procedure TForm2.N14Click(Sender: TObject);//выбор цветовой схемы формы

begin

if colordialog1.Execute then

Form2.Color:=colordialog1.Color;

end;

procedure TForm2.N15Click(Sender: TObject);//выбор цветовой формы панели

begin

if colordialog1.Execute then

Form2.Panel1.Color:=colordialog1.Color;

Form2.Panel2.Color:=colordialog1.Color;

end;

procedure TForm2.Edit1Change(Sender: TObject);//процедура изменения полей edit в Области поиска

begin

new:=false;

form2.canvas.Pen.Color:=clwhite;

pryamoug(xnach,ynach,xkon,ykon,nx);

if strtoint(edit1.text)<0 then edit1.text:='0';

if strtoint(edit1.text)>nx then edit1.Text:=inttostr(nx);

xnach:=strtoint(edit1.Text);

button6.Enabled:=true;

end;

procedure TForm2.Edit3Change(Sender: TObject);//процедура изменения полей edit в Области поиска

begin

new:=false;

form2.canvas.Pen.Color:=clwhite;

pryamoug(xnach,ynach,xkon,ykon,nx);

if strtoint(edit3.text)<0 then edit3.text:='0';

if strtoint(edit3.text)>nx then edit3.Text:=inttostr(nx);

xkon:=strtoint(edit3.Text);

button6.Enabled:=true;

end;

procedure TForm2.Edit2Change(Sender: TObject);//процедура изменения полей edit в Области поиска

begin

new:=false;

form2.canvas.Pen.Color:=clwhite;

pryamoug(xnach,ynach,xkon,ykon,nx);

if strtoint(edit2.text)<0 then edit2.text:='0';

if strtoint(edit2.text)>ny then edit2.Text:=inttostr(ny);

ynach:=strtoint(edit2.Text);

button6.Enabled:=true;

end;

procedure TForm2.Edit4Change(Sender: TObject);//процедура изменения полей edit в Области поиска

begin

new:=false;

form2.canvas.Pen.Color:=clwhite;

pryamoug(xnach,ynach,xkon,ykon,nx);

if strtoint(edit4.text)<0 then edit4.text:='0';

if strtoint(edit4.text)>ny then edit4.Text:=inttostr(ny);

ykon:=strtoint(edit4.Text);

button6.Enabled:=true;

end;

procedure TForm2.Button4Click(Sender: TObject);//Процедура выделения области

begin

new:=false;

form2.Cursor:=crCross;

Button6.Enabled:=true;

end;

procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);//нажатие на клавиши мыши при выделение

begin

if form2.Cursor=crcross then

begin

move:=true;

x:=x-nx-41;y:=y-21;

edit1.text:=inttostr(X);

edit2.text:=inttostr(Y);

end;

end;

procedure TForm2.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);//переменщение курсора мыши во время процедуры выделения

begin

if move=true then

begin

x:=x-nx-41;y:=y-21;

edit3.Text:=inttostr(x);

edit4.Text:=inttostr(y);

end;

end;

procedure TForm2.FormMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);//отпускание клавиши мыши

begin

if form2.Cursor=crcross then

begin

move:=false;

x:=x-nx-41;y:=y-21;

edit3.Text:=inttostr(x);

edit4.Text:=inttostr(y);

end;

end;

procedure TForm2.Button6Click(Sender: TObject);//Конец выделения области

var b:string;

begin

for y:=1 to ny do

for x:=nx downto 1 do

begin

form2.Cursor:=crDefault;

a:=newmatr[x,y];

c:=$00010101*a;

form2.Canvas.Pixels[x+40+nx,y+20]:=c;

end;

form2.Canvas.Pen.Color:=clgreen;

pryamoug(xnach,ynach,xkon,ykon,nx);

Button6.Enabled:=false;

Button5.Enabled:=true;

if strtoint(edit1.text)>strtoint(edit3.text) then begin b:=edit1.text; edit1.Text:=edit3.Text; edit3.Text:=b;end;

if strtoint(edit2.text)>strtoint(edit4.text) then begin b:=edit2.text; edit2.Text:=edit4.Text; edit4.Text:=b;end;

button6.Enabled:=False;

end;

procedure TForm2.N2Click(Sender: TObject);//Закрытие программы

begin

Form1.close;

end;

procedure TForm2.Button5Click(Sender: TObject);//Процедура поиска объекта

var

summ2,summ,ykvkon,x,xkvnach,yKVnach, xKVkon,r,b:integer;

xkv:array [0..1000] of byte;

newmatrOb:array [0..500,0..500] of byte;

est,Yest,yest1:boolean;

begin

if (strtoint(edit6.text)=0) or (strtoint(edit8.text)=0) then

begin

messagedlg('Размеры объекта не указаны, пожалуйста укажите их', mtInformation, [mbOk],0);

exit

end;

if (strtoint(edit6.text)< strtoint(edit5.text)) or (strtoint(edit8.text)< strtoint(edit7.text))then

begin

messagedlg('Размеры объекта введены не коректно', mterror, [mbOk],0);

exit;

end;

N9.Enabled:=true;

memo1.Clear;

memo1.Lines.Add('Область поиска');

memo1.Lines.Add('Xнач='+edit1.text+' Xкон='+edit3.text);

memo1.Lines.Add('Yнач='+edit2.text+ ' Yкон='+edit4.text);

est:=false;

Yest:=false;

summ:=0;

objekt:=0;

for ynach:=strtoint(edit2.text) to ykon do

for xnach:=(strtoint(edit1.text)) to xkon do

form2.Canvas.Pixels[nx+40+xnach,ynach+20]:=$00010101*newmatr[xnach,ynach];

form2.canvas.Pen.Width:=1;

form2.canvas.Pen.Color:=clgreen;

Form2.Canvas.Brush.style:=bsclear;

form2.Canvas.Pen.Style:=psdot;

Form2.Canvas.Rectangle((strtoint(edit1.text))+nx+41,strtoint(edit2.text)+21,xkon+41+nx,ykon+21);

for ynach:=strtoint(edit2.text) to ykon do

begin

summ:=0;

yest1:=true;

if Yest=true then

begin

for xnach:=(strtoint(edit1.text)) to xkon do

begin

if newmatr[xnach,ynach]=255 then newmatrOb[xnach,ynach]:=1;

summ:=summ+newmatrOb[xnach,ynach];

end;

summ2:=(strtoint(edit3.text)-strtoint(edit1.text)+1);

if summ=summ2 then yest1:=false;

if yest1=false then

begin

yest:=false;

yest1:=true;

est:=false;

if ((XKVkon-XKVnach+1)>=strtoint(edit5.text)) and ((XKVkon-XKVnach+1)<=strtoint(edit6.text)) and ((yKVkon-yKVnach+1)>=strtoint(edit7.text))and ((yKVkon-yKVnach+1)<=strtoint(edit8.text)) then

begin

objekt:=objekt+1;

memo1.Lines.Add('Координаты области объекта '+inttostr(objekt)+':');

memo1.Lines.Add('Xнач='+inttostr(Xkvnach)+' Xкон='+inttostr(Xkvkon));

memo1.Lines.Add('Yнач='+inttostr(ykvnach)+' Yкон='+inttostr(ykvkon));

form2.canvas.Pen.Width:=2;

form2.Canvas.Pen.Color:=clred;

form2.Canvas.Rectangle(xkvnach+40+nx,ykvnach+20,nx+40+xkvkon,ykvkon+20);

end

end;

end;

for xnach:=strtoint(edit1.text) to xkon do

if newmatr[xnach,ynach]=0 then

begin

Yest:=true;

if xnach<xkvnach then xkvnach:=xnach;

if est=false then begin xkvnach:=xnach; ykvnach:=ynach; est:=true; end;

if xkvkon<xnach then xkvkon:=xnach;

if ykvkon<ynach then ykvkon:=ynach;

end;

end;

if objekt=0 then memo1.Lines.add('Объект не найден')

end;

procedure prov(var Key: Char);

begin

if not(key in ['0'..'9']) then key:=chr(0);

end;

procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

prov(key);

end;

procedure TForm2.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

prov(key);

end;

procedure TForm2.Edit3KeyPress(Sender: TObject; var Key: Char);

begin

prov(key);

end;

procedure TForm2.Edit4KeyPress(Sender: TObject; var Key: Char);

begin

prov(key);

end;

procedure TForm2.Edit5KeyPress(Sender: TObject; var Key: Char);

begin

prov(key);

end;

procedure TForm2.Edit7KeyPress(Sender: TObject; var Key: Char);

begin

prov(key);

end;

procedure TForm2.N7Click(Sender: TObject);//Создание нового проекта

begin

new:=true;

panel2.Hide;

label2.Hide;

label3.Hide;

button2.Hide;

button3.Hide;

groupbox3.Hide;

form2.canvas.pen.Color:=form2.Color;

form2.canvas.pen.style:=pssolid;

form2.canvas.Brush.Style:=bssolid;

form2.canvas.Brush.Color:=form2.Color;

form2.Canvas.Rectangle(0,0,2*nx+45,2*ny+20);

end;

procedure TForm2.Edit5Change(Sender: TObject);

begin

if strtoint(edit5.Text)>=nx then edit5.text:=inttostr(nx);

end;

procedure TForm2.Edit7Change(Sender: TObject);

begin

if strtoint(edit7.Text)>=ny then edit7.text:=inttostr(ny)

end;

procedure TForm2.Edit6Change(Sender: TObject);

begin

if strtoint(edit6.Text)>=nx then edit6.text:=inttostr(nx)

end;

procedure TForm2.Edit8Change(Sender: TObject);

begin

if strtoint(edit8.Text)>=ny then edit8.text:=inttostr(ny)

end;

procedure TForm2.N5Click(Sender: TObject);//Вызов справки

begin

ShellExecute(handle, nil, 'help\help.html', nil, nil, SW_SHOWNORMAL);

end;

end.

unit Unit3;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, jpeg, ExtCtrls;

type

TForm3 = class(TForm)

Image1: TImage;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Button1: TButton;

Label7: TLabel;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);

begin

Form3.Close;

end;

end.

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


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

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

    курсовая работа [4,7 M], добавлен 20.01.2016

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

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

  • Выбор методов обработки и сегментации изображений. Математические основы примененных фильтров. Гистограмма яркости изображения. Программная реализация комплексного метода обработки изображений. Тестирование разработанного программного обеспечения.

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

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

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

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

    курсовая работа [391,1 K], добавлен 30.09.2013

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

    дипломная работа [957,2 K], добавлен 10.06.2013

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

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

  • Методы обработки информации при решении прикладных задач. Математическая модель задачи. Блок-схема алгоритма программы. Компоненты, которые используются для работы в программе: элементы интерфейса; процедуры; операторы. Текст программы с пояснениями.

    курсовая работа [954,0 K], добавлен 07.01.2011

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

    курсовая работа [940,2 K], добавлен 24.06.2013

  • Основные категории изображений: растровые и векторные. Программы, работающие с растровыми изображениями. Инструменты для работы с обоими типами графики в программе Photoshop. Обзор современных программ обработки и просмотра графических изображений.

    курсовая работа [49,0 K], добавлен 20.09.2010

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