Beispiel #1
0
        // 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;
        }
Beispiel #2
0
        // 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;
        }
Beispiel #3
0
        // 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;
        }
Beispiel #4
0
        // 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;
        }