69776

Розробка системи розпізнавання двох об’єктів розпізнавання образів

Лабораторная работа

Информатика, кибернетика и программирование

Мета роботи: Вивчити основні принципи роботи алгоритму розпізнавання образів Hamming classification. Пояснення Хемінгової мережі та її класифікація: задаємо фігури у вигляді координат ,задаємо їх колір(розмір) та запускаємо програму.

Украинкский

2014-10-10

402 KB

0 чел.

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

ДЕРЖАВНИЙ ВИЩИЙ НАВЧАЛЬНИЙ ЗАКЛАД

КИЇВСЬКИЙ НАЦІОНАЛЬНИЙ ЕКОНОМІЧНИЙ УНІВЕРСИТЕТ

імені ВАДИМА ГЕТЬМАНА

Кафедра інформаційних систем в економіці

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

ЗВІТ

з лабораторної роботи № 3

«Розробка системи розпізнавання двох обєктів розпізнавання образів»


Підготував:

студент 5 курсу

спеціальності 8404

“ Інтелектуальні системи  прийняття рішень”



Прийняв:
Доц.Іванченко Г.Ф.

Київ 2011

Лабораторна робота №1

Тема роботи: РОЗРОБКА СИСТЕМИ РОЗПІЗНАВАННЯ ДВОХ ОБЄКТІВ РОЗПІЗНАВАННЯ ОБРАЗІВ.

Мета роботи: Вивчити основні принципи роботи алгоритму розпізнавання образів Hamming classification.

Пояснення Хемінгової мережі та її класифікація: задаємо фігури у вигляді координат ,задаємо їх колір(розмір) та запускаємо програму.

Мережа Хемінга

Мережа Хемінга (Hamming) є розширенням мережі Хопфілда. Ця мережа була розроблена Річардом Ліппманом (Richard Lippman) у середині 80-х рр. Мережа Хемінга реалізує класифікатор, що базується на найменшій похибці для векторів двійкових входів, де похибка визначається відстанню Хемінга. Відстань Хемінга визначається як число бітів, які відрізняються між двома відповідними вхідними векторами фіксованої довжини. Один вхідний вектор є незашумленим прикладом образу, інший є спотвореним образом. Вектор виходів навчальної множини є вектором класів, до яких належать образи. У режимі навчання вхідні вектори розподіляються до категорій для яких відстань між зразковими вхідними векторами та біжучим вхідним вектором є мінімальною.

Мережа Хемінга має три прошарки: вхідний прошарок з кількістю вузлів, скільки є окремих двійкових ознак; прошарок категорій (прошарок Хопфілда), з кількістю вузлів, скільки є категорій або класів; вихідний прошарок, який відповідає числу вузлів у прошарку категорій.

Мережа є простою архітектурою прямого поширення з вхідним рівнем, повністю під'єднаним до прошарку категорій. Кожен елемент обробки у прошарку категорій є зворотно під'єднаним до кожного нейрона у тому ж самому прошарку і прямо під'єднаним до вихідного нейрону. Вихід з прошарку категорій до вихідного прошарку формується через конкуренцію.

Навчання мережі Хемінга є подібним до методології Хопфілда. На вхідний прошарок надходить бажаний навчальний образ, а на виході вихідного прошарку надходить значення бажаного класу, до якого належить вектор. Вихід містить лише значення класу до якої належить вхідний вектор. Рекурсивний характер прошарку Хопфілда забезпечує засоби корекції всіх ваг з'єднань.

Рис. 11. Структурна схема мережі Хемінга

Алгоритм функціонування мережі Хемінга

  1.  На стадії ініціалізації ваговим коефіцієнтам першого прошарку і порогу передатної функції присвоюються такі значення:

Wik=xIk/2, i=0...n-1, k=0...m-1

bk = n / 2, k = 0...m-1

Тут xik - i-ий елемент k-ого зразка.

Вагові коефіцієнти гальмуючих синапсів у другому прошарку беруть рівними деякій величині 0 < v < 1/m. Синапс нейрона, пов'язаний із його ж виходом має вагу +1.

  1.  На входи мережі подається невідомий вектор x1, xi, xn ...Розраховуються стани нейронів першого прошарку (верхній індекс у скобках указує номер прошарку):

, j=0...m-1

Після цього отримання значення ініціалізують значення виходів другого прошарку:

yj(2) = yj(1), j = 0...m-1

  1.  Обчислюються нові стани нейронів другого прошарку:

і значення їх виходів:

Передатна функція f має вид порога, причому величина b повинна бути достатньо великою, щоб будь-які можливі значення аргументу не призводили до насичення.

  1.  Перевіряється, чи змінилися виходи нейронів другого прошарку за останню ітерацію. Якщо так - перейти до кроку 3. Інакше - кінець.

Роль першого прошарку є умовною: скориставшись один раз на першому кроці 1 значеннями його вагових коефіцієнтів, мережа більше не вертається до нього, тому перший прошарок може бути взагалі виключений із мережі.

