Example #1
0
 private void button2_Click(object sender, EventArgs e)
 {
     openFileDialog                  = new OpenFileDialog();
     openFileDialog.Filter           = "Изображения(*.png)|*.png";
     openFileDialog.InitialDirectory = Path.GetFullPath(BasePath);
     if (openFileDialog.ShowDialog() == DialogResult.Cancel)
     {
         return;
     }
     BeginPath         = openFileDialog.FileName;
     textBox1.Text     = Path.GetFileName(BeginPath);
     textBox1.Visible  = true;
     label4.Visible    = true;
     BeginImg          = new Img(BeginPath);
     pictureBox1.Image = BeginImg.ColourBitmap;
 }
Example #2
0
        private void IWMS(int r)
        {
            ImageWithMS = new Img(Image.GrayMatrix, Image.Width, Image.Height);
            Color color;

            foreach (InterestingPoint ip in InterestingPointsMS)
            {
                for (int hWinX = -r; hWinX <= r; hWinX++)
                {
                    for (int hWinY = -r; hWinY <= r; hWinY++)
                    {
                        if (ip.X + hWinX < ImageWithMS.Width && ip.X + hWinX >= 0 &&
                            ip.Y + hWinY < ImageWithMS.Height && ip.Y + hWinY >= 0)
                        {
                            color = Color.FromArgb(255, 255, 0, 0);
                            ImageWithMS.Bitmap.SetPixel(ip.X + hWinX, ip.Y + hWinY, color);
                        }
                    }
                }
            }
        }
Example #3
0
        private void button1_Click(object sender, EventArgs e)
        {
            if (BeginPath == "")
            {
                MessageBox.Show("Для начала выберите исходное изображение!", "Информация!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            else if (DirPath == "")
            {
                MessageBox.Show("Для начала выберите каталог для поиска!", "Информация!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            DateTime Time0 = DateTime.Now;

            Images = new List <Img>();
            FindFiles(DirPath);
            Harris = new Harris[Images.Count];

            Status = new string[Images.Count];
            NumNotCompletedProcess = Status.Length;
            for (int i = 0; i < Status.Length; i++)
            {
                Status[i] = "Not completed";
            }

            BeginImg1 = new Img(BeginImg.Bitmap);
            BeginImg2 = new Img(BeginImg.Bitmap);
            BeginImg3 = new Img(BeginImg.Bitmap);

            Thread thread1 = new Thread(ThreadProc);
            Thread thread2 = new Thread(ThreadProc);
            Thread thread3 = new Thread(ThreadProc);

            thread1.Start(BeginImg1);
            thread2.Start(BeginImg2);
            thread3.Start(BeginImg3);
            ThreadProc(BeginImg);

            thread1.Join();
            thread2.Join();
            thread3.Join();

            imageList1.Images.Clear();
            listView1.Items.Clear();

            int ii = 1;

            for (int i = 0; i < Images.Count; i++)
            {
                double R = (double)Harris[i].P / Harris[i].NewPoints * 100.0;
                if (R >= 65)
                {
                    imageList1.Images.Add(Images[i].ColourBitmap);
                    listView1.Items.Add(Images[i].Path + " (P = " + Convert.ToString(Math.Round(R, 2)) + "%)", ii - 1);
                    ii++;
                }
            }

            TimeSpan Time1 = DateTime.Now.Subtract(Time0);

            label1.Text    = "Время выполнения: " + Math.Round(Time1.TotalSeconds, 2).ToString() + " сек.";
            label1.Visible = true;
        }
Example #4
0
        private void Rotate()
        {
            SobelAndTheta();

            double[,] korzinaO = new double[36, 2];
            for (int i = 0; i < 36; i++)
            {
                korzinaO[i, 0] = (Math.PI / 18) * i;
                korzinaO[i, 1] = (Math.PI / 18) * (i + 1);
            }

            double[] D = new double[36];
            for (int y = 0; y < Image.Height; y++)
            {
                for (int x = 0; x < Image.Width; x++)
                {
                    double L  = Sobel[y, x];
                    double Fi = Theta[y, x];
                    if (Fi == 0)
                    {
                        Fi = Math.PI * 2;
                    }
                    int    korzina1 = -10, korzina2 = -10; // смежные корзины
                    double c1 = 0, c2 = 0;                 // коэф-ты для корзин
                    for (int i = 0; i < 36; i++)
                    {
                        if (Fi == korzinaO[i, 1])
                        {
                            korzina1 = i;
                            korzina2 = i + 1;
                            if (korzina2 == 36)
                            {
                                korzina2 = 0;
                            }
                            c1 = 0.5;
                            c2 = 0.5;
                        }
                    }
                    if (korzina1 == -10 || korzina2 == -10)
                    {
                        for (int i = 0; i < 36; i++)
                        {
                            if (Fi > korzinaO[i, 0] && Fi < korzinaO[i, 1])
                            {
                                korzina1 = i;
                                double a1 = korzinaO[i, 1] - Fi;
                                double a0 = Fi - korzinaO[i, 0];
                                if (a0 > a1)
                                {
                                    korzina2 = i + 1;
                                    if (korzina2 == 36)
                                    {
                                        korzina2 = 0;
                                    }

                                    double d = Math.PI / 18;
                                    double b = a1 + (Math.PI / 36);
                                    c1 = b / d;
                                    c2 = 1 - c1;
                                }
                                else if (a1 > a0)
                                {
                                    korzina2 = i - 1;
                                    if (korzina2 == -1)
                                    {
                                        korzina2 = 35;
                                    }

                                    double d = Math.PI / 18;
                                    double b = a0 + (Math.PI / 36);
                                    c1 = b / d;
                                    c2 = 1 - c1;
                                }
                                else
                                {
                                    korzina2 = 0;
                                    c1       = 1;
                                    c2       = 0;
                                }
                            }
                        }
                    }
                    D[korzina1] += L * c1;
                    D[korzina2] += L * c2;
                }
            }

            double GMaxVal = -999999999;
            int    GMax    = 0;

            for (int i = 0; i < 36; i++)
            {
                if (D[i] > GMaxVal)
                {
                    GMaxVal = D[i];
                    GMax    = i;
                }
            }

            double alpha  = (korzinaO[GMax, 1] - korzinaO[GMax, 0]) / 2 + korzinaO[GMax, 0];
            float  ugol   = (float)(alpha * 180 / Math.PI);
            Bitmap bitmap = F.RotateImage(Image.Bitmap, ugol);

            Image = new Img(bitmap);
        }