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.


 

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

83978. Великое княжество Литовское и Русское 109.5 KB
  Цель урока: формирование у обучающихся знаний об условиях и процессе возвышения Великого княжества Литовского и Русского Задачи урока. Образовательные: проследить исторические условия и процесс возвышения Великого княжества Литовского выявит взаимосвязь между формированием государственности...
83979. Наталья Абрамцева «О чём думал котёнок?» 28.41 KB
  Цель урока: Раскрыть нравственный замысел Н.Абрамцевой в сказке О чём думал котёнок Задачи: 1. О ком эта загадка Вам не показалось странным почему когда мы говорим о дружбе у нас здесь котёнок У кого из вас есть такой друг.
83980. Роберт Бёрнс – народный поэт 18.05 KB
  Цели: обучающие: формирование у учащихся представления об особенностях английской поэзии закрепление знаний по теории литературы; развивающие: развитие умения выполнять сопоставительный анализ произведений различных по жанру (именно по фольклору), развивать навык работы с информационным...
83981. Всемирное наследие человечества 62 KB
  Педагогическая цель: знакомство с объектами Всемирного наследия, показ красоты и неповторимости великих достопримечательностей Задачи: проверить знание экологического календаря; познакомить с понятием всемирное наследие, эмблемой организации Всемирное наследие, с наиболее известными мировыми...
83982. Возникновение ислама и объединение арабов 18.27 KB
  Сегодня на уроке мы постараемся выяснить причины образования государства у арабов: узнаем о природных условиях Аравийского полуострова занятиях верованиях арабов появлении Мухаммеда и возникновении ислама. Изучение нового материала 8 Учитель начинает рассказ о местах первоначального...
83983. Взаимное расположение графиков линейных функций 23.28 KB
  Цели урока: ввести условия пересечения и параллельности графиков линейных функций; отработать умение строить графики линейной функции и прямой пропорциональности; развивать: 1 умение сравнивать выявлять закономерности обобщать; 2 познавательный интерес к предмету; 3 творческие способности учащихся...
83984. Главные члены предложения. Подлежащее и сказуемое 85.5 KB
  Тема урока: Главные члены предложения. Цель: создать условия для знакомства с существенными признаками главных членов предложения способствовать развитию умения определять главные члены в предложении развитию памяти внимания логического мышления устной и письменной речи формированию навыков грамотного письма создать условия для формирования активности социальной роли ученика. Предметные: находить главные члены основу предложения; обозначать графически грамматическую основу. Планируемые результаты: Предметные: находить основу ...
83985. Русская литература XIX века 59.5 KB
  Цели урока: Образовательные: повторение и обобщение изученного в разделе; закрепление полученных знаний. Развивающие: развитие творческого мышления, памяти, речи, внимания учащихся. Воспитательные: формирование чувства ответственности, сотрудничества, общительности, коммуникативных навыков.
83986. Наволочка с клапаном. Швы, используемые при фабричном пошиве бельевого изделия 21.21 KB
  Прежде чем начать урок я хочу вас познакомить с табелем в котором буду отмечать при помощи кружков вашу работу устные ответы а также вашу практическую работу Табель контроль Моя оценка пример Ф. Учитель Сегодня на уроке мы обобщим знания о постельном белье.