Мережа Хемінга має ряд переваг над мережею Хопфілда. Вона реалізує оптимальний класифікатор мінімуму похибки, якщо похибки вхідних бітів є випадковими та незалежними. Для функціонування мережі Хемінга потрібна менша кількість нейронів, оскільки середній прошарок вимагає лише один нейрон на клас, замість нейрону на кожен вхідний вузол. І, нарешті, мережа Хемінга не страждає від неправильних класифікацій, які можуть трапитись у мережі Хопфілда. В цілому, мережа Хемінга є як швидшою, так і точнішою за мережу Хопфілда.

Задаємо фігури у системі координат:

% Figure ID, COLOR & SHAPE

 

  if (rand > 0.25)

   % Pentagon

   Figure_id = 3;

   Figure_x =   [0 0  5  10 10];

   Figure_y = 2+[0 10 15 10  0];

   Figure_c = nnblue;

   p1 = 1;

   p2 = 1;

 elseif (rand > 0.5)

   % Rhombus

   Figure_id = 1;

   Figure_x =   [0 10 20 10];

   Figure_y = 7+[0 10 0 -10];

   Figure_c = nnred;

   p1 = 0;

   p2 = 0;

 else

   % Trapeze

   Figure_id = 2;

   Figure_x =   [0 5  15 20];

   Figure_y = 2+[0 10 10 0];

   Figure_c = nngreen

   p1 = 0;

   p2 = 0;

 end

Текст програми:

function nnd13hd(cmd,arg1,arg2,arg3)

%NND13HD Hebb with decay demonstration.

%

%  This demonstration requires either the MININNET functions

%  on the NND disk or the Neural Network Toolbox.

 

% $Revision: 1.7.2.2 $

% Copyright 1994-2008 PWS Publishing Company and The MathWorks, Inc.

% First Version, 8-31-95.

 

%==================================================================

 

% CONSTANTS

me = 'nnd13hd';

Fs = 8192;

pause1 = 0.7;

pause2 = 0.1;

 

% DEFAULTS

if nargin == 0, cmd = ''; else cmd = lower(cmd); end

 

% FIND WINDOW IF IT EXISTS

fig = nndfgflg(me);

if length(get(fig,'children')) == 0, fig = 0; end

 

% GET WINDOW DATA IF IT EXISTS

if fig

 H = get(fig,'userdata');

 fig_axis = H(1);         % window axis

 desc_text = H(2);        % handle to first line of text sequence

 lines = H(3:4);          % belt circle lines

 Figure_indicator = H(5);  % Figure entrance indicator

 top_indicator = H(6);    % top exit indicator

 bottom_indicator = H(7); % bottom exit indicator;

 sounds = H(8:15);        % pointers to sounds

 angle_ptr = H(16);       % angle (deg) of lines in conveyor ends

 Figure_ptr = H(17);       % pointer to Figure shape

 arrows = H(21:22);       % handles to arrows

 rb1 = H(23);             % Working radio button

 rb2 = H(24);             % Not working radio button

 cross = H(25);           % Not working cross

 p1_ptr = H(26);          % Input #1

 p2_ptr = H(27);          % Input #2

 a_ptr = H(28);           % Output

 W2_ptr = H(29);          % Weights #2

 p1_box = H(30);

 p1_text = H(31);

 p2_box = H(32);

 p2_text = H(33);

 a_box = H(34);

 a_text = H(35);

 go_button = H(36);

 mode_ptr = H(37);

 W2_box = H(38);

 W2_text = H(39);

 n_box = H(40);

 n_text = H(41);

 mode = get(mode_ptr,'userdata');

end

 

%==================================================================

% Activate the window.

%

% ME() or ME('')

%==================================================================

 

if strcmp(cmd,'')

 if fig

   figure(fig)

   set(fig,'visible','on')

 else

   feval(me,'init')

 end

 

%==================================================================

% Close the window.

%

% ME() or ME('')

%==================================================================

 

elseif strcmp(cmd,'close') & (fig)

 delete(fig)

 

%==================================================================

% Initialize the window.

%

% ME('init')

%==================================================================

 

