Ejemplo n.º 1
0
        private void геометрическоеСреднееToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int    W = (int)numericUpDown1.Value;
            double MultiplyR, MultiplyG, MultiplyB;

            toolStripProgressBar1.Maximum = X2 - X1;
            for (int i = X1 + W / 2; i < X2 - W / 2; i++)
            {
                toolStripProgressBar1.Value = i - X1;
                for (int j = Y1 + W / 2; j < Y2 - W / 2; j++)
                {
                    MultiplyR = MultiplyG = MultiplyB = 1;
                    for (int i1 = -W / 2; i1 <= W / 2; i1++)
                    {
                        for (int j1 = -W / 2; j1 <= W / 2; j1++)
                        {
                            Color col = Image_mem.GetPixel(i + i1, j + j1);
                            MultiplyR *= col.R;
                            MultiplyG *= col.G;
                            MultiplyB *= col.B;
                        }
                    }
                    MultiplyR = Math.Pow(MultiplyR, 1.0 / (W * W));
                    MultiplyG = Math.Pow(MultiplyG, 1.0 / (W * W));
                    MultiplyB = Math.Pow(MultiplyB, 1.0 / (W * W));
                    Image_new.SetPixel(i, j, Color.FromArgb(255, (int)MultiplyR, (int)MultiplyG, (int)MultiplyB));
                }
            }
            pictureBox1.Image           = new Bitmap(Image_new);
            toolStripProgressBar1.Value = 0;
        }
Ejemplo n.º 2
0
        private void робертсаToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            Brush    MyBrush = new SolidBrush(Color.Black);
            Graphics gr      = Graphics.FromImage(Image_new);

            gr.FillRectangle(MyBrush, 0, 0, Image_new.Width, Image_new.Height);
            int    porog = int.Parse(numericUpDown2.Text);
            double R, G, B;
            double R1, B1, G1;
            double R2, B2, G2;
            double R3, B3, G3;
            double Robert_R, Robert_G, Robert_B;

            toolStripProgressBar1.Maximum = X2 - X1;

            for (int i = X1; i < X2 - 1; i++)
            {
                toolStripProgressBar1.Value = i - X1;
                for (int j = Y1; j < Y2 - 1; j++)
                {
                    Color col = Image_mem.GetPixel(i, j);
                    R        = col.R;
                    G        = col.G;
                    B        = col.B;
                    col      = Image_mem.GetPixel(i + 1, j + 1);
                    R1       = col.R;
                    G1       = col.G;
                    B1       = col.B;
                    col      = Image_mem.GetPixel(i, j + 1);
                    R2       = col.R;
                    G2       = col.G;
                    B2       = col.B;
                    col      = Image_mem.GetPixel(i + 1, j);
                    R3       = col.R;
                    G3       = col.G;
                    B3       = col.B;
                    Robert_R = Math.Sqrt((Math.Pow((R1 - R), 2) + Math.Pow((R2 - R3), 2)));
                    Robert_G = Math.Sqrt((Math.Pow((G1 - G), 2) + Math.Pow((G2 - G3), 2)));
                    Robert_B = Math.Sqrt((Math.Pow((B1 - B), 2) + Math.Pow((B2 - B3), 2)));

                    if (Robert_R > porog || Robert_G > porog || Robert_B > porog)
                    {
                        Image_new.SetPixel(i, j, Color.White);
                    }
                }
            }
            Form2 form_Result = new Form2();

            form_Result.pictureBox1.Image = new Bitmap(Image_new);
            form_Result.Show();
            toolStripProgressBar1.Value = 0;
        }
