예제 #1
0
        /// <summary>
        /// Wygenerowanie cech haara dla przykładów negatywnych
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolStripMenuItem6_Click(object sender, EventArgs e)
        {
            this.toolStripStatusLabel1.Text = "Analiza przykładów negatywnych:";
            Cursor.Current = Cursors.WaitCursor;
            this.Update();
            // Process the list of files found in the directory.
            string[] fileEntries = Directory.GetFiles("negative\\");
            List<double[]> ArgH = new List<double[]>();
            s = Convert.ToInt32(this.toolStripTextBox5.Text);
            p = Convert.ToInt32(this.toolStripTextBox6.Text);
            scaling = Convert.ToDouble(this.toolStripTextBox2.Text);
            ratio = Convert.ToDouble(this.toolStripTextBox4.Text);
            Haar twarz = new Haar();
            twarz.InicializeGenerator(this.s, this.p);

            if (paralel)
            {
                Task.Factory.StartNew(() =>
                {
                    Parallel.For(0, fileEntries.Length, i =>
                    {
                        try
                        {
                            //this.toolStripProgressBar1.Value = i * 100 / images;
                            Bitmap pic = ConvertToBitmap(fileEntries[i]);
                            for (int k = 0; k < 3; k++)
                                for (int l = 0; l < 3; l++)
                                {
                                    twarz.InicializeImage(this.getSingleFace(pic, new double[] { pic.Width / 3 * k, pic.Height / 3 * l, pic.Width / 3, pic.Height / 3 }));
                                    ArgH.Add(twarz.allHarrFeatures());
                                }
                        }
                        catch {
                            //MessageBox.Show("Jakiś problem ze zrównolegleniem.");
                        }
                    });
                }).Wait();
            }
            else
            {
                int currentline = 0;
                foreach (string fileName in fileEntries)
                {
                    currentline++;
                    this.toolStripProgressBar1.Value = currentline * 100 / fileEntries.Length;
                    Bitmap pic = ConvertToBitmap(fileName);
                    for (int k = 0; k < 3; k++)
                        for (int l = 0; l < 3; l++)
                        {
                            twarz.InicializeImage(this.getSingleFace(pic, new double[] { pic.Width / 3 * k, pic.Height / 3 * l, pic.Width / 3, pic.Height / 3 }));
                            ArgH.Add(twarz.allHarrFeatures());
                        }
                }
            }
        
        //Zapis wyestrahowanych cech do pliku
            try
            {
                StreamWriter writer = new StreamWriter("negative.txt");
                foreach (double[] cecha in ArgH)
                {
                    writer.WriteLine(String.Join(" ", cecha));
                }
                writer.Close();
            }
            catch { MessageBox.Show("Nie udało się zapisać cech Haara do pliku :("); }


            Cursor.Current = Cursors.Default;
            MessageBox.Show("Przeanalizowano "+ ArgH.Count +" twarzy z "+ fileEntries .Length+ " obrazów.");
            this.toolStripStatusLabel1.Text = "Gotowe.";

        }
예제 #2
0
 /// <summary>
 /// Wyliczenie cech Haara dla pliku
 /// </summary>
 /// <param name="Picture">Plik obrazu</param>
 /// <param name="parameters">parametry z ObjectMakera</param>
 /// <returns></returns>
 private List<double[]> HaarFeatures(string Picture, string[] parameters)
 {
     List<double[]> ArgH = new List<double[]>();
     Haar twarz = new Haar();
     twarz.InicializeGenerator(this.s, this.p);
     for (int i = 0 ; i < Convert.ToInt32(parameters[1]); i++)
     {
         try {
             twarz.InicializeImage(this.getSingleFace(new Bitmap(Picture), new double[] {
                 Convert.ToDouble(parameters[4*i+2]),  Convert.ToDouble(parameters[4 * i + 3]),  Convert.ToDouble(parameters[4 * i + 4]), Convert.ToDouble(parameters[4 * i + 5])
             }));
         }
         catch { MessageBox.Show("Niepoprawne parametry dla pliku: " + Picture); }
     ArgH.Add(twarz.allHarrFeatures());
     }
     return ArgH;
 }