private void InitSpatialFunc( )
{
if ( ( spatialFunc == null ) || ( spatialFunc.Length != kernelSize * kernelSize ) ||
( spatialPropertiesChanged ) )
{
if ( ( spatialFunc == null ) || ( spatialFunc.Length != kernelSize * kernelSize ) )
{
spatialFunc = new double[kernelSize, kernelSize];
}
int kernelRadius = kernelSize / 2;
for ( int i = 0; i < kernelSize; i++ )
{
int ti = i - kernelRadius;
int ti2 = ti * ti;
for ( int k = 0; k < kernelSize; k++ )
{
int tk = k - kernelRadius;
int tk2 = tk * tk;
spatialFunc[i, k] = M.Exp( -0.5 * M.Pow( M.Sqrt( ( ti2 + tk2 ) / spatialFactor ), spatialPower ) );
}
}
spatialPropertiesChanged = false;
}
}