%***Průměrování histogramu***

nastaveni.prumer.maska = str2num(get(findobj('Tag','Maska'),'String'));    %načtení masky podlekteré se bude histogram prumerovat
nastaveni.prumer.opak  = 1;                                                % Kolikrat se bude prumerovani opakovat
nastaveni.prumer.masky = 1;                                                % Pri sudem poctu prvku masky bude posunuta 0-doleva 1-doprava 
nastaveni.prumer.okraje= 1;                                                % Jak nahradit body mimo masku 0=0 1=krajnim bodem >1=timto cislem

nastaveni.prumer.maska_velikost = size(nastaveni.prumer.maska);            % Rozměry masky

if nastaveni.prumer.masky == 0;                                            % Posunuti od kraju
   temp_xl = ceil(nastaveni.prumer.maska_velikost(2)/2);
elseif nastaveni.prumer.masky == 1;
   temp_xl = fix (nastaveni.prumer.maska_velikost(2)/2)+1;
end
temp_xp = nastaveni.prumer.maska_velikost(2)-temp_xl;

nastaveni.prumer.delitel = 0;
for index=1:nastaveni.prumer.maska_velikost(2);                             % Součet všech prvků v masce
    nastaveni.prumer.delitel = nastaveni.prumer.delitel + nastaveni.prumer.maska(index);
end

for index=1:nastaveni.prumer.opak;                                         % Opakování pruměrování
    for x=1:nastaveni.sektory.x;                                           % Pro všechny histogramy v ose x
        for y=1:nastaveni.sektory.y;                                       % Pro všechny histogramy v ose y
            for z=1:255;                                                   % Pro všechny prvky jednoho histogramu
                temp=0;                                                    % Vynuluju pomocnou proměnnou 
                for z_x=1:nastaveni.prumer.maska_velikost(1,2);            % Opakuji pro celou velikost masky
                    if z+z_x-1-temp_xl < 1;                                % Pokud maska zasahuje mimo histogram nalevo
                        switch nastaveni.prumer.okraje;                    % Nastavení co dělat když maska zasahuje mimo  
                            case 0
                                temp=0;                                    %místo prvků mimo započítám nulu
                            case 1
                                %místo prvků mimo započítám poslední prvek
                                temp=temp+nastaveni.prumer.maska(1,z_x)*pamet.upraveny_obraz.hisogram(x,y,1);
                            otherwise
                                temp=nastaveni.prumer.okraje;              %místo prvků mimo započítám nastavení prumeru okraje
                            end        
                    elseif z+z_x-1-temp_xp > 254;                          % Pokud maska zasahuje mimo histogram napravo
                        switch nastaveni.prumer.okraje;                    % Nastavení co dělat když maska zasahuje mimo 
                            case 0
                                temp=0;                                    %místo prvků mimo započítám nulu 
                            case 1
                                %místo prvků mimo započítám poslední prvek
                                temp=temp+nastaveni.prumer.maska(1,z_x)*pamet.upraveny_obraz.hisogram(x,y,255);
                            otherwise
                                temp=nastaveni.prumer.okraje;              %místo prvků mimo započítám nastavení prumeru okraje
                        end  
                    else
                        temp=temp+nastaveni.prumer.maska(1,z_x)*pamet.upraveny_obraz.hisogram(x,y,z+z_x-temp_xl);
                    end    
                end
                %vydelení součtu prvků pod maskou součtem masky
                pamet.upraveny_obraz.hisogram_prum(x,y,z)=floor(temp/nastaveni.prumer.delitel);
            end
        end
        %pokud se prumerování poští víckrát tak nahraj do vstupu výstup
        if nastaveni.prumer.opak > 1;
            pamet.upraveny_obraz.hisogram=pamet.upraveny_obraz.hisogram_prum;
        end    
    end
end
set(findobj('Tag','Kontrolka_prum_his'),'BackgroundColor','green');             % obarvi kontrolku ze je krok dokoncen