Accord.Math.Wavelets.CDF97.fwt2d C# (CSharp) Method

fwt2d() private static method

private static fwt2d ( double x, int width, int height ) : ].double[
x double
width int
height int
return ].double[
        private static double[,] fwt2d(double[,] x, int width, int height)
        {
            for (int j = 0; j < width; j++)
            {
                // Predict 1
                for (int i = 1; i < height - 1; i += 2)
                    x[i, j] += alpha * (x[i - 1, j] + x[i + 1, j]);
                x[height - 1, j] += 2 * alpha * x[height - 2, j];

                // Update 1
                for (int i = 2; i < height; i += 2)
                    x[i, j] += beta * (x[i - 1, j] + x[i + 1, j]);
                x[0, j] += 2 * beta * x[1, j];

                // Predict 2
                for (int i = 1; i < height - 1; i += 2)
                    x[i, j] += gamma * (x[i - 1, j] + x[i + 1, j]);
                x[height - 1, j] += 2 * gamma * x[height - 2, j];

                // Update 2
                for (int i = 2; i < height; i += 2)
                    x[i, j] += delta * (x[i - 1, j] + x[i + 1, j]);
                x[0, j] += 2 * delta * x[1, j];
            }

            // Pack
            var tempbank = new double[width, height];
            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    if ((i % 2) == 0)
                        tempbank[j, i / 2] = (1 / zeta) * x[i, j];
                    else
                        tempbank[j, i / 2 + height / 2] = (zeta / 2) * x[i, j];
                }
            }

            for (int i = 0; i < width; i++)
                for (int j = 0; j < width; j++)
                    x[i, j] = tempbank[i, j];

            return x;
        }