Ejemplo n.º 3
0
        private void контргармоническоеСрToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int    W = (int)numericUpDown1.Value;
            double q = double.Parse(textBox2.Text);
            double SumR, SumG, SumB;
            double SumRdenum, SumGdenum, SumBdenum;

            toolStripProgressBar1.Maximum = X2 - X1;
            for (int i = X1 + W / 2; i < X2 - W / 2; i++)
            {
                toolStripProgressBar1.Value = i - X1;
                for (int j = Y1 + W / 2; j < Y2 - W / 2; j++)
                {
                    SumR      = SumG = SumB = 0;
                    SumRdenum = SumGdenum = SumBdenum = 0;
                    for (int i1 = -W / 2; i1 <= W / 2; i1++)
                    {
                        for (int j1 = -W / 2; j1 <= W / 2; j1++)
                        {
                            Color col = Image_mem.GetPixel(i + i1, j + j1);
                            int   colorR = col.R; int colorG = col.G; int colorB = col.B;
                            if (colorR == 0)
                            {
                                colorR = 1;
                            }
                            if (colorG == 0)
                            {
                                colorG = 1;
                            }
                            if (colorB == 0)
                            {
                                colorB = 1;
                            }
                            SumR      += Math.Pow(colorR, q + 1);
                            SumG      += Math.Pow(colorG, q + 1);
                            SumB      += Math.Pow(colorB, q + 1);
                            SumRdenum += Math.Pow(colorR, q);
                            SumGdenum += Math.Pow(colorG, q);
                            SumBdenum += Math.Pow(colorB, q);
                        }
                    }
                    SumR = SumR / SumRdenum;
                    SumG = SumG / SumGdenum;
                    SumB = SumB / SumBdenum;
                    Image_new.SetPixel(i, j, Color.FromArgb(255, (int)SumR, (int)SumG, (int)SumB));
                }
            }
            pictureBox1.Image           = new Bitmap(Image_new);
            toolStripProgressBar1.Value = 0;
        }
Ejemplo n.º 4
0
        private void пороговыйToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int W = (int)numericUpDown1.Value, k = 0;
            int porog = (int)numericUpDown2.Value;

            int[,] win = new int[W, W];
            int SumR, SumG, SumB;

            for (int i = 0; i < W; i++)
            {
                for (int j = 0; j < W; j++)
                {
                    win[i, j] = 1;
                }
            }
            win[W / 2, W / 2] = 0;
            k = W * W - 1;
            toolStripProgressBar1.Maximum = X2 - X1;
            for (int i = X1 + W / 2; i < X2 - W / 2; i++)
            {
                toolStripProgressBar1.Value = i - X1;
                for (int j = Y1 + W / 2; j < Y2 - W / 2; j++)
                {
                    SumR = SumG = SumB = 0;
                    for (int i1 = -W / 2; i1 <= W / 2; i1++)
                    {
                        for (int j1 = -W / 2; j1 <= W / 2; j1++)
                        {
                            Color col = Image_mem.GetPixel(i + i1, j + j1);
                            SumR += win[i1 + W / 2, j1 + W / 2] * col.R;
                            SumG += win[i1 + W / 2, j1 + W / 2] * col.G;
                            SumB += win[i1 + W / 2, j1 + W / 2] * col.B;
                        }
                    }
                    Color centercol = Image_mem.GetPixel(i, j);
                    SumR /= k;
                    SumG /= k;
                    SumB /= k;
                    if (Math.Abs(SumR - centercol.R) > porog || Math.Abs(SumG - centercol.G) > porog || Math.Abs(SumB - centercol.B) > porog)
                    {
                        Image_new.SetPixel(i, j, Color.FromArgb(255, SumR, SumG, SumB));
                    }
                }
            }
            pictureBox1.Image           = new Bitmap(Image_new);
            toolStripProgressBar1.Value = 0;
        }