elseif strcmp(cmd,'init') & (~fig)

 

 % CHECK FOR TRANSFER FUNCTIONS

 if ~nnfexist(me), return, end

 

 % NEW DEMO FIGURE

 fig = nndemof2(me,'Безродний А.М., КН-IV-2','','','Chapter 13');

 

 set(fig, ...

   'windowbuttondownfcn',nncallbk(me,'down'), ...

   'BackingStore','off',...

   'nextplot','add');

 H = get(fig,'userdata');

 fig_axis = H(1);

 desc_text = H(2);

 

 % SOUND POINTERS

 wind = uicontrol('visible','off','userdata',nndsnd(3));

 knock = uicontrol('visible','off','userdata',nndsnd(5));

 scan = uicontrol('visible','off','userdata',nndsnd(1));

 classify = uicontrol('visible','off','userdata',nndsnd(4));

 blip = uicontrol('visible','off','userdata',nndsnd(6));

 bloop = uicontrol('visible','off','userdata',nndsnd(7));

 blp = uicontrol('visible','off','userdata',nndsnd(9));

 tribble = uicontrol('visible','off','userdata',nndsnd(8));

 

 % ICON

 nndicon(13,458,363,'shadow')

 

 % CONVEYOR BELT

 deg = pi/180;

 angle = [0:5:360]*deg;

 cx = cos(angle);

 cy = sin(angle);

 

 % ENTRANCE BOX

 x = 60;

 y = 20;

 fill([0 0 x+10 x+10],y+[70 50 50 70],nndkblue,...

   'edgecolor','none')

 fill(x+[10 10 50 50],y+[80 40 40 80],nndkblue,...

   'edgecolor','none')

 plot([0 x+[10 10 50 50 10 10] 0],...

   y+[50 50 40 40 80 80 70 70],...

   'color',nnred)

 left_arrow = fill(x+30+[-5 -5 -10 0 10 5 5],y+60+[15 5 5 -15 5 5 15],nndkblue,...

   'edgecolor',nnred,...

   'CreateFcn','');

 Figure_ind = text(x-25,y+60,'Figure',...

   'color',[0.8 0.8 0],...

   'fontweight','bold',...

   'horiz','center',...

   'CreateFcn','');

 

 % LEFT CIRCLE

 line_angle = 45*deg;

 fill(x-10+cx*10,y+10+cy*10,nnred,...

   'edgecolor',nndkblue,...

   'linewidth',2)

 line_1 = plot(x-10+cos([0 pi]+line_angle)*8,y+10+sin([0 pi]+line_angle)*8,...

   'color',nndkblue,...

   'CreateFcn','',...

   'linewidth',2);

 

 % RIGHT CIRCLE

 x = 320;

 fill(x+10+cx*10,y+10+cy*10,nnred,...

   'edgecolor',nndkblue,...

   'linewidth',2)

 line_2 = plot(x+10+cos([0 pi]+line_angle)*8,y+10+sin([0 pi]+line_angle)*8,...

   'color',nndkblue,...

   'CreateFcn','',...

   'linewidth',2);

 

 % BELT

 plot([50 330],[y y]+20,...

   'color',nndkblue,...

   'linewidth',2)

 plot([50 330],[y y],...

   'color',nndkblue,...

   'linewidth',2)

 

 % SENSOR BOX #1

 x = 140;

 fill(x+[0 40 20],y+[40 40 80],nndkblue,...

   'edgecolor',nnred)

 fill(x+[0 40 40 0],y+[14 14 8 8],nndkblue,...

   'edgecolor',nnred)

 cross = plot(x+[15 25 20 25 15],y+[50 60 55 50 60],...

   'color',nndkblue,...

   'linewidth',3,...

   'CreateFcn','');

 

 % SENSOR BOX #2

 x = 200;

 fill(x+[0 40 20],y+[40 40 80],nndkblue,...

   'edgecolor',nnred)

 fill(x+[0 40 40 0],y+[14 14 8 8],nndkblue,...

   'edgecolor',nnred)

 

 % EXIT BOX

 x = 320;

 fill([x-10 x-10 380 380],y+[80 62 62 80],nndkblue,...

   'edgecolor','none')

 fill([x-10 x-10 380 380],y+[40 58 58 40],nndkblue,...

   'edgecolor','none')

 fill(x-[10 10 50 50],y+[80 40 40 80],nndkblue,...

   'edgecolor','none')

 plot([378 x-[50 50] 378],y+[80 80 40 40],...

   'color',nnred)

 plot([378 x-[10 10] 378],y+[62 62 58 58],...

   'color',nnred)

 right_arrow = fill(x-30+[-5 -5 -10 0 10 5 5],y+60-[15 5 5 -15 5 5 15],nndkblue,...

   'edgecolor',nnred,...

   'CreateFcn','');

 top_ind = text(x+23,y+71,'П`ятикутник',...

   'color',[0.8 0.8 0],...

   'fontweight','bold',...

   'horiz','center',...

   'CreateFcn','');

 bottom_ind = text(x+18,y+48,'Ромб/трапеція',...

   'color',[0.8 0.8 0],...

   'fontweight','bold',...

   'horiz','center',...

   'CreateFcn','');

 

 % BUTTONS

 go_button = uicontrol(...

   'units','points',...

   'position',[400 165 60 20],...

   'string','Фігура',...

   'callback',[me '(''go'')']);

 uicontrol(...

   'units','points',...

   'position',[400 130 60 20],...

   'string','Обновити',...

   'callback',[me '(''clear'')'])

 uicontrol(...

   'units','points',...

   'position',[400 95 60 20],...

   'string','Зміст',...

   'callback','nndtoc')

 uicontrol(...

   'units','points',...

   'position',[400 60 60 20],...

   'string','Закрити',...

   'callback',[me '(''close'')'])

 

 % LOWER SEPARATION BAR

 fill([0 0 380 380],130+[0 4 4 0],nndkblue,...

   'edgecolor','none')

 

 % UPPER SEPARATION BAR

 fill([0 0 380 380],160+[0 4 4 0],nndkblue,...

   'edgecolor','none')

 

 % RADIO BUTTONS

 set(nndtext(20,147,'Сканування:','left'),...

   'fontsize',12)

 rb1 = uicontrol(...

   'units','points',...

   'position',[140 139 100 20],...

   'string','Працює',...

   'style','radio',...

   'value',1,...

   'callback',[me '(''working'')']);

 rb2 = uicontrol(...

   'units','points',...

   'position',[250 139 100 20],...

   'string','Непрацює',...

   'style','radio',...

   'callback',[me '(''notworking'')']);

 

 W1 = 1;

 W2 = 0;

 set(fig,'nextplot','add')

 

 % NETWORK INPUT #1

 x1 = 70;

 y1 = 310;

 dy1 = 55;

 nndtext(x1+1,y1+10,'П`ятикутник  ','right');

 nndtext(x1-10,y1-10,'Shape?','right');

 p1_box = fill(x1+[0 20 20 0 0],y1-10+[0 0 20 20 0],nnltgray,...

   'edgecolor',nnred,...

   'linewidth',2,...

   'CreateFcn','');

 p1_text = nndtext(x1+10,y1,'?');

 set(p1_text,'CreateFcn','');

 

 % NETWORK INPUT #2

 y3 = y1-2*dy1;

 dy3 = 20;

 nndtext(x1-5,y3+10,'П`ятикутник','right');

 nndtext(x1-10,y3-10,'Колір?','right');

 p2_box = fill(x1+[0 20 20 0 0],y3-10+[0 0 20 20 0],nnltgray,...

   'edgecolor',nnred,...

   'linewidth',2,...

   'CreateFcn','');

 p2_text = nndtext(x1+10,y3,'?');

 set(p2_text,'CreateFcn','');

 

 % NEURON

 x2 = x1+165;

 y2 = y1-dy1;

 sumdist = 50;

 sz = 15;

 plot(x2+[0 0 sumdist],y2+[-25 0 0],'linewidth',2,'color',nnred);

 plot(x2-20+[0 40 40 0 0],y2-45+[0 0 20 20 0],'color',nnred,'linewidth',2);

 plot(x2+[0 0],y2+[-45 -55],'linewidth',2,'color',nnred);

 plot(x2+sumdist+sz+[20 30 0 30 20],y2+[10 0 0 0 -10],'linewidth',2,'color',nnred);

 nndtext(x2+sumdist+sz+45,y2+30,'П`ятикутник?   ');

 nndsicon('sum',x2,y2,sz)

 nndsicon('hardlim',x2+sumdist,y2,sz)

 nndtext(x2,y2-36,'-0.5');

 nndtext(x2,y2-66,'1');

 a_box = fill(x2+sumdist+sz+35+[0 20 20 0 0],y2-10+[0 0 20 20 0],nnltgray,...

   'edgecolor',nnred,...

   'linewidth',2,...

   'CreateFcn','');

 a_text = nndtext(x2+sumdist+sz+45,y2,'?');

 set(a_text,'CreateFcn','');

 

 % NET INPUT

 n_box = fill(x2+5+[0 40 40 0 0],y2+30+[0 0 20 20 0],nnltgray,...

   'edgecolor',nnred,...

   'linewidth',2,...

   'CreateFcn','');

 n_text = nndtext(x2+25,y2+40,'?');

 plot(x2+25+[0 0],y2+[30 0],':','linewidth',2,'color',nnred);

 

 % WEIGHTS #1

 straight = 95;

 plot([x1+20 x1+straight-50],[y1 y1],'linewidth',2,'color',nnred);

 plot([x1+straight-10 x1+straight x2-sz],[y1 y1 y2],'linewidth',2,'color',nnred);

 plot(x1+straight-50+[0 40 40 0 0],y1-10+[0 0 20 20 0],'color',nnred,'linewidth',2);

 nndtext(x1+straight-30,y1,'1');

 

 % WEIGHTS #2

 straight_dist = 100;

 plot([x1+20 x1+straight-50],[y3 y3],'linewidth',2,'color',nnred);

 plot([x1+straight-10 x1+straight x2-sz],[y3 y3 y2],'linewidth',2,'color',nnred);

 W2_box = fill(x1+straight-50+[0 40 40 0 0],y3-10+[0 0 20 20 0],nnltgray,...

   'edgecolor',nnred,...

   'linewidth',2,...

   'CreateFcn','');

 W2_text = nndtext(x1+straight-30,y3,sprintf('%5.2f',W2));

 

 % INPUT HEADING

 temp = nndtext(x1+10,y1+30,'Вхід');

 

 % WEIGHT HEADING

 nndtext(x1+straight_dist-35,y1+30,'Ваги');

 

 % SCANNER NAMES

 set(nndtext(160,120,'П`ятикутник'),...

   'fontsize',10)

 set(nndtext(160,110,'Shape?'),...

   'fontsize',10)

 set(nndtext(230,120,'П`ятикутник'),...

   'fontsize',10)

 set(nndtext(230,110,'Колір?'),...

   'fontsize',10)

 

 % SAVE WINDOW DATA AND LOCK

 angle_ptr = uicontrol('visible','off','userdata',line_angle);

 Figure_ptr = uicontrol('visible','off','userdata',[]);

 

 p1_ptr = uicontrol('visible','off','userdata',[]);

 p2_ptr = uicontrol('visible','off','userdata',[]);

 a_ptr = uicontrol('visible','off','userdata',[]);

 W2_ptr = uicontrol('visible','off','userdata',W2);

 W2_ptr = uicontrol('visible','off','userdata',W2);

 mode_ptr = uicontrol('visible','off','userdata',1);

 

 H = [fig_axis, ...

      desc_text, ...

      line_1 line_2, ...

      Figure_ind top_ind bottom_ind, ...

      wind knock scan classify blip bloop blp tribble, ...

      angle_ptr Figure_ptr 0 0 0, ...

      left_arrow right_arrow,rb1 rb2 cross, ...

      p1_ptr p2_ptr a_ptr W2_ptr,...

      p1_box p1_text p2_box p2_text a_box a_text,...

      go_button mode_ptr W2_box W2_text,...

      n_box n_text];

 

 set(fig,'userdata',H,'nextplot','new')

 

 % INSTRUCTION TEXT

 feval(me,'instr');

 

 % LOCK WINDOW

 set(fig,...

  'nextplot','new',...

  'color',nnltgray);

 

 nnchkfs;

 

