private void CreateFilter()
{
// create kernel
double[,] kernel = Normal.Kernel2D(sigma * sigma, size);
// integer kernel
int[,] intKernel = new int[size, size];
int divisor = 0;
double min = kernel[0, 0];
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
double v = kernel[i, j] / min;
if (v > ushort.MaxValue)
v = ushort.MaxValue;
intKernel[i, j] = (int)v;
// collect divisor
divisor += intKernel[i, j];
}
}
// update filter
this.Kernel = intKernel;
this.Divisor = divisor;
}