Ejemplo n.º 5
0
        private void альфаУсеченноеСрToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int w = (int)numericUpDown1.Value, k = 0;
            int Alpha = (int)numericUpDown3.Value;

            int[,] win = new int[w, w];
            int[] winR = new int[w * w];
            int[] winG = new int[w * w];
            int[] winB = new int[w * w];

            for (int i = 0; i < w; i++)
            {
                for (int j = 0; j < w; j++)
                {
                    win[i, j] = 1;
                }
            }
            k = w * w;
            toolStripProgressBar1.Maximum = X2 - X1;

            for (int i = X1 + w / 2; i < X2 - w / 2; i++)
            {
                toolStripProgressBar1.Value = i - X1;
                for (int j = Y1 + w / 2; j < Y2 - w / 2; j++)
                {
                    int n = 0;
                    for (int i1 = -w / 2; i1 <= w / 2; i1++)
                    {
                        for (int j1 = -w / 2; j1 <= w / 2; j1++)
                        {
                            Color color = Image_mem.GetPixel(i + i1, j + j1);
                            winR[n] = win[i1 + w / 2, j1 + w / 2] * color.R;
                            winG[n] = win[i1 + w / 2, j1 + w / 2] * color.G;
                            winB[n] = win[i1 + w / 2, j1 + w / 2] * color.B;
                            n++;
                        }
                    }
                    Array.Sort(winR);
                    Array.Sort(winG);
                    Array.Sort(winB);
                    Image_new.SetPixel(i, j, Color.FromArgb(255, (winR[Alpha] + winR[winR.Length - 1 - Alpha]) / 2, (winG[Alpha] + winG[winG.Length - 1 - Alpha]) / 2, (winB[Alpha] + winB[winB.Length - 1 - Alpha]) / 2));
                    pictureBox1.Image = new Bitmap(Image_new);
                }
            }
            toolStripProgressBar1.Value = 0;
        }
Ejemplo n.º 6
0
        private void гармоническоеСреднееToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int    W = (int)numericUpDown1.Value;
            double SumR, SumG, SumB;

            toolStripProgressBar1.Maximum = X2 - X1;
            for (int i = X1 + W / 2; i < X2 - W / 2; i++)
            {
                toolStripProgressBar1.Value = i - X1;
                for (int j = Y1 + W / 2; j < Y2 - W / 2; j++)
                {
                    SumR = SumG = SumB = 0;
                    for (int i1 = -W / 2; i1 <= W / 2; i1++)
                    {
                        for (int j1 = -W / 2; j1 <= W / 2; j1++)
                        {
                            Color col = Image_mem.GetPixel(i + i1, j + j1);
                            int   colorR = col.R; int colorG = col.G; int colorB = col.B;
                            if (colorR == 0)
                            {
                                colorR = 1;
                            }
                            if (colorG == 0)
                            {
                                colorG = 1;
                            }
                            if (colorB == 0)
                            {
                                colorG = 1;
                            }
                            SumR += (1.0 / colorR);
                            SumG += (1.0 / colorG);
                            SumB += (1.0 / colorB);
                        }
                    }
                    SumR = (W * W) / SumR;
                    SumG = (W * W) / SumG;
                    SumB = (W * W) / SumB;
                    Image_new.SetPixel(i, j, Color.FromArgb(255, (int)SumR, (int)SumG, (int)SumB));
                }
            }
            pictureBox1.Image           = new Bitmap(Image_new);
            toolStripProgressBar1.Value = 0;
        }
Ejemplo n.º 7
0
        private void gaussianToolStripMenuItem_Click(object sender, EventArgs e)
        {
            double sigma = double.Parse(textBox1.Text);
            int    w     = (int)sigma * 3 + (int)sigma * 3 + 1;

            double[,] win = new double[w, w];
            double SumR, SumG, SumB;
            double popr_koef = 0;

            for (int i = -w / 2; i <= w / 2; i++)
            {
                for (int j = -w / 2; j <= w / 2; j++)
                {
                    win[i + w / 2, j + w / 2] = Math.Exp(-(double)(i * i + j * j) / (2 * sigma * sigma)) / (Math.Sqrt(Math.PI * 2) * sigma);
                    popr_koef += win[i + w / 2, j + w / 2];
                }
            }
            toolStripProgressBar1.Maximum = X2 - X1;
            for (int i = X1 + w / 2; i < X2 - w / 2; i++)
            {
                toolStripProgressBar1.Value = i - X1;
                for (int j = Y1 + w / 2; j < Y2 - w / 2; j++)
                {
                    SumR = SumG = SumB = 0;
                    for (int i1 = -w / 2; i1 <= w / 2; i1++)
                    {
                        for (int j1 = -w / 2; j1 <= w / 2; j1++)
                        {
                            Color col = Image_mem.GetPixel(i + i1, j + j1);
                            SumR += win[i1 + w / 2, j1 + w / 2] * col.R;
                            SumG += win[i1 + w / 2, j1 + w / 2] * col.G;
                            SumB += win[i1 + w / 2, j1 + w / 2] * col.B;
                        }
                    }
                    SumR /= popr_koef;
                    SumG /= popr_koef;
                    SumB /= popr_koef;
                    Image_new.SetPixel(i, j, Color.FromArgb(255, (int)SumR, (int)SumG, (int)SumB));
                }
            }
            pictureBox1.Image           = new Bitmap(Image_new);
            toolStripProgressBar1.Value = 0;
        }
