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