function [J,Hinv] = inverzni_filtrace(I,PSF,hm1,hodnotahm1,hm2,hodnotahm2,dm1,hodnotadm1,dm2,hodnotadm2)
%[J,Hinv] =inverzni_filtrace(I,PSF,hm1,hodnotahm1,hm2,hodnotahm2,dm1,hodnotadm1,dm2,hodnotadm2)
%
%funkce služící pro provedení inverzní filtrace. První 2 vstupní parametry
%jsou povinné a definují prostou inverzní filtraci.
%parametr 3 až 10 slouží pro definici omezujícího filtru aplikovaného na
%G(u,v) a vzníka tak modifikovaná inverzní filtrace.
%--------------------------------------------------------------------------
H = psf2otf(PSF, size(I));

Hinv=(1./H);
if isempty(dm1) || isempty(hodnotadm1)

else
    if isempty(dm2) || isempty(hodnotadm2)
        Hinv(Hinv<dm1)=hodnotadm1;
        
    else
        if dm2<dm1
        Hinv(Hinv<dm2)=hodnotadm2;
        Hinv(Hinv<dm1)=hodnotadm1;
        else
        Hinv(Hinv<dm1)=hodnotadm1;
        Hinv(Hinv<dm2)=hodnotadm2;
        end
    end
end

if isempty(hm1) || isempty(hodnotahm1)

else
    if isempty(hm2) || isempty(hodnotahm2)
        Hinv(Hinv>hm1)=hodnotahm1;
    else
        if hm2>hm1
        Hinv(Hinv>hm2)=hodnotahm2;
        Hinv(Hinv>hm1)=hodnotahm1;
        else
        Hinv(Hinv>hm1)=hodnotahm1;
        Hinv(Hinv>hm2)=hodnotahm2;
        end
    end
end
G=Hinv;
J = ifftn(G .*fftn(I));