Ejemplo n.º 8
0
        private void арифмСреднееToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int W = (int)numericUpDown1.Value, k = 0;

            int[,] win = new int[W, W];
            int SumR, SumG, SumB;

            for (int i = 0; i < W; i++)
            {
                for (int j = 0; j < W; j++)
                {
                    win[i, j] = 1;
                }
            }
            k = W * W;
            toolStripProgressBar1.Maximum = X2 - X1;
            for (int i = X1 + W / 2; i < X2 - W / 2; i++)
            {
                toolStripProgressBar1.Value = i - X1;
                for (int j = Y1 + W / 2; j < Y2 - W / 2; j++)
                {
                    SumR = SumG = SumB = 0;
                    for (int i1 = -W / 2; i1 <= W / 2; i1++)
                    {
                        for (int j1 = -W / 2; j1 <= W / 2; j1++)
                        {
                            Color col = Image_mem.GetPixel(i + i1, j + j1);
                            SumR += win[i1 + W / 2, j1 + W / 2] * col.R;
                            SumG += win[i1 + W / 2, j1 + W / 2] * col.G;
                            SumB += win[i1 + W / 2, j1 + W / 2] * col.B;
                        }
                    }
                    SumR /= k;
                    SumG /= k;
                    SumB /= k;
                    Image_new.SetPixel(i, j, Color.FromArgb(255, SumR, SumG, SumB));
                }
            }
            pictureBox1.Image           = new Bitmap(Image_new);
            toolStripProgressBar1.Value = 0;
        }
Ejemplo n.º 9
0
        private void уоллисаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Brush    MyBrush = new SolidBrush(Color.Black);
            Graphics gr      = Graphics.FromImage(Image_new);

            gr.FillRectangle(MyBrush, 0, 0, Image_new.Width, Image_new.Height);

            double porog = double.Parse(numericUpDown2.Text);
            double G_R, G_G, G_B;
            int    A_R1, A_G1, A_B1, A_R3, A_G3, A_B3, A_R5, A_G5, A_B5, A_R7, A_G7, A_B7;
            double A_R0, A_G0, A_B0;

            toolStripProgressBar1.Maximum = X2 - X1;

            for (int i = X1; i < X2; i++)
            {
                toolStripProgressBar1.Value = i - X1;

                for (int j = Y1; j < Y2; j++)
                {
                    Color col = Image_mem.GetPixel(i, j);

                    A_R0 = col.R;
                    if (A_R0 == 0)
                    {
                        A_R0 = 1;
                    }

                    A_G0 = col.G;
                    if (A_G0 == 0)
                    {
                        A_G0 = 1;
                    }


                    A_B0 = col.B;
                    if (A_B0 == 0)
                    {
                        A_B0 = 1;
                    }

                    col  = Image_mem.GetPixel(i, j - 1);
                    A_R1 = col.R;
                    if (A_R1 == 0)
                    {
                        A_R1 = 1;
                    }

                    A_G1 = col.G;
                    if (A_G1 == 0)
                    {
                        A_G1 = 1;
                    }

                    A_B1 = col.B;
                    if (A_B1 == 0)
                    {
                        A_B1 = 1;
                    }

                    col  = Image_mem.GetPixel(i + 1, j);
                    A_R3 = col.R;
                    if (A_R3 == 0)
                    {
                        A_R3 = 1;
                    }

                    A_G3 = col.G;
                    if (A_G3 == 0)
                    {
                        A_G3 = 1;
                    }

                    A_B3 = col.B;
                    if (A_B3 == 0)
                    {
                        A_B3 = 1;
                    }


                    col  = Image_mem.GetPixel(i, j + 1);
                    A_R5 = col.R;

                    if (A_R5 == 0)
                    {
                        A_R5 = 1;
                    }

                    A_G5 = col.G;
                    if (A_G5 == 0)
                    {
                        A_G5 = 1;
                    }

                    A_B5 = col.B;
                    if (A_B5 == 0)
                    {
                        A_B5 = 1;
                    }

                    col  = Image_mem.GetPixel(i - 1, j);
                    A_R7 = col.R;

                    if (A_R7 == 0)
                    {
                        A_R7 = 1;
                    }

                    A_G7 = col.G;
                    if (A_G7 == 0)
                    {
                        A_G7 = 1;
                    }

                    A_B7 = col.B;
                    if (A_B7 == 0)
                    {
                        A_B7 = 1;
                    }

                    G_R = (Math.Log10(Math.Pow(A_R0, 4) / (A_R1 * A_R3 * A_R5 * A_R7)));
                    G_G = (Math.Log10(Math.Pow(A_G0, 4) / (A_G1 * A_G3 * A_G5 * A_G7)));
                    G_B = (Math.Log10(Math.Pow(A_B0, 4) / (A_B1 * A_B3 * A_B5 * A_B7)));

                    if (G_R > porog || G_G > porog || G_B > porog)
                    {
                        Image_new.SetPixel(i, j, Color.White);
                    }
                }
            }

            Form2 form_Results = new Form2();

            form_Results.pictureBox1.Image = new Bitmap(Image_new);
            form_Results.Show();
            toolStripProgressBar1.Value = 0;
        }
