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.


 

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

21651. ОСНОВНЫЕ ПРИНЦИПЫ ПРОЕКТИРОВАНИЯ И ЭКСПЛУАТАЦИОННО-ТЕХНИЧЕСКОГО ОБСЛУЖИВАНИЯ ВОЛС 83 KB
  ОСНОВНЫЕ ПРИНЦИПЫ ПРОЕКТИРОВАНИЯ И ЭКСПЛУАТАЦИОННОТЕХНИЧЕСКОГО ОБСЛУЖИВАНИЯ ВОЛС. Требования к ВОЛС. Учет совокупности всех перечисленных факторов делает процесс проектирования ВОЛС довольно сложным допускающим получение неоднозначного решения когда выбор окончательного варианта определится конкретными условиями применения. Разработке проекта строительства ВОЛС должны предшествовать изыскательские работы с выездом на место строительства зданий НРП и трассу прокладки кабеля.
21652. Метод коммутации каналов 124.5 KB
  Коммуникационные сети должны обеспечивать связь своих абонентов между собой. Абонентами могут выступать ЭВМ, сегменты локальных сетей, факс - аппараты или телефонные собеседники.
21653. Педагогічна філософія Монтессорі 200 KB
  Світове визнання технологія М. Монтессорі здобула завдяки гуманістичному підходу для виховання і навчання дітей, вірі у безмежні можливості розвитку дитини, опорі на її самостійність та індивідуальність. Виховна мета цієї технології полягає в розкритті духовного та інтелектуального потенціалу дитини
21654. Мочекаменная болезнь (уролитиаз) 115.5 KB
  Волоконный световод представляет собой тонкую двухслойную стеклянную нить сердечника и оболочки каждый элемент которой обладает различным показателем преломления. Показатель преломления n прозрачного вещества представляет собой отношение скорости света в вакууме с к скорости света в данном веществе v то есть n=c v. Кроме того показатель преломления зависит от параметров среды и рассчитывается по формуле: где и относительные соответственно диэлектрическая и магнитная проницаемости. Учитывая что относительная...
21655. ОСНОВНОЕ УРАВНЕНИЕ ПЕРЕДАЧИ ПО СВЕТОВОДУ 166.5 KB
  воспользуемся основными уравнениями электродинамики уравнениями Максвелла которые для диэлектрических волноводов имеют вид: 1 Уравнения Максвелла справедливы для любой системы координат. Для направляющих систем эти уравнения наиболее часто применяются в цилиндрической системе координат ось Z которой совместим с оптической осью световода: 2 Для решения инженерных задач электродинамики необходимо знать продольные составляющие полей Еz и Hz. Отсюда следует что продольные...
21656. Оптимизация структуры доходов бюджета Российской Федерации 358 KB
  Раскрыть теоретические вопросы понятия «доходы бюджета», его сущность и структуру; раскрыть особенности нормативно - правовой базы доходов бюджета; провести анализ доходов и расходов бюджета Российской Федерации, его основных поступлений; разработать рекомендации по оптимизации структуры доходов бюджета Российской Федерации.
21657. ЗАТУХАНИЕ 160 KB
  ЗАТУХАНИЕ Важнейшими параметрами световода являются оптическое потери и соответственно затухание передаваемой энергии. Собственные потери волоконных световодов состоят в первую очередь из потерь поглощения и потерь рассеивания т. Потери на поглощение существенно зависят от частоты материала и при наличии посторонних примесей могут быть значительными. Потери обусловлены комплексным характером показателя преломления nдjnм который связан с тангенсом угла диэлектрических потерь выражением .
21658. Гидрология болот 114 KB
  Вместо высоких камышей и тростников развиваются мелководные растения хвощи осоки и многие другие водолюбивые растения отложения которых хотя и поднимаются над поверхностью воды в озере но затопляются весенними и летними высокими водами отлагающими принесенные или взмученные частицы ила. В климатических условиях северной половины России осадков выпадает больше чем расходуется влаги на испарение поэтому излишек воды скапливается на поверхности болота сначала в форме мочажин а затем в виде вторичных озер и русел...
21659. Гидрология подземных вод 318 KB
  Долгое время существовали две теории отрицавшие одна другую: теория инфильтрации в которой утверждалось что скопление подземной воды есть результат просачивания атмосферных осадков в почву и грунт теория конденсации доказывающая что источником происхождения подземных вод является водяной пар атмосферы который вместе с воздухом попадает в холодные слои земной коры и там конденсируется. Воды возникают на больших глубинах из диссоциированных ионов Н и О2 или паров воды поднимающихся из магматической или метаморфической зоны....