Разработка системы распознавания образов

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,06 Мб
  • Опубликовано:
    2013-11-14
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка системы распознавания образов














Курсовая работа

по дисциплине: Техническая кибернетика на транспорте

«Разработка системы распознавания образов»

ОГЛАВЛЕНИЕ

 

ВВЕДЕНИЕ

ПОСТАНОВКА ЗАДАЧИ

ФОРМАЛИЗАЦИЯ ЗАДАЧИ

Выбор типа и структуры нейронной сети

Выбор метода распознавания

ОБУЧЕНИЕ СИСТЕМ РАСПОЗНАВАНИЯ

РАЗРАБОТКА ПРОГРАММНО-МАТЕМАТИЧЕСКОГО ОБЕСПЕЧЕНИЯ

Описание работы с программой

Описание интерфейса пользователя, экранные формы

ЗАКЛЮЧЕНИЕ

ЛИТЕРАТУРА

ПРИЛОЖЕНИЕ

 


Введение


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

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

В процессе функционирования нейронная сеть формирует выходной сигнал Y в соответствии с входным сигналом X, реализуя некоторую функцию g: Y=g(X). Если архитектура сети задана, то вид функции g определяется значениями весов и смещений сети.

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

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

·   Многослойные нейронные сети. Нейроны в таких сетях делятся на группы с общим входным сигналом - слои. Различают несколько типов связей между слоями с номерами m и (m+s):

·   последовательные, если s=1,

·   прямые, если s>1,

·   обратные, если s<0.

·   Полносвязные нейронные сети. Каждый нейрон в полносвязных сетях связан со всеми остальными. На каждом такте функционирования сети на входы нейронов подается вешний входной сигнал и выходы нейронов предыдущего такта.

·   Нейронные сети с локальными связями. Нейроны в таких сетях располагаются в узлах прямоугольной решетки. Каждый нейрон связан с небольшим числом (4 или 8) своих топологических соседей.

·   Неструктурированные нейронные сети. К этой группе относятся все модели нейронных сетей, которые нельзя отнести ни к одной из предыдущих групп.

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

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

В данной курсовой работе разработана программа для распознавания символов, основой которой и является нейронная сеть.

Постановка задачи


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

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

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

Формализация задачи

 

Выбор типа и структуры нейронной сети

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

Выбор метода распознавания

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

Рис. 1. Структурная схема сети Хопфилда

Задача, решаемая данной сетью в качестве ассоциативной памяти, как правило, формулируется следующим образом. Известен некоторый набор двоичных сигналов (изображений, звуковых оцифровок, прочих данных, описывающих некие объекты или характеристики процессов), которые считаются образцовыми. Сеть должна уметь из произвольного неидеального сигнала, поданного на ее вход, выделить ("вспомнить" по частичной информации) соответствующий образец (если такой есть) или "дать заключение" о том, что входные данные не соответствуют ни одному из образцов. В общем случае, любой сигнал может быть описан вектором X = {xi: i=0...n-1}, n - число нейронов в сети и размерность входных и выходных векторов. Каждый элемент xi равен либо +1, либо -1. Обозначим вектор, описывающий k-ый образец, через Xk, а его компоненты, соответственно, - xik, k=0...m-1, m - число образцов. Когда сеть распознает (или "вспомнит") какой-либо образец на основе предъявленных ей данных, ее выходы будут содержать именно его, то есть Y = Xk, где Y - вектор выходных значений сети: Y = { yi: i=0,...n-1}. В противном случае, выходной вектор не совпадет ни с одним образцовым.

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

На стадии инициализации сети весовые коэффициенты синапсов устанавливаются следующим образом:

 (1)

Здесь i и j - индексы, соответственно, предсинаптического и постсинаптического нейронов; xik, xjk - i-ый и j-ый элементы вектора k-ого образца.

Алгоритм функционирования сети следующий (p - номер итерации):

. На входы сети подается неизвестный сигнал. Фактически его ввод осуществляется непосредственной установкой значений аксонов:

i(0) = xi, i = 0...n-1, (2)

