// Private members #region Private Members // Create Gaussian filter private void CreateFilter( ) { // create Gaussian function AForgeCore.Math.Gaussian gaus = new AForgeCore.Math.Gaussian(sigma); // create kernel double[,] kernel = gaus.Kernel2D(size); double min = kernel[0, 0]; // integer kernel int[,] intKernel = new int[size, size]; int divisor = 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; }
// Private members #region Private Members // Create Gaussian filter private void CreateFilter( ) { // create Gaussian function AForgeCore.Math.Gaussian gaus = new AForgeCore.Math.Gaussian(sigma); // create kernel double[,] kernel = gaus.Kernel2D(size); double min = kernel[0, 0]; // integer kernel int[,] intKernel = new int[size, size]; int sum = 0; int divisor = 0; // calculate integer kernel 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 sum sum += intKernel[i, j]; } } // recalc kernel int c = size >> 1; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if ((i == c) && (j == c)) { // calculate central value intKernel[i, j] = 2 * sum - intKernel[i, j]; } else { // invert value intKernel[i, j] = -intKernel[i, j]; } // collect divisor divisor += intKernel[i, j]; } } // update filter this.Kernel = intKernel; this.Divisor = divisor; }