function [rezultat,pragovi] = labeliranje2(matrica)

prag = 200;  %prag za umjetne slike
% prag = 510;  %prarg za prirodne slike
velicina = max(size(matrica));
temp = zeros(velicina);

vel_segmenta = 32;
d2=[];

broj_segmenata = velicina/vel_segmenta;
boja = 1;
brojac = 0;

figure; imagesc(temp);pause;

for k = 0:broj_segmenata-1
    for l = 0:broj_segmenata-1
	
        brojac = brojac + 1
        
        referentni_segment=matrica(k*vel_segmenta+1 : k*vel_segmenta + vel_segmenta,...
                                   l*vel_segmenta+1 : l*vel_segmenta + vel_segmenta);
        CSGV_referentni = CSGvektor(referentni_segment);

        if (k == 0)             % provjera da li se nalazi u prvom redu
            if (l == 0)         % provjera da li se nalazi u prvom stupcu
                % da, nalazi se u prvom retku i prvom stupcu i daj mi
                % samo pocetnu labelu
                temp(k*vel_segmenta+1 : k*vel_segmenta + vel_segmenta,...
                     l*vel_segmenta+1 : l*vel_segmenta + vel_segmenta) = boja;
                boja = boja + 1;
            else
                % nalazim se u prvom retku i nekom stupcu. Moram samo
                % pogledat sebi lijevog i ako smo OK uzet njegovu
                % labelu, a ko nismo uzet novu labelu.
                okolni_segment = matrica(k*vel_segmenta+1 : k*vel_segmenta + vel_segmenta,...
                                         (l-1)*vel_segmenta+1 : (l-1)*vel_segmenta + vel_segmenta);
                CSGV_okolni = CSGvektor(okolni_segment);
                d = dist(CSGV_referentni', CSGV_okolni)
                if (d < prag)
                    temp(k*vel_segmenta+1 : k*vel_segmenta + vel_segmenta,...
                         l*vel_segmenta+1 : l*vel_segmenta + vel_segmenta) = ...
                       temp(k*vel_segmenta+1, (l-1)*vel_segmenta+1);
                else
                    temp(k*vel_segmenta+1 : k*vel_segmenta + vel_segmenta,...
                     l*vel_segmenta+1 : l*vel_segmenta + vel_segmenta) = boja;
                    boja = boja + 1;
                end;
            end;
        else
            % nisam u prvom retku
            % da li sam u prvom stupcu)
            if (l == 0)
                zastavica = 0;
                % pogledaj sebi gornja dva segmenta
                prag2 = prag;
                for i=0:1
                    okolni_segment = matrica((k-1)*vel_segmenta+1 : (k-1)*vel_segmenta + vel_segmenta,...
                                             (l+i)*vel_segmenta+1 : (l+i)*vel_segmenta + vel_segmenta);
                    CSGV_okolni = CSGvektor(okolni_segment);
                    d = dist(CSGV_referentni', CSGV_okolni)
                    if (d < prag2)
                       temp(k*vel_segmenta+1 : k*vel_segmenta + vel_segmenta,...
                            l*vel_segmenta+1 : l*vel_segmenta + vel_segmenta) = ...
                          temp((k-1)*vel_segmenta+1, (l+i)*vel_segmenta+1);
                       zastavica = 1;
                       prag2 = d;
                    end;
                end;
                % ako ne pripadam nikom od susjeda onda mi daj novu
                % labelu (zastavica nije postavljena u 1)
                if (zastavica == 0)
                    temp(k*vel_segmenta+1 : k*vel_segmenta + vel_segmenta,...
                         l*vel_segmenta+1 : l*vel_segmenta + vel_segmenta) = boja;
                    boja = boja + 1;
                end;
            elseif (l == broj_segmenata-1) % da li sam u zadnjem stupcu
                zastavica = 0;
                % provjeri sebi lijevog
                okolni_segment = matrica(k*vel_segmenta+1 : k*vel_segmenta + vel_segmenta,...
                                         (l-1)*vel_segmenta+1 : (l-1)*vel_segmenta + vel_segmenta);
                CSGV_okolni = CSGvektor(okolni_segment);
                d = dist(CSGV_referentni', CSGV_okolni)
                if (d < prag)
                    temp(k*vel_segmenta+1 : k*vel_segmenta + vel_segmenta,...
                         l*vel_segmenta+1 : l*vel_segmenta + vel_segmenta) = ...
                       temp(k*vel_segmenta+1, (l-1)*vel_segmenta+1);
                    zastavica = 1;
                    prag2 = d;
                else
                    prag2 = prag;
                end;
                % nije isti ko lijevi, pogledaj gornja dva
                for i=-1:0
                   okolni_segment = matrica((k-1)*vel_segmenta+1 : (k-1)*vel_segmenta + vel_segmenta,...
                                         (l+i)*vel_segmenta+1 : (l+i)*vel_segmenta + vel_segmenta);
                   CSGV_okolni = CSGvektor(okolni_segment);
                   d = dist(CSGV_referentni', CSGV_okolni)
                   if (d < prag)
                      temp(k*vel_segmenta+1 : k*vel_segmenta + vel_segmenta,...
                           l*vel_segmenta+1 : l*vel_segmenta + vel_segmenta) = ...
                         temp((k-1)*vel_segmenta+1, (l+i)*vel_segmenta+1);
                      zastavica = 1;
                      break;
                   end;
                end;
                % ako ne pripadam nikom od susjeda onda mi daj novu
                % labelu (zastavica nije postavljena u 1)
                if (zastavica == 0)
                    temp(k*vel_segmenta+1 : k*vel_segmenta + vel_segmenta,...
                         l*vel_segmenta+1 : l*vel_segmenta + vel_segmenta) = boja;
                    boja = boja + 1;
                end;
            else % nalazim se negdje u sredini
                zastavica = 0;
                % sad moram pogledat sebi lijevoga i sebi gornja tri

                % provjeri sebi lijevog
                okolni_segment = matrica(k*vel_segmenta+1 : k*vel_segmenta + vel_segmenta,...
                                         (l-1)*vel_segmenta+1 : (l-1)*vel_segmenta + vel_segmenta);
                CSGV_okolni = CSGvektor(okolni_segment);
                d = dist(CSGV_referentni', CSGV_okolni)
                if (d < prag)
                    temp(k*vel_segmenta+1 : k*vel_segmenta + vel_segmenta,...
                         l*vel_segmenta+1 : l*vel_segmenta + vel_segmenta) = ...
                       temp(k*vel_segmenta+1, (l-1)*vel_segmenta+1);
                    zastavica = 1;
                    prag2 = d;
                else
                    prag2 = prag;
                end;%else

                % nije isti ko lijevi, pogledaj gornja dva
                for i=-1:1
                   okolni_segment = matrica((k-1)*vel_segmenta+1 : (k-1)*vel_segmenta + vel_segmenta,...
                                            (l+i)*vel_segmenta+1 : (l+i)*vel_segmenta + vel_segmenta);
                   CSGV_okolni = CSGvektor(okolni_segment);
                   d = dist(CSGV_referentni', CSGV_okolni)
                   if (d < prag2)
                      temp(k*vel_segmenta+1 : k*vel_segmenta + vel_segmenta,...
                           l*vel_segmenta+1 : l*vel_segmenta + vel_segmenta) = ...
                         temp((k-1)*vel_segmenta+1, (l+i)*vel_segmenta+1);
                      zastavica = 1;
                      prag2 = d;
                   end;
                end;
                %end;
                % ako ne pripadam nikom od susjeda onda mi daj novu
                % labelu (zastavica nije postavljena u 1)
                if (zastavica == 0)
                    temp(k*vel_segmenta+1 : k*vel_segmenta + vel_segmenta,...
                         l*vel_segmenta+1 : l*vel_segmenta + vel_segmenta) = boja;
                    boja = boja + 1;
                end;
            end;
        end;
        imagesc(temp); pause(0.01);
    end;
end;

rezultat = temp;