%==================================================================

% Display the instructions.

%

% ME('instr')

%==================================================================

 

elseif strcmp(cmd,'instr') & (fig)

 nnsettxt(desc_text,...

   'Натисніть [Фігура] і відправте',...

   'a Figure down the belt',...

   'to be recognized.',...

   'Натисніть [Обновити] to apply',...

   'the Hebb w/decay rule.',...

   '',...

   'Because of weight',...

   'decay the weight will',...

   'never exceed a value',...

   'of 2.0.')

   

%==================================================================

% Respond to Figure.

%

% ME('Figure')

%==================================================================

 

elseif strcmp(cmd,'go') & (fig) & (nargin == 1) & (mode == 1);

 

 % GET DATA

 wind = get(sounds(1),'userdata');

 knock = get(sounds(2),'userdata');

 scan = get(sounds(3),'userdata');

 classify = get(sounds(4),'userdata');

 blip = get(sounds(5),'userdata');

 bloop = get(sounds(6),'userdata');

 blp = get(sounds(7),'userdata');

 tribble = get(sounds(8),'userdata');

 angle = get(angle_ptr,'userdata');

 Figure = get(Figure_ptr,'userdata');

 axes(fig_axis);

 

 % NEW Figure

 nnpause(pause1)

 x = 82;

 y = 42;

 

 % Figure ID, COLOR & SHAPE

 

  if (rand > 0.25)

   % Pentagon

   Figure_id = 3;

   Figure_x =   [0 0  5  10 10];

   Figure_y = 2+[0 10 15 10  0];

   Figure_c = nnblue;

   p1 = 1;

   p2 = 1;

 elseif (rand > 0.5)

   % Rhombus

   Figure_id = 1;

   Figure_x =   [0 10 20 10];

   Figure_y = 7+[0 10 0 -10];

   Figure_c = nnred;

   p1 = 0;

   p2 = 0;

 else

   % Trapeze

   Figure_id = 2;

   Figure_x =   [0 5  15 20];

   Figure_y = 2+[0 10 10 0];

   Figure_c = nngreen

   p1 = 0;

   p2 = 0;

 end

 

 % FLASH Figure INDICATOR TWICE

 set(fig,'nextplot','add')

 nnsound(blip,Fs);

 set(Figure_indicator,...

   'color',[1 1 1])

 box = plot([10 60 60 10 10],[72 72 88 88 72],...

   'color',[1 1 1],...

   'CreateFcn','');

 

 nnpause(pause2)

 nnsound(bloop,Fs);

 set(Figure_indicator,...

   'color',[0.8 0.8 0])

 set(box,...

   'color',nndkblue)

 delete(box)

 nnpause(pause2)

 

 set(arrows(1),...

   'facecolor',nnred)

 t1 = clock;

 nnsound(wind,Fs);

 while etime(clock,t1) < 1, end

 nnpause(pause2)

 set(arrows(1),...

   'facecolor',nndkblue)

 

 set(Figure_indicator,...

   'color',[0.8 0.8 0])

 

 % CREATE Figure

 Figure = fill(x+Figure_x,y+Figure_y,Figure_c,...

   'edgecolor',Figure_c*0.5,...

   'CreateFcn','');

 set(fig,'nextplot','new')

 nnsound(knock,Fs);

 nnpause(pause2)

 

 % MOVE Figure TO SENSOR #1

 deg = pi/180;

 for dx=10:10:70

   t1 = clock;

   nnsound(blp,Fs);

   set(Figure,...

     'facecolor',nnltgray,...

     'edgecolor',nnltgray);

   set(Figure,...

     'facecolor',Figure_c,...

     'edgecolor',Figure_c*0.5,...

     'xdata',Figure_x + x + dx)

   angle = angle + 20;

   adata = [0 pi]-angle*deg;

   xdata = cos(adata)*8;

   ydata = sin(adata)*8+30;

   set(lines,'color',nnred);

   set(lines(1),...

     'xdata',xdata+50,...

     'ydata',ydata,...

     'color',nndkblue)

   set(lines(2),...

     'xdata',xdata+330,...

     'ydata',ydata,...

     'color',nndkblue)

   while etime(clock,t1) < 0.1, end

 end

 

 % SCAN Figure #1

 nnpause(pause2)

 working = get(rb1,'value');

 set(fig,'nextplot','add')

 if (working)

   h1 = fill(10+[170 130 130 170],[35 35 39 39],[1 1 1],...

     'edgecolor','none',...

     'CreateFcn','');

   h2 = fill(10+[170 130 130 170],[41 41 58 58],[1 1 1],...

     'edgecolor','none',...

     'CreateFcn','');

   set(Figure,...

    'facecolor',[1 1 1])

   t1 = clock;

   nnsound(scan,Fs);

   while etime(clock,t1) < 1; end

 else

   t1 = clock;

   nnsound(tribble,Fs);

   while etime(clock,t1) < 1, end

   p1 = 0;

 end

 

 t1 = clock;

 set(p1_box,'facecolor',[1 1 1]);

 set(p1_text,'color',nndkblue);

 nnsound(blip,Fs);

 while etime(clock,t1) < 1; end

 t1 = clock;

 set(p1_box,'facecolor',nnltgray);

 set(p1_text,'string',num2str(p1),'color',nndkblue);

 nnsound(bloop,Fs);

 while etime(clock,t1) < 1; end

 

 if (working)

   set(h1,'facecolor',nnltgray)

   set(h2,'facecolor',nnltgray)

   delete(h1)

   delete(h2)

   set(Figure,...

     'facecolor',Figure_c)

   set(fig,'nextplot','new')

 end

 nnpause(pause2)

 

 % MOVE Figure TO SENSOR #2

 deg = pi/180;

 for dx=80:10:130

   t1 = clock;

   nnsound(blp,Fs);

   set(Figure,...

     'facecolor',nnltgray,...

     'edgecolor',nnltgray);

   set(Figure,...

     'facecolor',Figure_c,...

     'edgecolor',Figure_c*0.5,...

     'xdata',Figure_x + x + dx)

   angle = angle + 20;

   adata = [0 pi]-angle*deg;

   xdata = cos(adata)*8;

   ydata = sin(adata)*8+30;

   set(lines,'color',nnred);

   set(lines(1),...

     'xdata',xdata+50,...

     'ydata',ydata,...

     'color',nndkblue)

   set(lines(2),...

     'xdata',xdata+330,...

     'ydata',ydata,...

     'color',nndkblue)

   while etime(clock,t1) < 0.1, end

 end

 

 % SCAN Figure #2

 nnpause(pause2)

 set(fig,'nextplot','add')

 h1 = fill(70+[170 130 130 170],[35 35 39 39],[1 1 1],...

   'edgecolor','none',...

   'CreateFcn','');

 h2 = fill(70+[170 130 130 170],[41 41 58 58],[1 1 1],...

   'edgecolor','none',...

   'CreateFcn','');

 set(Figure,...

  'facecolor',[1 1 1])

 

 t1 = clock;

 nnsound(scan,Fs);

 while etime(clock,t1) < 1, end

 

 t1 = clock;

 set(p2_box,'facecolor',[1 1 1]);

 set(p2_text,'color',nndkblue);

 nnsound(blip,Fs);

 while etime(clock,t1) < 1; end

 t1 = clock;

 set(p2_box,'facecolor',nnltgray);

 set(p2_text,'string',num2str(p2),'color',nndkblue);

 nnsound(bloop,Fs);

 while etime(clock,t1) < 1; end

 

 set(h1,'facecolor',nnltgray)

 set(h2,'facecolor',nnltgray)

 delete(h1)

 delete(h2)

 set(Figure,...

   'facecolor',Figure_c)

 set(fig,'nextplot','new')

 nnpause(pause2)

 

 % CLASSIFY Figure

 W2 = get(W2_ptr,'userdata');

 n = p1+W2*p2-0.5;

 a = hardlim(n);

 if (a == 1)

   result = 1;

 else

   result = 2;

 end

 

 t1 = clock;

 set(n_box,'facecolor',[1 1 1]);

 set(n_text,'color',nndkblue);

 nnsound(blip,Fs);

 while etime(clock,t1) < 1; end

 t1 = clock;

 set(n_box,'facecolor',nnltgray);

 set(n_text,'string',sprintf('%5.2f',n),'color',nndkblue);

 nnsound(bloop,Fs);

 while etime(clock,t1) < 1; end

 

 t1 = clock;

 set(a_box,'facecolor',[1 1 1]);

 set(a_text,'color',nndkblue);

 nnsound(blip,Fs);

 while etime(clock,t1) < 1; end

 t1 = clock;

 set(a_box,'facecolor',nnltgray);

 set(a_text,'string',num2str(a),'color',nndkblue);

 nnsound(bloop,Fs);

 while etime(clock,t1) < 1; end

 

 % MOVE DATA FROM NETWORK TO EXIT

 if (result == 1)

   indicator = top_indicator;

   box_x = 84;

 else

   indicator = bottom_indicator;

   box_x = 62;

 end

 set(indicator,...

   'color',[1 1 1])

 axes(fig_axis)

 set(fig,'nextplot','add')

 box = plot([0 62 62 0 0]+314,[0 0 14 14 0]+box_x,...

   'color',[1 1 1],...

   'CreateFcn','');

 

 nnpause(pause2);

 nnsound(bloop,Fs);

 

 % MOVE Figure TO EXIT

 for dx=140:10:200

   t1 = clock;

   nnsound(blp,Fs);

   set(Figure, ...

     'facecolor',nnltgray, ...

     'edgecolor',nnltgray);

   set(Figure, ...

     'facecolor',Figure_c, ...

     'edgecolor',Figure_c*0.5, ...

     'xdata',Figure_x + x + dx)

   angle = angle + 20;

   adata = [0 pi]-angle*deg;

   xdata = cos(adata)*8;

   ydata = sin(adata)*8+30;

   set(lines,'color',nnred);

   set(lines(1),...

     'xdata',xdata+50,...

     'ydata',ydata,...

     'color',nndkblue)

   set(lines(2),...

     'xdata',xdata+330,...

     'ydata',ydata,...

     'color',nndkblue)

   while etime(clock,t1) < 0.1, end

 end

 

 % REMOVE Figure

 nnpause(pause1)

 nnsound(blip,Fs);

 set(Figure,...

   'facecolor',nnltgray,...

   'edgecolor',nnltgray);

 delete(Figure)

 set(arrows(2),...

   'facecolor',nnred)

 nnsound(wind,Fs);

 set(arrows(2),...

   'facecolor',nndkblue)

 

 % UNLIGHT APPROPRIATE INDICATOR

 nnpause(pause1)

 nnsound(bloop,Fs);

 set(indicator,...

   'color',[0.8 0.8 0])

 set(box,...

   'color',nndkblue)

 delete(box)

 set(fig,'nextplot','new')

 

 % CHANGE GO BUTTON

 set(go_button,'string','Update');

 set(mode_ptr,'userdata',2);

 

 % SAVE DATA

 set(angle_ptr,'userdata',angle);

 set(Figure_ptr,'userdata',Figure);

 set(p1_ptr,'userdata',p1);

 set(p2_ptr,'userdata',p2);

 set(a_ptr,'userdata',a);  

 

