Exemple #1
0
        static float[, ][,] matrix_der2(GrayscaleFloatImage image, float sigma)
        {
            float[, ][,] out_matr = new float[image.Width, image.Height][, ];
            float[,] Gxx          = g_kernel(sigma, "xx");
            float[,] Gxy          = g_kernel(sigma, "xy");
            float[,] Gyy          = g_kernel(sigma, "yy");

            int rad = (int)Math.Round(3 * sigma);
            GrayscaleFloatImage temp_image = img_expansion(image.ToColorFloatImage(), "odd", rad).ToGrayscaleFloatImage();

            for (int y = rad; y < image.Height + rad; ++y)
            {
                for (int x = rad; x < image.Width + rad; ++x)
                {
                    float[,] q = new float[2, 2];
                    for (int m = -rad; m <= rad; ++m)
                    {
                        for (int n = -rad; n <= rad; ++n)
                        {
                            q[0, 0] += temp_image[x + n, y + m] * Gxx[rad + n, rad + m];
                            q[0, 1] += temp_image[x + n, y + m] * Gxy[rad + n, rad + m];
                            q[1, 1] += temp_image[x + n, y + m] * Gyy[rad + n, rad + m];
                        }
                    }
                    q[1, 0] = q[0, 1];
                    out_matr[x - rad, y - rad] = q;
                }
            }
            return(out_matr);
        }
Exemple #2
0
        static GrayscaleFloatImage temp_func(GrayscaleFloatImage image, float sigma)
        {
            GrayscaleFloatImage out_matr = new GrayscaleFloatImage(image.Width, image.Height);

            float[,] Gxx = g_kernel(sigma, "yy");
            //float[,] Gxy = g_kernel(sigma, "xy");
            //float[,] Gyy = g_kernel(sigma, "yy");

            int rad = (int)Math.Round(3 * sigma);
            GrayscaleFloatImage temp_image = img_expansion(image.ToColorFloatImage(), "odd", rad).ToGrayscaleFloatImage();
            float common_sum = 0;

            for (int y = rad; y < image.Height + rad; ++y)
            {
                for (int x = rad; x < image.Width + rad; ++x)
                {
                    float[,] q = new float[2, 2];
                    for (int m = -rad; m <= rad; ++m)
                    {
                        for (int n = -rad; n <= rad; ++n)
                        {
                            out_matr[x - rad, y - rad] += temp_image[x + n, y + m] * Gxx[rad + n, rad + m];
                            //               q[0, 1] += temp_image[x + n, y + m] * Gxy[rad + n, rad + m];
                            //             q[1, 1] += temp_image[x + n, y + m] * Gyy[rad + n, rad + m];
                        }
                    }
                    common_sum += out_matr[x - rad, y - rad];
                }
            }
            Console.WriteLine(common_sum);
            float max_one = 0;
            float min_one = 0;

            for (int y = 0; y < image.Height; ++y)
            {
                for (int x = 0; x < image.Width; ++x)
                {
                    //out_matr[x, y] += 128;
                    if (out_matr[x, y] > max_one)
                    {
                        max_one = out_matr[x, y];
                    }
                    if (out_matr[x, y] < min_one)
                    {
                        min_one = out_matr[x, y];
                    }
                }
            }

            min_one = -min_one;
            //if (min_one > max_one)
            //  max_one = min_one;

            for (int y = 0; y < image.Height; ++y)
            {
                for (int x = 0; x < image.Width; ++x)
                {
                    out_matr[x, y] *= 255 / max_one / 2;
                    out_matr[x, y] += 128;
                }
            }

            return(out_matr);
        }