function [Match] = CodeRecognition(Scan,GlobCoor,LIB,EllipseDataAccurate,MaxHamming)

%Ucelem teto funkce je prirazeni kodu znacek k jejim souradnicim ve snimku
%a v prostoru

%ROZPOZNANI SKENOVANYCH KODU

for i=1:size(Scan,3)
    
    Code = ANN05(Scan(:,:,i));                                              %rozeznani kazdeho bitu kodu pomoci neuronove site
    Codes(i,:) = Code(1,:);                                                 %ulozeni rorzeznanych kodu
       
end

%PRIRAZENI SKENOVANYCH KODU PRVKUM V KNIHOVNE

for i=1:size(Codes,1)
    
    v = Codes(i,:);                                                         %dany kod
    
    for j=1:size(v,2)
        
        v = horzcat(v(1,15),v);                                             %vytvoreni "rotaci" cyklickeho kodu
        v(:,16) = [];
        
        varch(:,j) = v;                                                     %ulozeni jednotlivych "rotaci"
        
        for k = 1:size(LIB,1)                                               %vypocet Hammingovych vzdalenosti kazde rotace od kazdeho prvku v knihovne
            a = LIB(k,2:16);
            rk(k,j) = sum(abs(a(:)-varch(:,j)));
        end    
    end
    
    rkmin = min(min(rk));                                                   %vyber nejmensi Hammingovy vzdalenosti
    
    for j = 1:size(rk,2)                                 
        for k = 1:size(rk,1)
            
            if rk(k,j)==rkmin                                               %prirazeni bitoveho kodu k cislu nejpodobnejsiho bitoveho kodu v knihovne
                result(i,:) = horzcat(LIB(k,1),rkmin);
                
            elseif rkmin>MaxHamming                                         %pokud je Hammingova vzdalenost vetsi nez dana mez, kod neni prirazen
                result(i,:) = horzcat(999,rkmin);
                
            end
        end
    end        
end

%VYTVORENI MATICE OBSAHUJICI CISLA ZNACEK A JEJICH SOURADNICE V OBRAZE A V PROSTORU

result1 = horzcat(result,EllipseDataAccurate(:,4:5));                       %prirazeni souradnic elips v obraze 

Match=[];                                                                   %priprava matice vysledku

for i = 1:size(result1,1)
    for j = 1:size(GlobCoor,1)
        
        if result1(i,1)==GlobCoor(j,1)                                      %generovani matice vysledku - obsahuje cisla znacek, souradnece bodu v obraze a souradnice bodu v prostoru
            Match(size(Match,1)+1,:)=horzcat(result1(i,1),GlobCoor(j,2:4),result1(i,4),(result1(i,3)));
        end
        
    end
end

end

