function rezultat = poopcavanje(matrica)

velicina = max(size(matrica));

broj_razina = 5;
vel_segmenta = 32;

broj_segmenata = velicina/vel_segmenta;
brojac = 0;

% izrada histograma boja doticne slike
histogram = zeros(1,255);

for k = 0:broj_segmenata-1
    for l = 0:broj_segmenata-1
%        brojac = brojac + 1
        uzorak = matrica(k*vel_segmenta+1, l*vel_segmenta+1);
        histogram(uzorak) = histogram(uzorak) + 1;
    end;
end;

redak = 0;
% i pocinje od 1 zato jer je pri labeliranju pozadina pocetne matrice u
% koju se spremaju segmenti tekstura jednaka 0, a prva boja kojim ce se
% bojat je onda 1.
for k = 0:broj_segmenata-1
    redak = redak + 1
    for l = 0:broj_segmenata-1
        uzorak = matrica(k*vel_segmenta+1, l*vel_segmenta+1);
        for i=1:broj_razina + 1
            % uzorak sadrzi vrijednost boje kojom je obojan doticni
            % segment. Te da li broj segmenata obojan tom bojom je jednak
            % broju razina. Ako je, onda farbanje!
            if(histogram(uzorak) == i)
                % nac koja najzastupljenija boja mu je susjedna i oboji ga
                % tom bojom.
                maks = 0;
                boja = 0;
                if (k == 0) % ---------------------------------------------
                    % nalazim se u prvom redu
                    if (l == 0)
                        % nalazim se u prvom stupcu
                        % Treba uzet uzorak DOLJE i DESNO.
                        susjedni_uzorak = matrica((k+1)*vel_segmenta+1, l*vel_segmenta+1);
                        if (histogram(susjedni_uzorak) > maks)
                            maks = histogram(susjedni_uzorak);
                            boja = susjedni_uzorak;
                        end;
                        susjedni_uzorak2 = matrica(k*vel_segmenta+1, (l+1)*vel_segmenta+1);
                        if (histogram(susjedni_uzorak2) > maks)
                            boja = susjedni_uzorak2;
                        end;
                    elseif (l == broj_segmenata-1)
                        % nalazim se na kraju prvog retka
                        % Treba uzet uzorak DOLJE, LIJEVO
                        susjedni_uzorak = matrica((k+1)*vel_segmenta+1, l*vel_segmenta+1);
                        if (histogram(susjedni_uzorak) > maks)
                            maks = histogram(susjedni_uzorak);
                            boja = susjedni_uzorak;
                        end;
                        susjedni_uzorak2 = matrica(k*vel_segmenta+1, (l-1)*vel_segmenta+1);
                        if (histogram(susjedni_uzorak2) > maks)
                            boja = susjedni_uzorak2;
                        end;
                    else
                        % nalazim se negdje u sredini prvog retka.
                        % Treba uzet uzorak DOLJE, LIJEVO, DESNO
                        susjedni_uzorak = matrica((k+1)*vel_segmenta+1, l*vel_segmenta+1);
                        if (histogram(susjedni_uzorak) > maks)
                            maks = histogram(susjedni_uzorak);
                            boja = susjedni_uzorak;
                        end;
                        susjedni_uzorak2 = matrica(k*vel_segmenta+1, (l-1)*vel_segmenta+1);
                        if (histogram(susjedni_uzorak2) > maks)
                            maks = histogram(susjedni_uzorak2);
                            boja = susjedni_uzorak2;
                        end;
                        susjedni_uzorak3 = matrica(k*vel_segmenta+1, (l+1)*vel_segmenta+1);
                        if (histogram(susjedni_uzorak3) > maks)
                            boja = susjedni_uzorak3;
                        end;
                    end;
                elseif (k == broj_segmenata-1) % --------------------------
                    % nalazim se u zadnjem retku
                    if (l == 0)
                        % nalazim se u prvom stupcu
                        % Treba uzet uzorak  GORE i DESNO.
                        susjedni_uzorak = matrica((k-1)*vel_segmenta+1, l*vel_segmenta+1);
                        if (histogram(susjedni_uzorak) > maks)
                            maks = histogram(susjedni_uzorak);
                            boja = susjedni_uzorak;
                        end;
                        susjedni_uzorak2 = matrica(k*vel_segmenta+1, (l+1)*vel_segmenta+1);
                        if (histogram(susjedni_uzorak2) > maks)
                            boja = susjedni_uzorak2;
                        end;
                    elseif (l == broj_segmenata-1)
                        % nalazim se na kraju prvog retka
                        % Treba uzet uzorak GORE i LIJEVO
                        susjedni_uzorak = matrica((k-1)*vel_segmenta+1, l*vel_segmenta+1);
                        if (histogram(susjedni_uzorak) > maks)
                            maks = histogram(susjedni_uzorak);
                            boja = susjedni_uzorak;
                        end;
                        susjedni_uzorak2 = matrica(k*vel_segmenta+1, (l-1)*vel_segmenta+1);
                        if (histogram(susjedni_uzorak2) > maks)
                            boja = susjedni_uzorak2;
                        end;
                    else
                        % nalazim se negdje u sredini prvog retka.
                        % Treba uzet uzorak GORE, LIJEVO, DESNO
                        susjedni_uzorak = matrica((k-1)*vel_segmenta+1, l*vel_segmenta+1);
                        if (histogram(susjedni_uzorak) > maks)
                            maks = histogram(susjedni_uzorak);
                            boja = susjedni_uzorak;
                        end;
                        susjedni_uzorak2 = matrica(k*vel_segmenta+1, (l-1)*vel_segmenta+1);
                        if (histogram(susjedni_uzorak2) > maks)
                            maks = histogram(susjedni_uzorak2);
                            boja = susjedni_uzorak2;
                        end;
                        susjedni_uzorak3 = matrica(k*vel_segmenta+1, (l+1)*vel_segmenta+1);
                        if (histogram(susjedni_uzorak3) > maks)
                            boja = susjedni_uzorak3;
                        end;
                    end;                    
                else % ---------------------------------------------------- 
                    % nalazim se negdje u sredini redaka
                    if (l == 0)
                        % nalazim se u prvom stupcu
                        % Treba uzet uzorak DOLJE, GORE i DESNO.
                        susjedni_uzorak = matrica((k+1)*vel_segmenta+1, l*vel_segmenta+1);
                        if (histogram(susjedni_uzorak) > maks)
                            maks = histogram(susjedni_uzorak);
                            boja = susjedni_uzorak;
                        end;
                        susjedni_uzorak2 = matrica((k-1)*vel_segmenta+1, l*vel_segmenta+1);
                        if (histogram(susjedni_uzorak2) > maks)
                            maks = histogram(susjedni_uzorak2);
                            boja = susjedni_uzorak2;
                        end;
                        susjedni_uzorak3 = matrica(k*vel_segmenta+1, (l+1)*vel_segmenta+1);
                        if (histogram(susjedni_uzorak3) > maks)
                            boja = susjedni_uzorak3;
                        end;
                    elseif (l == broj_segmenata-1)
                        % nalazim se na kraju prvog retka
                        % Treba uzet uzorak DOLJE, GORE i LIJEVO.
                        susjedni_uzorak = matrica((k+1)*vel_segmenta+1, l*vel_segmenta+1);
                        if (histogram(susjedni_uzorak) > maks)
                            maks = histogram(susjedni_uzorak);
                            boja = susjedni_uzorak;
                        end;
                        susjedni_uzorak2 = matrica((k-1)*vel_segmenta+1, l*vel_segmenta+1);
                        if (histogram(susjedni_uzorak2) > maks)
                            maks = histogram(susjedni_uzorak2);
                            boja = susjedni_uzorak2;
                        end;
                        susjedni_uzorak3 = matrica(k*vel_segmenta+1, (l-1)*vel_segmenta+1);
                        if (histogram(susjedni_uzorak3) > maks)
                            boja = susjedni_uzorak3;
                        end;
                    else
                        % nalazim se negdje u sredini prvog retka.
                        % Treba uzet uzorak DOLJE, GORE, LIJEVO, DESNO
                        susjedni_uzorak = matrica((k+1)*vel_segmenta+1, l*vel_segmenta+1);
                        if (histogram(susjedni_uzorak) > maks)
                            maks = histogram(susjedni_uzorak);
                            boja = susjedni_uzorak;
                        end;
                        susjedni_uzorak2 = matrica((k-1)*vel_segmenta+1, l*vel_segmenta+1);
                        if (histogram(susjedni_uzorak2) > maks)
                            maks = histogram(susjedni_uzorak2);
                            boja = susjedni_uzorak2;
                        end;
                        susjedni_uzorak3 = matrica(k*vel_segmenta+1, (l-1)*vel_segmenta+1);
                        if (histogram(susjedni_uzorak3) > maks)
                            maks = histogram(susjedni_uzorak3);
                            boja = susjedni_uzorak3;
                        end;
                        susjedni_uzorak4 = matrica(k*vel_segmenta+1, (l+1)*vel_segmenta+1);
                        if (histogram(susjedni_uzorak4) > maks)
                            boja = susjedni_uzorak4;
                        end;
                    end;
                end;
                matrica(k*vel_segmenta+1 : k*vel_segmenta + vel_segmenta,...
                        l*vel_segmenta+1 : l*vel_segmenta + vel_segmenta) = boja;
            % end od for petlje za histogram
            end;
        % end od petlje za razine
        end;
    % end od petlje za stupce
    end;
% end od petlje za retke
end;

rezultat = matrica;