поэтому обозначение на схеме сети входных синапсов в явном виде носит чисто условный характер. Ноль в скобке справа от yi означает нулевую итерацию в цикле работы сети.

. Рассчитывается новое состояние нейронов

, j=0...n-1 (3)

и новые значения аксонов

 (4)

где f - активационная функция в виде скачка, приведенная на Рис. а.

Рис. 2. Активационные функции.

3. Проверка, изменились ли выходные значения аксонов за последнюю итерацию. Если да - переход к пункту 2, иначе (если выходы застабилизировались) - конец. При этом выходной вектор представляет собой образец, наилучшим образом сочетающийся с входными данными.

Как говорилось выше, иногда сеть не может провести распознавание и выдает на выходе несуществующий образ. Это связано с проблемой ограниченности возможностей сети. Для сети Хопфилда число запоминаемых образов m не должно превышать величины, примерно равной 0.15•n. Кроме того, если два образа А и Б сильно похожи, они, возможно, будут вызывать у сети перекрестные ассоциации, то есть предъявление на входы сети вектора А приведет к появлению на ее выходах вектора Б и наоборот.

Очевидно, что все весовые коэффициенты синапсов одного слоя нейронов можно свести в матрицу W, в которой каждый элемент wij задает величину i-ой синаптической связи j-ого нейрона. Таким образом, процесс, происходящий в НС, может быть записан в матричной форме:

Y=F(XW) (5)

где X и Y - соответственно входной и выходной сигнальные векторы, F(V) - активационная функция, применяемая поэлементно к компонентам вектора V.

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

Обучение систем распознавания

нейронный сеть распознавание образ

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

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

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

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

Рис. 3. Единичный скачок

Из рисунка функции единичного скачка видно, что пороговое значение T, в общем случае, может принимать произвольное значение. Более того, оно должно принимать некое произвольное, неизвестное заранее значение, которое подбирается на стадии обучения вместе с весовыми коэффициентами. То же самое относится и к центральной точке сигмоидной зависимости, которая может сдвигаться вправо или влево по оси X, а также и ко всем другим активационным функциям. Это, однако, не отражено в формуле (1), которая должна была бы выглядеть так:

 (6)

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

 (7)

где w0 = -T, x0 = 1.

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

Это объяснение можно представить в виде следующего алгоритма обучения:

1. Подать образ Х на вход персептрона и вычислить, выход К.

2. а) Если выход Y правильный, то перейти к шагу 1.

3. б) Если выход Y неправильный и равен 0, то добавить все входы к соответствующим им весам;

4. в) Если выход К неправильный и равен 1, то вычесть вход из соответствующего ему веса.

5. Перейти к шагу 1.

 


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


Описание работы с программой

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

Это объяснение можно представить в виде следующего алгоритма обучения:

1. Подать образ Х на вход персептрона и вычислить, выход К.

а) Если выход Y правильный, то перейти к шагу 1.

б) Если выход Y неправильный и равен 0, то добавить все входы к соответствующим им весам;

в) Если выход К неправильный и равен 1, то вычесть вход из соответствующего ему веса.

Перейти к шагу 1.

Описание интерфейса пользователя, экранные формы

 

Рисунок 4. Выбор образа для распознавания

 

Рисунок 5. Процесс распознавания

 


Рисунок 6. Режим обучения

 

Рисунок 7. Окончание процесса распознавания

 

Рисунок 8. Запрос на обучение

Заключение


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

1. гибкость;

2. способность обучаться;

3. нечувствительность к мелким погрешностям во входных данных.

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

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

Литература


1. А.И. Змитрович. Интеллектуальные информационные системы. Мн.: ТетраСистемс, 2007.

2. Л.Б. Емельянов-Ярославский. Интеллектуальная квазибиологическая система. Индуктивный автомат. М: Наука, 2011.

 


Приложение

 

Листинг программы


