public void TestConvolutionGaussian() { var source = new double[][] { new double[] { 0, 0, 0, 0, 0 }, new double[] { 0, 0, 0, 0, 0 }, new double[] { 0, 0, 1, 0, 0 }, new double[] { 0, 0, 0, 0, 0 }, new double[] { 0, 0, 0, 0, 0 } }; var gaussian = new Gaussian(); var kernel = gaussian.Kernel2D(3); const bool useDynamicDivisorForEdges = false; var stopwatch = Stopwatch.StartNew(); var convolution = Analysis.Math.Convolution(source, source.Length, source[0].Length, kernel, useDynamicDivisorForEdges); stopwatch.Stop(); var sourceValues = string.Join("\n", Array.ConvertAll(source, row => string.Join(string.Empty, Array.ConvertAll(row, value => string.Format(CultureInfo.InvariantCulture, " {0:0}", value))))); Console.WriteLine("\nSource = \n[\n" + sourceValues + "\n]"); Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "\nKernel (Gaussian) = \n" + "[\n" + " {0:0.000} {1:0.000} {2:0.000}\n" + " {3:0.000} {4:0.000} {5:0.000}\n" + " {6:0.000} {7:0.000} {8:0.000}\n" + "]", kernel[0, 0], kernel[0, 1], kernel[0, 2], kernel[1, 0], kernel[1, 1], kernel[1, 2], kernel[2, 0], kernel[2, 1], kernel[2, 2])); var resultValues = string.Join("\n", Array.ConvertAll(convolution, row => string.Join(string.Empty, Array.ConvertAll(row, value => string.Format(CultureInfo.InvariantCulture, " {0:0.00}", value))))); Console.WriteLine("\nConvolution (duration: " + stopwatch.ElapsedMilliseconds + " ms) = \n[\n" + resultValues + "\n]"); }