Ejemplo n.º 10
0
        private void киршаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Brush    MyBrush = new SolidBrush(Color.White);
            Graphics gr      = Graphics.FromImage(Image_new);

            gr.FillRectangle(MyBrush, 0, 0, Image_new.Width, Image_new.Height);
            double porog = double.Parse(numericUpDown2.Text);

            double G_R, G_G, G_B, max = 0, S_R, S_G, S_B, T_R, T_G, T_B;

            Color[] colorArray = new Color[8];

            colorArray[0] = Color.FromArgb(255, 100, 56, 40);
            colorArray[1] = Color.FromArgb(255, 98, 20, 60);
            colorArray[2] = Color.FromArgb(255, 90, 65, 10);
            colorArray[3] = Color.FromArgb(255, 80, 70, 40);
            colorArray[4] = Color.FromArgb(255, 39, 85, 89);
            colorArray[5] = Color.FromArgb(255, 45, 68, 96);
            colorArray[6] = Color.FromArgb(255, 50, 68, 45);
            colorArray[7] = Color.FromArgb(255, 60, 40, 55);

            int[] A_R   = new int[8];
            int[] A_G   = new int[8];
            int[] A_B   = new int[8];
            int   i_max = -1;

            toolStripProgressBar1.Maximum = X2 - X1;

            for (int i = X1 + 1; i < X2 - 1; i++)
            {
                toolStripProgressBar1.Value = i - X1;
                for (int j = Y1 + 1; j < Y2 - 1; j++)
                {
                    Color col = Image_mem.GetPixel(i + 1, j + 1);
                    A_R[0] = col.R;
                    A_G[0] = col.G;
                    A_B[0] = col.B;

                    col    = Image_mem.GetPixel(i, j - 1);
                    A_R[1] = col.R;
                    A_G[1] = col.G;
                    A_B[1] = col.B;

                    col    = Image_mem.GetPixel(i + 1, j - 1);
                    A_R[2] = col.R;
                    A_G[2] = col.G;
                    A_B[2] = col.B;

                    col    = Image_mem.GetPixel(i + 1, j);
                    A_R[3] = col.R;
                    A_G[3] = col.G;
                    A_B[3] = col.B;

                    col    = Image_mem.GetPixel(i + 1, j + 1);
                    A_R[4] = col.R;
                    A_G[4] = col.G;
                    A_B[4] = col.B;

                    col    = Image_mem.GetPixel(i, j + 1);
                    A_R[5] = col.R;
                    A_G[5] = col.G;
                    A_B[5] = col.B;

                    col    = Image_mem.GetPixel(i - 1, j + 1);
                    A_R[6] = col.R;
                    A_G[6] = col.G;
                    A_B[6] = col.B;

                    col    = Image_mem.GetPixel(i - 1, j);
                    A_R[7] = col.R;
                    A_G[7] = col.G;
                    A_B[7] = col.B;

                    max   = 0;
                    i_max = 0;
                    for (int i1 = 0; i1 < 8; i1++)
                    {
                        S_R = A_R[i1] + A_R[(i1 + 1) % 8] + A_R[(i1 + 2) % 8];
                        T_R = A_R[(i1 + 3) % 8] + A_R[(i1 + 4) % 8] + A_R[(i1 + 5) % 8] + A_R[(i1 + 6) % 8] + A_R[(i1 + 7) % 8];
                        G_R = Math.Abs(5 * S_R - 3 * T_R);
                        if (max < G_R)
                        {
                            max = G_R;
                        }
                        i_max = i1;


                        S_G = A_G[i1] + A_G[(i1 + 1) % 8] + A_G[(i1 + 2) % 8];
                        T_G = A_G[(i1 + 3) % 8] + A_G[(i1 + 4) % 8] + A_G[(i1 + 5) % 8] + A_G[(i1 + 6) % 8] + A_G[(i1 + 7) % 8];
                        G_G = Math.Abs(5 * S_G - 3 * T_G);
                        if (max < G_G)
                        {
                            max = G_G;
                        }
                        i_max = i1;

                        S_B = A_B[i1] + A_B[(i1 + 1) % 8] + A_B[(i1 + 2) % 8];
                        T_B = A_B[(i1 + 3) % 8] + A_B[(i1 + 4) % 8] + A_B[(i1 + 5) % 8] + A_B[(i1 + 6) % 8] + A_B[(i1 + 7) % 8];
                        G_B = Math.Abs(5 * S_B - 3 * T_B);
                        if (max < G_B)
                        {
                            max = G_B;
                        }
                        i_max = i1;
                    }
                    if (max > porog)
                    {
                        Image_new.SetPixel(i, j, colorArray[i_max]);
                    }
                }
            }
            Form2 form_Results = new Form2();

            form_Results.pictureBox1.Image = new Bitmap(Image_new);
            form_Results.Show();
            toolStripProgressBar1.Value = 0;
        }