unit Main;, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,, StdCtrls, Menus, FileCtrl, ComCtrls, RXCtrls;= class(TForm): TImage;: TImage;: TImage;: TFileListBox;: TImage;: TImage;: TProgressBar;: TTimer;: TRxLabel;: TEdit;Image2Click(Sender: TObject);FormCreate(Sender: TObject);FLBClick(Sender: TObject);Image3Click(Sender: TObject);Timer1Timer(Sender: TObject);FormClose(Sender: TObject; var Action: TCloseAction);EditLetterKeyPress(Sender: TObject; var Key: Char);

{ Private declarations }

{ Public declarations };: TMainForm;= record: string[255];: boolean;: string[1];;: array[1..200] of let;: File of let;: boolean;: integer;

{$R *.DFM}TMainForm.Image2Click(Sender: TObject);.Close;;TMainForm.FormCreate(Sender: TObject);: integer;.Directory := 'C:\TEMP\Pictu';(f,'c:\temp\letter.ini');(f);:= 1;not EOF(f) do(f,letter[i]);:= i + 1;;:= False;.Visible := False;;TMainForm.FLBClick(Sender: TObject);.Picture.LoadFromFile(FLB.FileName);.Visible := False;.Position := 0;.Visible := False;.Visible := False;;TMainForm.Image3Click(Sender: TObject);: integer;i := 1 to 200 doFLB.FileName = letter[i].FileN then:= True;:= i;;;.Enabled := True;.Visible := True;.Visible := True;.Caption := '╚фхЄ яЁюЎхёё Ёрёяючэртрэш...';;TMainForm.Timer1Timer(Sender: TObject);, s : string;: string[3];, k : integer;: real;.Position := PB.Position + 1;PB.Position > 99 then.Enabled := False;:= FLB.FileName;:= '000';[1] := MyFile[16];[2] := MyFile[17];[3] := MyFile[18];Flag then:= False;[13] := 'a';[15] := 'm';.Picture.LoadFromFile(MyFile);.Visible := True;.Position := 0;.Visible := False;.Visible := False;:= '╧ЁюЎхёё Ёрёяючэртрэш чртхЁ°хэ єёях°эю! ╨рёяючэрэ ёшьтюы: ' + letter[Col].ASCIICode;(s,mtConfirmation,[mbOK], 0);MessageDlg('─рээ√щ юсЁрч ёшёЄхьх эхшчтхёЄхэ. ╧ЁютхёЄш яЁюЎхёё юсєўхэш ?',mtConfirmation,[mbYes, mbNo],0) = mrYes then:= 1;:= 1;:= False;(letter[Col].FileN <> '') do:= Col + 1;.Visible := True;.Visible := True;.Text := '';.Position := 0;.Visible := False;.Caption := '┬тхфшЄх Ёрёяючэртрхь√щ ёшьтюы';:= EditLetter;;;;TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);: integer;(f);(f);:= 1;letter[i].FileN <> '' do(f,letter[i]);:= i + 1;;(f);;TMainForm.EditLetterKeyPress(Sender: TObject; var Key: Char);, s : string;: string[3];, k : integer;: real;Key = #13 then[Col].FileN := FLB.FileName;[Col].YesNo := True;[Col].ASCIICode := EditLetter.Text;.Visible := False;.Visible := False;('╧ЁюЎхёё юсєўхэш чртхЁ°хэ.',mtConfirmation,[mbOK],0);;;.Unit4;, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,, Buttons, TeEngine, Series, ExtCtrls, TeeProcs, Chart;= class(TForm): TChart;: TLineSeries;: TBitBtn;: TLineSeries;: TBarSeries;BitBtn1Click(Sender: TObject);FormShow(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm4;Unit2;

{$R *.DFM}TForm4.BitBtn1Click(Sender: TObject);: array[1..60] of Double;: array[1..2,1..5] of integer;, k, s, s2 : integer;.Clear;.Clear;.Clear;i := 1 to 60 do mas[i] := 0;i:=1 to 5 dok:=1 to 2 do axis[k][i] := 0;i := 1 to 2 dok := 1 to FrmProcess.SG1.RowCount - 1 do:= StrToInt(FrmProcess.SG1.Cells[i,k]);[i][k] := s;;i := 1 to 2 do:= 1;s2 := 1 to 60 do mas[s2] := 0;k := -16 to 16 do