%==================================================================

% Respond to Figure.

%

% ME('update')

%==================================================================

 

elseif strcmp(cmd,'go') & (fig) & (nargin == 1) & (mode == 2);

 

 % GET DATA

 blip = get(sounds(5),'userdata');

 bloop = get(sounds(6),'userdata');

 p2 = get(p2_ptr,'userdata');

 W2 = get(W2_ptr,'userdata');

 a = get(a_ptr,'userdata');

 

 % UPDATE WEIGHT

 W2 = W2 + 0.2*a*p2'-0.1*W2;

 if (W2 >= 10)

   W2_str = '>=10';

 else

   W2_str = sprintf('%5.2f',W2);

 end

 

 t1 = clock;

 set(W2_box,'facecolor',[1 1 1]);

 set(W2_text,'color',nndkblue);

 nnsound(blip,Fs);

 while etime(clock,t1) < 1; end

 t1 = clock;

 set(W2_box,'facecolor',nnltgray);

 set(W2_text,'string',W2_str,'color',nndkblue);

 nnsound(bloop,Fs);

 while etime(clock,t1) < 1; end

   % CLEAR INPUT AND OUTPUT

 set(p1_text,'color',nnltgray);

 set(p2_text,'color',nnltgray);

 set(a_text,'color',nnltgray);

 set(n_text,'color',nnltgray);

 set(p1_text,'color',nndkblue,'string','?');

 set(p2_text,'color',nndkblue,'string','?');

 set(a_text,'color',nndkblue,'string','?');

 set(n_text,'color',nndkblue,'string','?');

   % CHANGE GO BUTTON

 set(go_button,'string','Figure');

 set(mode_ptr,'userdata',1);

  % SAVE DATA

 set(W2_ptr,'userdata',W2);

 

