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