function hms2()
% Homomorfný multiplikatívny systém
% nápoveda

[fn,pn] = uigetfile({'*.bmp','Súbory obrázkov'}, 'Vyberte obrázok'); % vypytanie obrazku
image = fullfile(pn,fn);

[B, MAP] = imread(image); % nacitanie obrazku
A = double(B);
riadky = size(A,1); % zistenie poctu riadkov v matici na neskorsie pouzitie
stlpce = size(A,2); % zistenie poctu stlpcov v matici na neskorsie pouzitie

imshow(B, MAP); % zobrazenie povodneho obrazku, ktory bol nacitany

% -------------------
% osetrenie jednotiek v obrazkoch
for i = 1:riadky
    for j = 1:stlpce
        if A(i,j) == 0
            C(i,j) = 1;
        else 
            C(i,j) = A(i,j);
        end
    end
end
% -------------------

A = log(C);

% --------------------
% Fourierova transformacia
F = fft2(A); % 2d fourierova transformacia NEVIEM PRECO TO PYTA SINGLE ALEBO DOUBLE(asi to je jedno)
SF = fftshift(F); % presunutie frekvencii
% --------------------

% --------------------
% priprava na filtraciu
DPn = 30/100; % nastavenie rozsahu dolnopriepustneho filtra NASTAVIT
HPn = 20/100; % nastavenie rozsahu hornopriepustenho filtra NASTAVIT

DPs = 1.05;
HPs = 0.99;

DPvelkost = floor(riadky*DPn/2); % WTF??
HPvelkost = floor(riadky*HPn/2); % WTF??
% --------------------

% --------------------
% DP filtracia
DP = zeros(riadky, stlpce); % vytvorenie nulovej matice o velkosti obrazku
DP(riadky/2-DPvelkost:riadky/2+DPvelkost, stlpce/2-DPvelkost:stlpce/2+DPvelkost) = 1; % vytvorenie jednotkoveho stvorca v strede pola

SFdp = (SF.*DP).*DPs;

% --------------------
% HP filtracia
HP = ones(riadky, stlpce); % vytvorenie jednotkovej matice o velkosti obrazku
HP(riadky/2-HPvelkost:riadky/2+HPvelkost, stlpce/2-HPvelkost:stlpce/2+HPvelkost) = 0; % vytvorenie nuloveho stvorca v strede pola

SFhp = (SF.*HP).*HPs;

SFsum = SFdp + SFhp; % prenasobenie fourierovej transformacie HP maticou
Fsum = ifftshift(SFsum); % spatne orezanie fourierovej transformacie

Asum = ifft2(Fsum); % spatna fourierova transformacia

AF = abs(Asum); % finalne A, absolutna hodnota
AFin = exp(AF); % odexpovanie logaritmu
figure;
imshow(AFin, MAP); % vykreslenie vysledneho obrazku

end