%==================================================================

% Clear weights.

%

% ME('clear')

%==================================================================

 

elseif strcmp(cmd,'clear') & (fig) & (nargin == 1)

 

 % GET DATA

 blip = get(sounds(5),'userdata');

 bloop = get(sounds(6),'userdata');

 

 % CLEAR WEIGHT

 W2 = 0;

 

 t1 = clock;

 set(W2_box,'facecolor',[1 1 1]);

 set(W2_text,'color',nndkblue);

 nnsound(blip,Fs);

 while etime(clock,t1) < 1; end

 t1 = clock;

 set(W2_box,'facecolor',nnltgray);

 set(W2_text,'string',sprintf('%5.2f',W2),'color',nndkblue);

 nnsound(bloop,Fs);

 while etime(clock,t1) < 1; end

 

 % CLEAR INPUT AND OUTPUT

 set(p1_text,'color',nnltgray);

 set(p2_text,'color',nnltgray);

 set(a_text,'color',nnltgray);

 set(n_text,'color',nnltgray);

 set(p1_text,'color',nndkblue,'string','?');

 set(p2_text,'color',nndkblue,'string','?');

 set(a_text,'color',nndkblue,'string','?');

 set(n_text,'color',nndkblue,'string','?');

   % CHANGE GO BUTTON

 set(go_button,'string','Figure');

 set(mode_ptr,'userdata',1);

  % SAVE DATA

 set(W2_ptr,'userdata',W2);

 %==================================================================

