1 | function Y = vgg_gauss_mask(a,der,X,flag)
|
---|
2 |
|
---|
3 | %VGG_GAUSS_MASK Univariate Gaussian function or its derivatives.
|
---|
4 | % Y = vgg_gausmask(sigma,der,X) yields der-th derivative of Gaussian.
|
---|
5 | % For der==0, plain Gaussian is yielded.
|
---|
6 | % If X is omitted, X=[-3*sigma:3*sigma] is used, giving reasonably small tail.
|
---|
7 | % If der is omitted too, der=0 is used.
|
---|
8 | %
|
---|
9 | % Try plot(vgg_gauss_mask(10,6,-100:100))
|
---|
10 |
|
---|
11 | % Tom Werner, Oct 2001
|
---|
12 |
|
---|
13 |
|
---|
14 | %%
|
---|
15 | % For computing derivatives, the following recurrent formulas are used:
|
---|
16 | % gausmask(sigma,0,X) = exp(a*X.^2)/(sigma*sqrt(2*pi)),
|
---|
17 | % gausmask(sigma,n,X) = 2*a*( (der-1)*gausmask(sigma,der-2,X) + X.*gausmask(sigma,der-1,X) ),
|
---|
18 | % where
|
---|
19 | % a = -0.5/(a*a).
|
---|
20 | %%
|
---|
21 |
|
---|
22 | if nargin == 4
|
---|
23 | if der > 0
|
---|
24 | Y = 2*a*( (der-1)*vgg_gauss_mask(a,der-2,X,0) + X.*vgg_gauss_mask(a,der-1,X,0) );
|
---|
25 | elseif der == 0
|
---|
26 | Y = ones(size(X));
|
---|
27 | else
|
---|
28 | Y = zeros(size(X));
|
---|
29 | end
|
---|
30 | else
|
---|
31 | if nargin < 3
|
---|
32 | X = ceil(3*a);
|
---|
33 | X = -X:X;
|
---|
34 | end
|
---|
35 | if nargin < 2
|
---|
36 | der = 0;
|
---|
37 | end
|
---|
38 | aa = -0.5/(a*a);
|
---|
39 | Y = exp(aa*X.^2)/(a*sqrt(2*pi)) .* vgg_gauss_mask(aa,der,X,0);
|
---|
40 | end
|
---|
41 |
|
---|
42 | return |
---|