% filtrace spektra 2
% hrany a neostra maska

function sfa6_2

close all

obr_rgb=imread("posta.jpg");
dim=size(obr_rgb(:,:,1))
fxrange=linspace(-1,1,dim(2));
fyrange=linspace(-1,1,dim(1));
[fx,fy]=meshgrid(fxrange,fyrange); % libovolne jednotky

% puvodni obrazek
figure(1)
imshow(obr_rgb);

% prechod z RGB do HSV reprezentace
obr_hsv=rgb2hsv(obr_rgb); 

% cernobily obraz
figure(2)
cb=obr_hsv(:,:,3);
imshow(cb) 

% spektrum
g=ft2(cb,1);
figure(3)
imshow(abs(g),[0,1000])



% rozmazu a odectu

g=g.*exp(-50*(fx.*fx+fy.*fy));
cb2=abs(ift2(g,1));
cb2=cb2/max(max(cb2));
cb3=2*(cb-cb2); % hrany
figure(4)
imshow(cb3,[0,1]);
imwrite(cb3,"vysl_hrany.jpg","Quality",85);


cb4=2*(cb-0.5*cb2); % unsharp mask stredni
%cb4=5*(cb-0.8*cb2); % unsharp mask silna


figure(5)
imshow(cb4,[0,1]);
min(min(cb4))
max(max(cb4))

% nahradim V slozku
cb4(find(cb4<0))=0; cb4(find(cb4>1))=1;  % uprava do intervalu [0,1]
obr_hsv(:,:,3)=cb4;
% prevedu do RGB
obr_rgb=hsv2rgb(obr_hsv);
figure(6)
imshow(obr_rgb);
% exportuji jako JPEG
imwrite(obr_rgb,"vysledek.jpg","Quality",85);

end




function G=ft2(g,del)
 G=fftshift(fft2(fftshift(g)))*del*del;
end


function g=ift2(G,delf)
 g=ifftshift(ifft2(ifftshift(G)))*(delf*size(G,1))^2;
end



