clear all
clc
close all

%%  A. VYTVORENI 'UCEBNI' MNOZINY

load data_3pyl % hamming_vstupy
% vstup obsahuje 3 vektory a 1 matici: x_trida1, x_trida2, x_trida3 a x
% kde: x_trida1, x_trida2, x_trida3 ... definovane binarni vzory 150x150 bodu 
%                             jako matice
%      x ... 12 zarusenych binarnich obrazu
%            jako matice 12 sloupcovych vektoru po 150*150 hodnotach
% Pozn.:    x_trida1, x_trida2, x_trida3 se 'ukladaji' do pameti site a
%           pouzivaji se jako 'ucebni' vzory pro 3 ruzne tridy - pylove zrno brizy, ambrozie a borovice (vzory pouzivane pak pro rozhodovani)
%           x je matice 'testovacich' vstupnich vektoru, ktere se klasifikuji do 3 skupin
%           (klasifikacnich trid)


N          = size(x,1); % delka vstupniho vektoru
MTest      = size(x,2); % pocet testovacich vstupnich obrazu

figure % kresba 1.vzoru
imshow(x_trida1)
title('briza - referencni vzor')
xlabel('Vzorky')
ylabel('Vzorky')

figure % kresba 2.vzoru
imshow(x_trida2)
title('ambrozie - referencni vzor')   
xlabel('Vzorky')
ylabel('Vzorky')

figure % kresba 3.vzoru
imshow(x_trida3)
title('borovice - referencni vzor')
xlabel('Vzorky')
ylabel('Vzorky')

    
w1 = x_trida1(:); % nastaveni vah 1. neuronu na vzorky vstupniho vzoru pro tridu 'briza'
w2 = x_trida2(:); % nastaveni vah 2. neuronu na vzorky vstupniho vzoru pro tridu 'ambrozie'
w3 = x_trida3(:); % nastaveni vah 3. neuronu na vzorky vstupniho vzoru pro tridu 'borovice'

%% B. VYPOCET ODPOVEDI SITE NA PREDLOZENE VSTUPNI VZORY (ROZPOZNAVANI VZORU)

for i = 1:MTest
    y_briza       = neuron_hamming(x(:,i),w1, N) % vypocet vystupu 1.neuronu
    ham_briza     = N - y_briza                % vypocet hammingove vzdalenosti na vystupu 1.neuronu
    y_ambrozie    = neuron_hamming(x(:,i),w2, N) % vypocet vystupu 2.neuronu
    ham_ambrozie  = N - y_ambrozie                   % vypocet hammingove vzdalenosti na vystupu 2.neuronu
    y_borovice   = neuron_hamming(x(:,i),w3, N) % vypocet vystupu 3.neuronu
    ham_borovice = N - y_borovice            % vypocet hammingove vzdalenosti na vystupu 3.neuronu
    
    ham = [ham_briza ham_ambrozie ham_borovice]; 
    [min_ham, imin] = min(ham);                           % vyhledavani minimalni vzdalenosti
    
    if imin==1                                            % prirazeni urcite tridy na zaklade vypoctene minimalni vzdalenosti
        trida = 'briza'
    elseif imin==2
        trida = 'ambrozie'
    elseif imin==3
        trida = 'borovice'
    end
    
    figure
    imshow(reshape(x(:,i),150,150));        % vykresleni vysledku rozpoznavani (klasifikace)
    title(trida);
    xlabel('Vzorky')
    ylabel('Vzorky')
    pause;
end



