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

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


Аннотация к работе
Задание на курсовую работу Разработка алгоритма решения задачи 1.

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

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

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

Изображение должно загружаться из 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 " МАХШИРИНА= " edit6.text);

writeln(fail,"MINВЫСОТА= " edit7.text " МАХВЫСОТА= " 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("Хнач=" edit1.text " Хкон=" edit3.text);

memo1.Lines.Add("Унач=" edit2.text " Укон=" 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(edit7.text))and ((YKVKON-YKVNACH 1)<=strtoint(edit8.text)) then begin objekt:=objekt 1;

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

memo1.Lines.Add("Хнач=" inttostr(Xkvnach) " Хкон=" inttostr(Xkvkon));

memo1.Lines.Add("Унач=" inttostr(ykvnach) " Укон=" 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.

Размещено на
Заказать написание новой работы



Дисциплины научных работ



Хотите, перезвоним вам?