Ejemplo n.º 11
0
        private void conditionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            double N = 0;

            for (int i = 0; i < 256; i++)
            {
                N += masR_obj[i];
            }
            for (int i = 0; i < 256; i++)
            {
                masR_obj[i] = masR_obj[i] / N;
                masG_obj[i] = masG_obj[i] / N;
                masB_obj[i] = masB_obj[i] / N;
            }
            int   R, G, B;
            Color color;

            toolStripProgressBar1.Maximum = X2 - X1;

            for (int i = X1; i < X2; i++)
            {
                for (int j = Y1; j < Y2; j++)
                {
                    color = Image_mem.GetPixel(i, j);
                    R     = color.R; G = color.G; B = color.B;
                    masR[R]++;
                    masG[G]++;
                    masB[B]++;
                }
            }
            int maxR = 255; int maxG = 255; int maxB = 255; int minR = 0; int minG = 0; int minB = 0;

            for (int i = 0; i < 256; i++)
            {
                if (minR < masR[i])
                {
                    minR = i; break;
                }
            }

            for (int i = 0; i < 256; i++)
            {
                if (minG < masG[i])
                {
                    minG = i; break;
                }
            }

            for (int i = 0; i < 256; i++)
            {
                if (minB < masB[i])
                {
                    minB = i; break;
                }
            }

            for (int i = 255; i >= 0; i--)
            {
                if (maxR < masR[i])
                {
                    maxR = i; break;
                }
            }

            for (int i = 255; i >= 0; i--)
            {
                if (maxG < masG[i])
                {
                    maxG = i; break;
                }
            }

            for (int i = 255; i >= 0; i--)
            {
                if (maxB < masB[i])
                {
                    maxB = i; break;
                }
            }

            for (int i = X1; i < X2; i++)
            {
                for (int j = Y1; j < Y2; j++)
                {
                    color = Image_mem.GetPixel(i, j);
                    R     = color.R; G = color.G; B = color.B;
                    if (!((R >= minR) && (R <= maxR)) && !((G >= minG) && (G <= maxG)) && !((B >= minB) && B <= (maxB)))
                    {
                        Image_new.SetPixel(i, j, Color.Red);
                    }
                }
            }
            Form2 result = new Form2();

            result.pictureBox1.Image = new Bitmap(Image_new);
            result.Show();
        }
