[37] | 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 |
---|