function [ novy_obrazek ] = konvoluce_reseni( obrazek, maska )
%KONVOLUCE Provadi konvoluci obrazku se zadanou maskou
%   Funkce konvoluce ma dva vstupni argumenty a jeden vystupni argument.
%   Argument obrazek je zadany obrazek, na kterem chceme konvoluci provest,
%   a maska je maska pres kterou konvoluci provadime. Vystupem je potom
%   konvoluci upraveny obrazek. Konvoluce se neprovadi na okrajich obrazku
%   tam, kde by maska presahovala pres okraj.

[vm,sm] = size(maska);
[vo,so] = size(obrazek);

novy_obrazek = zeros(vo,so);

% je nutny prevod do double nebo jineho typu int, aby se dalo nasobit s
% maskou, ktera muze obsahovat i zaporne hodnoty
obrazek = double(obrazek);


% vytvorim ramecek na okraji, ve kterem konvoluci nepouziju, nebot by maska
% presahla ven z obrazku
v = floor(vm/2);
s = floor(sm/2);


for i = v + 1 : vo - v
    for j = s + 1 : so - s
        novy_obrazek(i,j) = sum(sum(obrazek(i-v:i+v, j-s:j+s) .* maska));              
    end
end

% konvoluci s maskou, ktera ma nulovy soucet, je treba tzv. normalizovat
if sum(sum(maska)) == 0
   novy_obrazek = novy_obrazek + 128;
end      

% obrazek je treba prevezt z double zpet na uint8
novy_obrazek = uint8(novy_obrazek);

end

% konec


