// Private members #region Private Members // Create Gaussian filter private void CreateFilter( ) { // create Gaussian function BestCS.Math.Gaussian gaus = new BestCS.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 BestCS.Math.Gaussian gaus = new BestCS.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; }
// Private members #region Private Members // Create Gaussian filter private void CreateFilter( ) { // create Gaussian function BestCS.Math.Gaussian gaus = new BestCS.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 BestCS.Math.Gaussian gaus = new BestCS.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; }