function [img] = imFilterConv_lowpass_RESENI( image, sigma, show )
% =========================================================================
% [img] = imFilterConv_lowpass( image, ftSize, show )
% 
% Funkce provede dolnopropustni filter s pouzitim konvoluce v obrazove oblasti
% 
% PARAMETRY:
% * image - vstupni sedotonovy obrazek o velikosti [n m], kde n, m je sirka a
%           vyska
% * sigma - rozptyl Gaussova rozlozeni
% 
% VYSTUP:
% * img - filtrovany obrazek o stejne velikosti jako image
% 
% PRIKLAD:
%     im = imread('ct_brain.jpg');
%     im = rgb2gray(im);
%     img = imFilterConv_lowpass( im, 5 );
%     figure;
%     subplot(121); imshow(im, []);
%     subplot(122); imshow(img, []);
% -------------------------------------------------------------------------

if nargin<2,  error('too few parameters');  end;
if nargin<3,  show=0;                       end;


    % preved obrazek do double
    im = double(image);

    % vytvorte pomocnou omatici, která bude obsahovat vzdaalenosti od
    % stredu matice G vytvorenou vyse pouzijte funkci ndgrid
    sz1 = size(image,1);
    sz2 = size(image,2);
    fft_range1 = (-sz1/2):(sz1-sz1/2-1);
    fft_range2 = (-sz2/2):(sz2-sz2/2-1);
    [ids1,ids2] = ndgrid(fft_range1,fft_range2);
    dist = sqrt(ids1.^2 + ids2.^2);

    % spoctete Fourierovu transformaci pro Gaussovo rozdeleni pomoci
    % predpocitanych vzdalenosti a danym paramtrem FT( e^(...) ) 
    filter_conv = exp(-sigma^2*(dist).^2);
%     filter_fft(:,:) = exp(-pi*(dist).^2/(2*sigma^2));

    % spocitat velikost filtru, tak aby obdahoval 99% celeho rozlozeni
    ftSize = 2*3*(1/sigma);

    % posloupnosti okolo stredu v rozsahu velikosti filtru
    conv_range1 = (sz1/2-ftSize):(sz1/2+ftSize);
    conv_range2 = (sz2/2-ftSize):(sz2/2+ftSize);
    
    % vytvorte novou mensi matici s filtrem tak aby obsahoval 99%
    filter_conv_shrink = filter_conv(round(conv_range1),round(conv_range2));

    % provedte konvoluci vstupniho obrazku s novou maskou
    img = conv2(im,filter_conv_shrink,'same');
    img = abs(img);
   
    if show,
        figure;
        subplot(131), imshow(im, []);
        conv_range = -ftSize:ftSize;
        subplot(132), mesh(conv_range, conv_range, abs(filter_conv_shrink));
        subplot(133), imshow(img, []);
    end;
    
