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; }
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); } } } } }
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; }
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); }