% "Working" radio button.

%

% ME('working')

%==================================================================

 

elseif strcmp(cmd,'working') & (fig)

 

 set(rb1,'value',1);

 set(rb2,'value',0);

 set(cross,'color',nndkblue);

 %==================================================================

% "Not Working" radio button.

%

% ME('working')

%==================================================================

 elseif strcmp(cmd,'notworking') & (fig)

 

 set(rb1,'value',0);

 set(rb2,'value',1);

 set(cross,'color',nnred);

end

Результати роботи програми:

Інша фігура:

 

Висновок:

У ході виконання лабораторної роботи було вивчено основні принципи роботи алгоритму розпізнавання образів Hamming classification.


 

А также другие работы, которые могут Вас заинтересовать

42814. Розрахунок електтродвигуна з заданими характеристиками 354.91 KB
  Зазвичай обирається електродвигун з потужністю, яка трохи більша, ніж потрібна. За потрібною потужністю електродвигуна та синхронною частотою обертання обираємо електродвигун з характеристиками, які наведено у таблиці
42815. Расчет электродвигателя мощностью 4000Вт 485.77 KB
  Мощность на выходном валу P= 4000Вт Скорость выходного вала V=1м с Термообработка зубчатого колеса улучшение HB 350 Время работы редуктора L = 15000ч Долговечность роликовых подшипников L10h = 25000ч Выбор электродвигателя. частота 2900 1455 970 730 D вала 42 48 48 55 По таблице выбираем ближайшую стандартную мощность электродвигателя Рэ. Частота вращения вала электродвигателя nвых= об мин где р – шаг резьбы винтовой передачи = 0. Определение частоты вращения валов: nт = nвых = 300об мин – частота вращения вала тихоходной...