//k <> (-axis[1][i]) then[s + round(((axis[1][1] + axis[2][1])/2))] := 3 - ln(abs(k + axis[1][i]));:= s + 1;;;i = 1 then.AddArray(mas);i = 2 then.AddArray(mas);;s2 := 1 to 60 do mas[s2] := 0;[StrToInt(frmProcess.SG2.Cells[1,1]) + 15] := 4;[StrToInt(frmProcess.SG2.Cells[1,1]) + 16] := 0;.AddArray(mas);;TForm4.FormShow(Sender: TObject);.Clear;.Clear;.Clear;;.Enter;Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,, ExtCtrls;= class(TForm): TBevel;: TLabel;: TLabel;: TEdit;: TEdit;: TBitBtn;: TBitBtn;BitBtn1Click(Sender: TObject);BitBtn2Click(Sender: TObject);FormCloseQuery(Sender: TObject; var CanClose: Boolean);EditSpecKeyPress(Sender: TObject; var Key: Char);FormShow(Sender: TObject);

{ Private declarations }

{ Public declarations };: TEnterSpecForm;SprSpec;: integer;

{$R *.DFM}TEnterSpecForm.BitBtn1Click(Sender: TObject);:= 1;;TEnterSpecForm.BitBtn2Click(Sender: TObject);:= 0;;TEnterSpecForm.FormCloseQuery(Sender: TObject;CanClose: Boolean);FlagOnExitEnterSpecForm = 1 thenEditSpec.Text = '' then:= EditSpec;:= False;EditSpecGeneral.Text = '' then:= EditSpecGeneral;:= False;Caption = '┬тюф ёяхЎшры№эюёЄш' then.Table1.InsertRecord([EditSpec.Text, EditSpecGeneral.Text])(Caption = ')(FlagOnExitEnterSpecForm <> 0) then:= 2;.Table1.ApplyUpdates;.Table1.CommitUpdates;;;;TEnterSpecForm.EditSpecKeyPress(Sender: TObject; var Key: Char);Key = #13 then(Sender as TWinControl, True, True);:= #0;;;TEnterSpecForm.FormShow(Sender: TObject);:= EditSpec;;.Unit2;, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,, Grids, Buttons, ExtCtrls, Menus, RxGrdCpt;= class(TForm): TPanel;: TEdit;: TEdit;: TLabel;: TLabel;: TBitBtn;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TPanel;: TStringGrid;: TStaticText;: TPanel;: TStaticText;: TStringGrid;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;FormActivate(Sender: TObject);BitBtn1Click(Sender: TObject);N3Click(Sender: TObject);N2Click(Sender: TObject);N4Click(Sender: TObject);N5Click(Sender: TObject);N6Click(Sender: TObject);N7Click(Sender: TObject);N8Click(Sender: TObject);N9Click(Sender: TObject);N10Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TFrmProcess;Unit3, Unit4;

{$R *.DFM}TFrmProcess.FormActivate(Sender: TObject);:integer;.Cells[0,0]:='N\Vars';.Cells[0,1]:='Data:';n:=1 to SG1.RowCount-1 do SG1.Cells[0,n]:=IntToStr(n);n:=1 to SG1.ColCount do.Cells[n,0]:='X'+IntToStr(n);.Cells[n,0]:='X'+IntToStr(n);;.Cells[SG1.ColCount-1,0]:='Clas';.Cells[SG1.ColCount-1,0]:='Clas';;TFrmProcess.BitBtn1Click(Sender: TObject);:integer;(Edit1.Text<>'') and (Edit2.Text<>'') then.ColCount:=StrToInt(Edit1.Text)+2;.ColCount:=StrToInt(Edit1.Text)+2;.RowCount:=StrToInt(Edit2.Text)+1;n:=1 to (SG1.RowCount-1) do.Cells[0,n]:=IntToStr(n);n:=1 to SG1.ColCount do.Cells[n,0]:='X'+IntToStr(n);.Cells[n,0]:='X'+IntToStr(n);;.Cells[0,1]:='Data:';.Cells[SG1.ColCount-1,0]:='Clas';.Cells[SG1.ColCount-1,0]:='Clas';;;TFrmProcess.N3Click(Sender: TObject);.Default:=True;.Checked:=True;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;;TFrmProcess.N2Click(Sender: TObject);.Default:=False;.Checked:=False;.Checked:=True;.Default:=True;.Checked:=False;.Default:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;;TFrmProcess.N4Click(Sender: TObject);:string;,m,coun:integer;_res,res:real;_res:=0;:=60000000;:=1;n:=1 to SG1.RowCount-1 dom:=1 to SG1.ColCount-2 do_res:=tmp_res+(sqr(StrToInt(SG1.Cells[m,n]))-sqr(StrToInt(SG2.Cells[m,1])));_res:=sqrt(abs(tmp_res));(tmp_res<res) then:=tmp_res;:=n;;;.cells[SG2.ColCount-1,1]:=SG1.Cells[SG1.COlCount-1,coun];(frmProcess.N5.Checked) then.Show;.Panel1.Caption:='╩ырёё ╣'+SG1.Cells[SG1.COlCount-1,coun]+' ';frmProcess.N7.Checked then.Show;;TFrmProcess.N5Click(Sender: TObject);.Default:=False;.Checked:=False;.Checked:=False;.Default:=False;.Checked:=True;.Default:=True;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;;TFrmProcess.N6Click(Sender: TObject);.Default:=False;.Checked:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Default:=True;.Checked:=True;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;;TFrmProcess.N7Click(Sender: TObject);.Default:=False;.Checked:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Default:=False;.Checked:=False;.Default:=True;.Checked:=True;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;;TFrmProcess.N8Click(Sender: TObject);.Default:=False;.Checked:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=True;.Checked:=True;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;;TFrmProcess.N9Click(Sender: TObject);.Default:=False;.Checked:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=True;.Checked:=True;.Default:=False;.Checked:=False;;TFrmProcess.N10Click(Sender: TObject);, p2, i, k : integer;: array[1..20,1..20] of integer;.Default:=False;.Checked:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=False;.Checked:=False;.Default:=True;.Checked:=True;:= round(random(9) + 1);:= round(SG1.RowCount - 4);('mtConfirmation,[mbOk],0);i := 1 to SG1.RowCount - 1 dok := 1 to SG1.ColCount - 1 do[i][k] := StrToInt(SG1.Cells[k,i]);.RowCount := SG1.RowCount - p2;i := 1 to p2 do:= round(random(SG1.ColCount - 1) + 1);k := 1 to SG1.RowCount - 1 do[p1][k] := 0;;i := 1 to 20 domas[i][k] <> 0 thenk := 1 to 20 do.Cells[k,i] := IntToStr(mas[i][k]);

// round(SG1.RowCount - 2) +;;.Unit3;, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,, StdCtrls;= class(TForm): TPanel;: TButton;Button1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TfrmAdapt;Unit2;

{$R *.DFM}TfrmAdapt.Button1Click(Sender: TObject);:boolean;:TPoint;,m:integer;,coun2,xw,yw:integer;,my,A,B:real;: array [1..2] of real;,center2: array [1..2] of integer;[2]:=66000000;:=1;:=1;(frmProcess.SG1.ColCount=4) thenn:=1 to frmProcess.SG1.RowCount-1 do:=StrToInt(frmProcess.SG1.Cells[1,n]);:=StrToInt(frmProcess.SG1.Cells[2,n]);trim(frmProcess.SG1.Cells[frmProcess.SG1.ColCount-1,n])='1' then Canvas.Pen.color:=clRed else Canvas.Pen.color:=clGreen;.x:=xw;.y:=yw;.PenPos:=cor;.Ellipse(xw-2,yw-2,xw+2,yw+2);;[1]:=StrToInt(frmProcess.SG1.cells[1,1]);[2]:=StrToInt(frmProcess.SG1.cells[2,1]);[1]:=StrToInt(frmProcess.SG1.cells[1,frmProcess.SG1.rowcount-1]);[2]:=StrToInt(frmProcess.SG1.cells[2,frmProcess.SG1.rowcount-1]);n:=1 to frmProcess.SG1.RowCount-1 do:=StrToInt(frmProcess.SG1.Cells[1,n]);:=StrToInt(frmProcess.SG1.Cells[2,n]);[1]:=sqrt(abs(((xw*xw-center1[1]*center1[1])+(yw*yw-center1[2]*center1[2]))));[2]:=sqrt(abs(((xw*xw-center2[1]*center2[1])+(yw*yw-center2[2]*center2[2]))));(res[1]<res[2]) then frmProcess.SG1.Cells[frmProcess.SG1. ColCount,n]:='1'frmProcess.SG1.Cells[frmProcess.SG1.ColCount,n]:='2';;

//[2]:=800000000;m:=1 to frmProcess.SG1.RowCount-1 dotrim(frmProcess.SG1.Cells[3,n])='1' thenn:=1 to frmProcess.SG1.RowCount-1 dotrim(frmProcess.SG1.Cells[3,n])='1' then[1]:=StrToInt(frmProcess.SG1.Cells[1,m]);[2]:=StrToInt(frmProcess.SG1.Cells[2,m]);:=StrToInt(frmProcess.SG1.Cells[1,n]);:=StrToInt(frmProcess.SG1.Cells[2,n]);[1]:=res[1]+sqrt(abs(((xw*xw-center2[1]*center2[1])+(yw*yw-center2[2]*center2[2]))));;;res[1]<res[2] then begin res[2]:=res[1]; coun1:=m; end;;;

//[2]:=800000000;m:=1 to frmProcess.SG1.RowCount-1 dotrim(frmProcess.SG1.Cells[3,m])='2' thenn:=1 to frmProcess.SG1.RowCount-1 dotrim(frmProcess.SG1.Cells[3,n])='2' then[1]:=StrToInt(frmProcess.SG1.Cells[1,m]);[2]:=StrToInt(frmProcess.SG1.Cells[2,m]);:=StrToInt(frmProcess.SG1.Cells[1,n]);:=StrToInt(frmProcess.SG1.Cells[2,n]);[1]:=res[1]+sqrt(abs(((xw*xw-center2[1]*center2[1])+(yw*yw-center2[2]*center2[2]))));;;res[1]<res[2] then begin res[2]:=res[1]; coun2:=m; end;;;:=StrToInt(frmProcess.SG1.Cells[1,coun1]);:=StrToInt(frmProcess.SG1.Cells[2,coun1]);.x:=xw;.y:=yw;.Pen.Color:=clRed;.PenPos:=cor;.Ellipse(xw-4,yw-4,xw+4,yw+4);:=StrToInt(frmProcess.SG1.Cells[1,coun2]);:=StrToInt(frmProcess.SG1.Cells[2,coun2]);.x:=xw;.y:=yw;.Pen.Color:=clGreen;.PenPos:=cor;.Ellipse(xw-4,yw-4,xw+4,yw+4);.LineTo(StrToInt(frmProcess.SG1.Cells[1,coun1]),StrToInt(frmProcess.SG1.Cells[2,coun1]));.Pen.Color:=clBlack;:= (StrToInt(frmProcess.SG1.Cells[1,coun1])+StrToInt(frmProcess.SG1. Cells[1,coun2]))/2;:= (StrToInt(frmProcess.SG1.Cells[2,coun1])+StrToInt(frmProcess.SG1. Cells[2,coun2]))/2;:=(StrToInt(frmProcess.SG1.Cells[1,coun1])-StrToInt(frmProcess.SG1. Cells[1,coun2]));:=(StrToInt(frmProcess.SG1.Cells[2,coun1])-StrToInt(frmProcess.SG1. Cells[2,coun2]));:=StrToInt(frmProcess.SG2.Cells[1,1]);:=StrToInt(frmProcess.SG2.Cells[2,1]);.x:=xw;.y:=yw;.Pen.Color:=clWhite;.PenPos:=cor;.Ellipse(xw-5,yw-5,xw+5,yw+5);;;.

Похожие работы на - Разработка системы распознавания образов

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!