0001 function filter = getFilter(sigma, kernel)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023 kSize = floor(4 * sigma);
0024 G = conv2(fspecial('gaussian', [2 * kSize + 1, 1], sigma), ...
0025 fspecial('gaussian', [1, 2 * kSize + 1], sigma));
0026 [y, x] = ndgrid(-kSize : kSize);
0027 dy = [-0.5, 0, 0.5]';
0028 dx = [-0.5, 0, 0.5];
0029 dyy = [0.25, -0.5, 0.25]';
0030 dxx = [0.25, -0.5, 0.25];
0031 dxy = conv2(dx, dy);
0032 switch kernel
0033 case 'G', filter = G;
0034 case 'Gy', filter = imfilter(G, dy, 'same', 'corr');
0035 case 'Gx', filter = imfilter(G, dx, 'same', 'corr');
0036 case 'Gyy', filter = imfilter(G, dyy, 'same', 'corr');
0037 case 'Gxx', filter = imfilter(G, dxx, 'same', 'corr');
0038 case 'Gxy', filter = imfilter(G, dxy, 'same', 'corr');
0039 case 'yG', filter = y .* G;
0040 case 'xG', filter = x .* G;
0041 case 'y2G', filter = y.^2 .* G;
0042 case 'x2G', filter = x.^2 .* G;
0043 case 'xyG', filter = x .* y .* G;
0044 otherwise, error 'gaussFFT: unknown kernel name';
0045 end