42816. Розробка серії графічних елементів портфоліо, відео композиції, художньої графіки 460.5 KB
  Дипломна робота присвячена розробці дизайн проекту на основі розробки сайту, відео презентації, єлектроного та друкованого портфоліо за допомогою теоретичних знань та практичних навичок, які були набуті на протязі навчання з використанням комп’ютерної графіки та сучасних новітніх матеріалів.
42818. установочное приспособление для растачивания отверстия детали «Кронштейн» 1.14 MB
  Изучение закономерности влияния приспособления на точность и производительность выполняемых операций позволяет проектировать приспособления интенсифицирующее производство и повышающее его точность. Проводимая работа по унификации и стандартизации элементов приспособления создала основу для автоматизированного проектирования приспособлений с использованием ЭВМ и автоматов для графического изображения что приводит к ускорению технологической подготовке производства. неподвижная опора с плоской формой рабочей...
42819. Технологический процесс производства детали Вилка 8А67-20275 2.02 MB
  Технологический контроль чертежа детали и анализ детали на технологичность Определяем тип производства по коэффициенту закрепления операций. Определяем величину производственной партии = 1. Определяем массу заготовки: = ; 2. Определяем объем заготовки: = ; 2.
42822. Кондуктор для сверления отверстия в детали Вал 1.2 MB
  Изучение закономерности влияния приспособления на точность и производительность выполняемых операций позволяет проектировать приспособления интенсифицирующее производство и повышающее его точность. Проводимая работа по унификации и стандартизации элементов приспособления создала основу для автоматизированного проектирования приспособлений с использованием ЭВМ и автоматов для графического изображения что приводит к ускорению технологической подготовке производства.2 Разработка принципиальной схемы приспособления Кондуктор предназначен...