Strabo.Core.ColorSegmentation.ColorSegmentationWorker.Apply C# (CSharp) Method

Apply() public method

public Apply ( string input_dir, string output_dir, string fn ) : string[]
input_dir string
output_dir string
fn string
return string[]
        public string[] Apply(string input_dir, string output_dir, string fn)
        {
            List<String> outImagePaths = new List<string>();
            try
            {
                string fn_only = Path.GetFileNameWithoutExtension(fn);

                //MeanShift
                MeanShiftMultiThreads mt = new MeanShiftMultiThreads();
                outImagePaths.Add(mt.ApplyYIQMT(input_dir + fn, 8, 3, 15, output_dir + fn_only + "_ms.png"));
                mt = null;
                GC.Collect();

                // Median Cut
                MedianCutMultiThreads mcq = new MedianCutMultiThreads();
                List<int> qnum_list = new List<int>();
                qnum_list.Add(1024);
                mcq.GenerateColorPalette(output_dir + fn_only + "_ms.png", qnum_list);
                string[] mcqImagePaths = mcq.quantizeImageMT(8, output_dir, output_dir, fn_only + "_mc");
                mcq = null;
                GC.Collect();

                /* Parin
                List<int> qnum_list = new List<int>();
                qnum_list.Add(1024);
                for (int i = 0; i < qnum_list.Count; i++)
                {
                    Console.WriteLine(dir + fn_only + "_ms.png");

                    Image<Bgr, Byte> inpImage = new Image<Bgr, Byte>(dir + fn_only + "_ms.png");

                    Image<Rgb, Byte> dst = new Image<Rgb, Byte>(inpImage.Size);
                    CvInvoke.cvSmooth(inpImage.Ptr, dst.Ptr, Emgu.CV.CvEnum.SMOOTH_TYPE.CV_MEDIAN, 31, 31, 1.5, 1);
                    dst.ToBitmap().Save(dir + fn_only + "_mc" + qnum_list[i] + ".png", ImageFormat.Png);
                }
                */
                for (int i = 0; i < mcqImagePaths.Length; i++)
                    outImagePaths.Add(mcqImagePaths[i]);

                // KMeans
                for (int i = 0; i < qnum_list.Count; i++)
                {
                    int km = 128;//qnum_list[i];
                    for (int k = 0; k < 10; k++)
                    {
                        MyKMeans kmeans = new MyKMeans();
                        km /= 2;
                        if (km < 4) break;
                        Console.WriteLine(km);
                        string kmeansInputFN= output_dir + fn_only + "_mc" + qnum_list[i] + ".png";

                        string kmeansOutputFN = output_dir + fn_only + "_mc" + qnum_list[i] + "_k" + km + ".png";
                             kmeans.Apply(km,kmeansInputFN, kmeansOutputFN);
                            outImagePaths.Add(kmeansOutputFN);
                        kmeans = null;
                        GC.Collect();
                    }
                }
            }
            catch (Exception e)
            {
                //Console.WriteLine(e.ToString());
            }

            return outImagePaths.ToArray();
        }

Usage Example

        public void apply(String directory)
        {
            if (directory[directory.Length - 1] != '\\')
            {
                directory += @"\";
            }

            string[] files = System.IO.Directory.GetFiles(directory, "*.png", System.IO.SearchOption.TopDirectoryOnly);

            if (files.Length == 0)
            {
                System.Console.WriteLine("No *.png file found in the specified directory! ");
            }

            foreach (string currentFile in files)
            {
                String dir = directory;
                String fn = System.IO.Path.GetFileName(currentFile);
                System.Console.WriteLine(Environment.NewLine + String.Format("Processing {0} ...", fn));

                //create new directory for processing and copy image to this new dir
                string oldDir = dir;
                dir += System.IO.Path.GetFileNameWithoutExtension(fn) + @"\";

                System.IO.Directory.CreateDirectory(dir);
                System.IO.File.Copy(oldDir + fn, dir + fn, true);

                string outPutDir = dir + @"output\";
                System.IO.Directory.CreateDirectory(outPutDir);

                //Find best K
                ColorSegmentationWorker csw = new ColorSegmentationWorker();
                int bestK = csw.Apply(dir, fn);

                /*
                Extract layers for the best K
                csw = new ColorSegmentationWorker();
                csw.Apply(dir + fn, bestK, bestK, true);
                */

                /*
                //Compare extracted layrers and save report
                CompareImageLayers cp = new CompareImageLayers();
                String fileFormat = System.IO.Path.GetFileNameWithoutExtension(fn) + "_ms_mc1024_k" + bestK + "_l{0}" + System.IO.Path.GetExtension(fn);
                List<KeyValuePair<int, int>> pairList = cp.analysisSimilarityOfLayers(bestK, dir, fileFormat);

                //Merge similar layers and copy distinct layers
                cp.generateOutput(pairList, bestK, dir, outPutDir, fileFormat);
                 */
            }
        }
All Usage Examples Of Strabo.Core.ColorSegmentation.ColorSegmentationWorker::Apply
ColorSegmentationWorker