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

iwt2d() private static method

private static iwt2d ( double x, int width, int height ) : ].double[
x double
width int
height int
return ].double[
        private static double[,] iwt2d(double[,] x, int width, int height)
        {
            // Unpack
            var tempbank = new double[width, height];
            for (int j = 0; j < width / 2; j++)
            {
                for (int i = 0; i < height; i++)
                {
                    tempbank[j * 2, i] = zeta * x[i, j];
                    tempbank[j * 2 + 1, i] = (2 / zeta) * x[i, j + width / 2];
                }
            }

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


            for (int j = 0; j < width; j++)
            {
                // Undo 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];

                // Undo 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];

                // Undo 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];

                // Undo 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];
            }

            return x;
        }