function hms()
% Homomorfny multiplikatiny system
% Help will be soon ... maybe

clc;
[fn,pn] = uigetfile({'*.bmp','BMP subory'}, 'Vyberte obrazok'); % vypytanie obrazku
image = fullfile(pn,fn);

% --------------------
% pytanie otazok, pre neskorsie pouzitie
clc;
rozmer = input('Zadajte rozmer filtrov (1-16, predvolena: 1): ');

if (isnan(rozmer) == 0)
    if (rozmer >= 1) && (rozmer <= 16)
        filter = rozmer;
    end
else
    filter = 1;
end

clc;
konstdp = input('Zadajte hodnotu konstanty pre DP filter (0-2, predvolena: 1.05): ');
if (isnan(konstdp) == 0)
    if (konstdp >= 0) && (konstdp <= 2)
        kdp = konstdp;
    end
else
    kdp = 1.05;
end

clc;
konsthp = input('Zadajte hodnotu konstanty pre HP filter (0-5, predvolena: 2.5): ');
if (isnan(konsthp) == 0)
    if (konsthp >= 0) && (konsthp <= 5)
        khp = konsthp;
    end
else
    khp = 2.5;
end
% ------------------

[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

% nastavenie rozlozenie obrazkov, podla jeho rozmerov
if stlpce/riadky >= 1.6
    subplot(2,1,1);
else 
    subplot(1,2,1);
end

imshow(B, MAP); % zobrazenie povodneho obrazku, ktory bol nacitany

% osetrenie nul v obrazkoch, kvoli logaritmu
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); % logaritmizacia

% Fourierova transformacia
F = fft2(A); % 2d fourierova transformacia
SF = fftshift(F); % presunutie frekvencii

% priprava na filtraciu
DPn = filter/16; % nastavenie rozsahu dolnopriepustneho filtra
HPn = filter/16; % nastavenie rozsahu hornopriepustenho filtra

DPvelkost = floor(riadky*DPn/2); % vyratanie velkosti okna, ktore bude urobene pri matici filtra
HPvelkost = floor(riadky*HPn/2); % vyratanie velkosti okna, ktore bude urobene pri matici filtra

% 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).*kdp; % filtracia spektra a nasledne prenasobenie konstantou

% 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).*khp; % filtracia spektra a nasledne prenasobenie konstantou

% zaverecne
SFsum = SFdp + SFhp; % scitanie spektier po filtracii
Fsum = ifftshift(SFsum); % spatne navratenie frekvencii

Asum = ifft2(Fsum); % spatna fourierova transformacia

AF = abs(Asum); % finalne A v absolutnej hodnota
AFin = exp(AF); % odexpovanie logaritmu

if stlpce/riadky >= 1.6
    subplot(2,1,2);
else 
    subplot(1,2,2);
end

imshow(AFin, MAP); % vykreslenie vysledneho obrazku

end
