Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calculate the Gaussian filter's sigma using the kernel's size

I find on the OpenCV documentation for cvSmooth that sigma can be calculated from the kernel size as follows: sigma = 0.3(n/2 - 1) + 0.8

I would like to know the theoretical background of this equation.

Thank you.

like image 778
AimingHigh Avatar asked Dec 27 '12 19:12

AimingHigh


1 Answers

Using such a value for sigma, the ratio between the value at the centre of the kernel and on the edge of the kernel, found for y=0 and x=n/2-1, is:

g_edge / g_center = exp(-(x²+y²)/(2σ²))
                  = exp(-(n/2-1)²/(2*(0.3(n/2-1)+0.8)²))

The limit of this value as n increases is:

exp(-1/(2*0.3²)) = 0.00386592

Note that 1/256 is 0.00390625. Images are often encoded in 256-value ranges. The choice of 0.3 ensures that the kernel considers all pixels that may significantly influence the resulting value.

I am afraid I do not have an explanation for the 0.8 part, but I imagine it is here to ensure reasonable values when n is small.

like image 76
sam hocevar Avatar answered Sep 28 '22 05:09

sam hocevar