Exemplo n.º 1
0
        /// <summary>
        /// Loads all images from a chosen folder and computes all features for it.
        /// </summary>
        /// <param name="folder_path"></param>
        /// <returns></returns>
        public static double[][] FeaturesFromFolder(string folder_path, DetectorParameters detector_params)
        {
            DirectoryInfo d = new DirectoryInfo(folder_path);

            string[] extensions = new[] { ".jpg", ".bmp", ".png" };

            FileInfo[] files =
                d.GetFiles()
                .Where(f => extensions.Contains(f.Extension.ToLower()))
                .ToArray();

            List <double[]> features_all = new List <double[]>();

            bool debug_enabled = true;

            if (debug_enabled)
            {
                Directory.CreateDirectory("aug_imgs");
            }

            int img_it = 0;

            foreach (var file in files)
            {
                Bitmap bmp = new Bitmap(file.FullName);
                img_it++;
                for (int i = 0; i < NumberOfAugmentedImages; ++i)
                {
                    //Make 32 bit ARGB bitmap
                    Bitmap clone = new Bitmap(bmp.Width, bmp.Height,
                                              System.Drawing.Imaging.PixelFormat.Format32bppArgb);

                    Random rng = new Random();

                    int x_off_random = rng.Next((-clone.Width / 20), (clone.Width / 20) + 1);
                    int y_off_random = rng.Next((-clone.Height / 20), (clone.Height / 20) + 1);

                    int x_size_random = rng.Next((-clone.Width / 10), (clone.Width / 10) + 1);
                    int y_size_random = rng.Next((-clone.Height / 10), (clone.Height / 10) + 1);

                    int do_blur = rng.Next(0, 2);

                    using (Graphics gr = Graphics.FromImage(clone))
                    {
                        gr.DrawImage(bmp, new Rectangle(0, 0, clone.Width, clone.Height));
                        gr.DrawImage(bmp, new Rectangle(x_off_random, y_off_random, clone.Width + x_size_random, clone.Height + y_size_random));
                    }


                    /*if(resize_factor == 2)
                     * {
                     *      ResizeBilinear filter = new ResizeBilinear(clone.Width / 2, clone.Height / 2);
                     *      var resized = filter.Apply(clone);
                     *
                     *      filter = new ResizeBilinear(clone.Width, clone.Height);
                     *      clone = filter.Apply(resized);
                     * }
                     *
                     * if (resize_factor == 3)
                     * {
                     *      ResizeNearestNeighbor filter = new ResizeNearestNeighbor(clone.Width / 2, clone.Height / 2);
                     *      var resized = filter.Apply(clone);
                     *
                     *      filter = new ResizeNearestNeighbor(clone.Width, clone.Height);
                     *      clone = filter.Apply(resized);
                     * }
                     *
                     * if (resize_factor == 4)
                     * {
                     *      ResizeBilinear filter = new ResizeBilinear(clone.Width / 4, clone.Height / 4);
                     *      var resized = filter.Apply(clone);
                     *
                     *      filter = new ResizeBilinear(clone.Width, clone.Height);
                     *      clone = filter.Apply(resized);
                     * }
                     */

                    int resamplingFactor = Math.Min((1 + i / 2), 10);

                    ResizeBilinear filter  = new ResizeBilinear(clone.Width / resamplingFactor, clone.Height / resamplingFactor);
                    var            resized = filter.Apply(clone);

                    filter = new ResizeBilinear(clone.Width, clone.Height);
                    clone  = filter.Apply(resized);



                    List <double> features = FeatureDetector.featuresFromBitmapDouble(clone, detector_params, 5);

                    features_all.Add(features.ToArray());
                    if (img_it < 2 && debug_enabled)
                    {
                        clone.Save("aug_imgs/aug_" + img_it + "_" + i + ".jpg", ImageFormat.Jpeg);
                    }
                    clone.Dispose();
                }

                bmp.Dispose();
            }

            return(features_all.ToArray());
        }