Программа пороговой обработки изображения
Задачи цифровой обработки изображений. Методы пороговой сегментации. Создание программы представления рисунка в виде матрицы и применения к нему пороговой обработки. Разработка интерфейса программы загрузки и фильтрации изображения с выбранным порогом.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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