Ejemplo n.º 12
0
        private void собелаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Brush    MyBrush = new SolidBrush(Color.Black);
            Graphics gr      = Graphics.FromImage(Image_new);

            gr.FillRectangle(MyBrush, 0, 0, Image_new.Width, Image_new.Height);
            int    porog = int.Parse(numericUpDown2.Text);
            double G_R, G_G, G_B, X_R, X_G, X_B, Y_R, Y_G, Y_B;

            int[] A_R = new int[8], A_G = new int[8], A_B = new int[8];
            toolStripProgressBar1.Maximum = X2 - X1;
            for (int i = X1 + 1; i < X2 - 1; i++)
            {
                toolStripProgressBar1.Value = i - X1;
                for (int j = Y1 + 1; j < Y2 - 1; j++)
                {
                    Color col = Image_mem.GetPixel(i + 1, j + 1);
                    A_R[0] = col.R;
                    A_G[0] = col.G;
                    A_B[0] = col.B;

                    col    = Image_mem.GetPixel(i, j - 1);
                    A_R[1] = col.R;
                    A_G[1] = col.G;
                    A_B[1] = col.B;

                    col    = Image_mem.GetPixel(i + 1, j - 1);
                    A_R[2] = col.R;
                    A_G[2] = col.G;
                    A_B[2] = col.B;

                    col    = Image_mem.GetPixel(i + 1, j);
                    A_R[3] = col.R;
                    A_G[3] = col.G;
                    A_B[3] = col.B;

                    col    = Image_mem.GetPixel(i + 1, j + 1);
                    A_R[4] = col.R;
                    A_G[4] = col.G;
                    A_B[4] = col.B;

                    col    = Image_mem.GetPixel(i, j + 1);
                    A_R[5] = col.R;
                    A_G[5] = col.G;
                    A_B[5] = col.B;

                    col    = Image_mem.GetPixel(i - 1, j + 1);
                    A_R[6] = col.R;
                    A_G[6] = col.G;
                    A_B[6] = col.B;

                    col    = Image_mem.GetPixel(i - 1, j);
                    A_R[7] = col.R;
                    A_G[7] = col.G;
                    A_B[7] = col.B;

                    X_R = (A_R[2] + 2 * A_R[3] + A_R[4]) - (A_R[0] + 2 * A_R[7] + A_R[6]);
                    Y_R = (A_R[0] + 2 * A_R[1] + A_R[2]) - (A_R[6] + 2 * A_R[5] + A_R[4]);
                    G_R = Math.Sqrt(X_R * X_R + Y_R * Y_R);

                    X_G = (A_G[2] + 2 * A_G[3] + A_G[4]) - (A_G[0] + 2 * A_G[7] + A_G[6]);
                    Y_G = (A_G[0] + 2 * A_G[1] + A_G[2]) - (A_G[6] + 2 * A_G[5] + A_G[4]);
                    G_G = Math.Sqrt(X_G * X_G + Y_G * Y_G);

                    X_B = (A_B[2] + 2 * A_B[3] + A_B[4]) - (A_B[0] + 2 * A_B[7] + A_B[6]);
                    Y_B = (A_B[0] + 2 * A_B[1] + A_B[2]) - (A_B[6] + 2 * A_B[5] + A_B[4]);
                    G_B = Math.Sqrt(X_B * X_B + Y_B * Y_B);

                    if (G_R > porog || G_G > porog || G_B > porog)
                    {
                        Image_new.SetPixel(i, j, Color.White);
                    }
                }
            }
            Form2 form_Result = new Form2();

            form_Result.pictureBox1.Image = new Bitmap(Image_new);
            form_Result.Show();
            toolStripProgressBar1.Value = 0;
        }