示例#1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="image"></param>
        /// <returns></returns>
        public override Image Apply(Image image)
        {
            GetParams(fm);

            if (!(image is Image))
            {
                return(image);
            }

            Bitmap dst = AddinUtils.CloneImage(image) as Bitmap;

            SharpenMode sharpenMode       = (SharpenMode)Params["SharpenMode"].Value;
            double      gaussianSigma     = (double)Params["GaussianSigma"].Value;
            int         gaussianSize      = (int)Params["GaussianSize"].Value;
            int         gaussianThreshold = (int)Params["GaussianThreshold"].Value;
            float       gdiRatio          = (float)Params["GdiRatio"].Value;
            float       gdiAmount         = (float)Params["GdiAmount"].Value;

            Accord.Imaging.Filters.IFilter filter = null;
            switch (sharpenMode)
            {
            case SharpenMode.Normal:
                filter = new Accord.Imaging.Filters.Sharpen();
                dst    = (filter as Accord.Imaging.Filters.Sharpen).Apply(dst);
                break;

            case SharpenMode.Gaussian:
                filter = new Accord.Imaging.Filters.GaussianSharpen();
                (filter as Accord.Imaging.Filters.GaussianSharpen).Sigma     = gaussianSigma;
                (filter as Accord.Imaging.Filters.GaussianSharpen).Size      = gaussianSize;
                (filter as Accord.Imaging.Filters.GaussianSharpen).Threshold = gaussianThreshold;
                dst = filter.Apply(dst);
                break;

            case SharpenMode.GDI:
                var effect = new SharpenEffect(gdiRatio, gdiAmount);
                dst.ApplyEffect(effect, new Rectangle(0, 0, dst.Width, dst.Height));
                break;
            }
            AddinUtils.CloneExif(image, dst);
            return(dst);
        }
示例#2
0
        public rettype runalgo(string s)
        {
            string dupImagePath = s;
            Bitmap org0         = (Bitmap)Accord.Imaging.Image.FromFile(dupImagePath);

            // Bitmap org1 = org0.Clone(System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            if (greyscaleenable)
            {
                Accord.Imaging.Filters.GrayscaleBT709 gr = new Accord.Imaging.Filters.GrayscaleBT709();
                org0 = gr.Apply(org0);
            }
            Bitmap org1 = org0.Clone(System.Drawing.Imaging.PixelFormat.Format24bppRgb);

            Accord.Imaging.Filters.Difference filter = new Accord.Imaging.Filters.Difference(org1);
            Bitmap noiserem = org1.Clone(System.Drawing.Imaging.PixelFormat.Format24bppRgb);

            foreach (string filterid in algorithm)
            {
                int filterno = getfilter(filterid);
                if (filterno == 2)
                {
                    // Console.WriteLine("AdaptiveSmoothing");
                    Accord.Imaging.Filters.AdaptiveSmoothing noisefilter = new Accord.Imaging.Filters.AdaptiveSmoothing();
                    noiserem = noisefilter.Apply(noiserem);
                }
                else if (filterno == 4)
                {
                    //  Console.WriteLine("AdditiveNoise");
                    Accord.Imaging.Filters.AdditiveNoise noisefilter = new Accord.Imaging.Filters.AdditiveNoise();
                    noiserem = noisefilter.Apply(noiserem);
                }
                else if (filterno == 3)
                {
                    //  Console.WriteLine("BilateralSmoothing");
                    Accord.Imaging.Filters.BilateralSmoothing noisefilter = new Accord.Imaging.Filters.BilateralSmoothing();
                    noiserem = noisefilter.Apply(noiserem);
                }
                if (filterno == 5)
                {
                    //Bitmap gra = new Bitmap(noiserem.Width, noiserem.Height, PixelFormat.Format8bppIndexed);

                    // Bitmap gra = new bnoiserem.Clone(System.Drawing.Imaging.PixelFormat.form);
                    // Console.WriteLine("AdaptiveSmoothing");
                    Accord.Imaging.Filters.Erosion noisefilter = new Accord.Imaging.Filters.Erosion();
                    noiserem = noisefilter.Apply(noiserem);
                }
                else if (filterno == 6)
                {
                    //  Console.WriteLine("AdditiveNoise");
                    Accord.Imaging.Filters.Pixellate noisefilter = new Accord.Imaging.Filters.Pixellate();
                    noiserem = noisefilter.Apply(noiserem);
                }
                else if (filterno == 7)
                {
                    //  Console.WriteLine("BilateralSmoothing");
                    Accord.Imaging.Filters.GaussianBlur noisefilter = new Accord.Imaging.Filters.GaussianBlur();
                    noiserem = noisefilter.Apply(noiserem);
                }
                else if (filterno == 8)
                {
                    //  Console.WriteLine("BilateralSmoothing");
                    Accord.Imaging.Filters.GaussianSharpen noisefilter = new Accord.Imaging.Filters.GaussianSharpen();
                    noiserem = noisefilter.Apply(noiserem);
                }
                else
                {
                    ///donothing
                }
            }

            // apply the filter

            Bitmap resultImage = filter.Apply(noiserem);


            double mean = 0.0;// histogram.Mean;     // mean red value

            Accord.Statistics.Visualizations.Histogram histogram = null;;
            if (greyscaleenable == false)
            {
                Accord.Imaging.ImageStatistics statistics = new Accord.Imaging.ImageStatistics(resultImage);
                histogram = statistics.Red;
                mean      = histogram.Mean; // mean red value
            }
            else
            {
                Accord.Imaging.Filters.GrayscaleBT709 gr = new Accord.Imaging.Filters.GrayscaleBT709();
                resultImage = gr.Apply(resultImage);
                Accord.Imaging.ImageStatistics statistics = new Accord.Imaging.ImageStatistics(resultImage);

                histogram = statistics.Gray;
                mean      = histogram.Mean; // mean red value
            }
            var lbp = new LocalBinaryPattern(blockSize: 3, cellSize: 6);

            // Use it to extract descriptors from the Lena image:
            var    descriptors = lbp.ProcessImage(resultImage);
            double av          = 0.0;

            foreach (var d in descriptors)
            {
                av = av + d.Average();
            }
            av = av / descriptors.Count;



            rettype ret = new rettype();

            ret.histogram = histogram;
            ret.lbpavg    = av;
            ret.histoavg  = mean;

            return(ret);
        }