示例#1
0
        public mEffectPosterization(byte interval, int pixelMode)
        {
            BitmapType = mFilter.BitmapTypes.None;

            Interval  = interval;
            PixelMode = pixelMode;

            Effect = new SimplePosterization();

            switch (PixelMode)
            {
            default:
                Effect.FillingType = SimplePosterization.PosterizationFillingType.Average;
                break;

            case 1:
                Effect.FillingType = SimplePosterization.PosterizationFillingType.Min;
                break;

            case 2:
                Effect.FillingType = SimplePosterization.PosterizationFillingType.Max;
                break;
            }
            Effect.PosterizationInterval = Interval;

            filter = Effect;
        }
        public static Bitmap PosterizeFilter(Bitmap bmp, byte posterizationInterval = 150)
        {
            SimplePosterization filter = new SimplePosterization();

            filter.PosterizationInterval = posterizationInterval;
            return(filter.Apply(bmp));
        }
示例#3
0
        public Bitmap ToSimplePosterization(Bitmap Im)
        {
            AForge.Imaging.Filters.SimplePosterization Img = new SimplePosterization();
            Bitmap bmImage = AForge.Imaging.Image.Clone(new Bitmap(Im), PixelFormat.Format24bppRgb);

            return(Img.Apply(bmImage));
        }
        private Bitmap SimplePosterization(Bitmap image)
        {
            SimplePosterization filter = new SimplePosterization();

            // process image
            filter.ApplyInPlace(image);
            return(image);
        }
        public static void Start()
        {
            Bitmap bmp = Image.FromFile(PATH + @"\test.png") as Bitmap;
            SimplePosterization filter = new SimplePosterization();

            filter.PosterizationInterval = 150;
            Bitmap newBmp = filter.Apply(bmp);

            newBmp.Save(PATH + @"\outtest.png");
        }
        public static void Load()
        {
            Bitmap bmp = Image.FromFile(PATH + @"\health2.jpg") as Bitmap;
            SimplePosterization filter = new SimplePosterization();

            filter.PosterizationInterval = 150;
            Bitmap newBmp = filter.Apply(bmp);

            newBmp.Save(PATH + @"\out2.png");
        }
示例#7
0
        /// <summary>
        /// Returns true if the average energy of the image is below the given threshold
        /// </summary>
        /// <param name="image"></param>
        /// <param name="threshold"></param>
        /// <returns></returns>
        private bool IsBlank(byte[] image, byte threshold)
        {
            var ms = new MemoryStream(image);

            using (var b = new Bitmap(ms))
            {
                using (var gray = Grayscale.CommonAlgorithms.BT709.Apply(b))
                {
                    new SobelEdgeDetector().ApplyInPlace(gray);
                    var p = new SimplePosterization(SimplePosterization.PosterizationFillingType.Average);
                    p.PosterizationInterval = 128;
                    p.ApplyInPlace(gray);
                    return(gray.GetPixel(0, 0).R < threshold);
                }
            }
        }
示例#8
0
        public static byte[] ApplyFilter(byte[] imageBytes, ImageProcessingFilters filter, ImageFormat format = null)
        {
            IFilter baseFilter = null;

            switch (filter)
            {
            case ImageProcessingFilters.Default:
                return(imageBytes);

            case ImageProcessingFilters.GrayscaleBT709:
                baseFilter = new GrayscaleBT709();
                break;

            case ImageProcessingFilters.GrayscaleRMY:
                baseFilter = new GrayscaleRMY();
                break;

            case ImageProcessingFilters.GrayscaleY:
                baseFilter = new GrayscaleY();
                break;

            case ImageProcessingFilters.BayerFilter:
                baseFilter = new FiltersSequence();
                ((FiltersSequence)baseFilter).Add(new ExtractChannel(RGB.B));
                ((FiltersSequence)baseFilter).Add(new BayerFilter());
                break;

            /*
             * case ImageProcessingFilters.ImageWarp:
             * baseFilter = new ImageWarp(
             * break;
             * */
            case ImageProcessingFilters.Channel_Red:
                baseFilter = new ExtractChannel(RGB.R);
                break;

            case ImageProcessingFilters.Channel_Green:
                baseFilter = new ExtractChannel(RGB.G);
                break;

            case ImageProcessingFilters.Channel_Blue:
                baseFilter = new ExtractChannel(RGB.B);
                break;

            case ImageProcessingFilters.WaterWave:
                baseFilter = new WaterWave();
                ((WaterWave)baseFilter).HorizontalWavesCount     = 10;
                ((WaterWave)baseFilter).HorizontalWavesAmplitude = 5;
                ((WaterWave)baseFilter).VerticalWavesCount       = 3;
                ((WaterWave)baseFilter).VerticalWavesAmplitude   = 15;
                break;

            case ImageProcessingFilters.Sepia:
                baseFilter = new Sepia();
                break;

            case ImageProcessingFilters.BrightnessCorrection:
                baseFilter = new BrightnessCorrection(-50);
                break;

            case ImageProcessingFilters.ContrastCorrection:
                baseFilter = new ContrastCorrection(15);
                break;

            case ImageProcessingFilters.SaturationCorrection1:
                baseFilter = new SaturationCorrection(-0.5f);
                break;

            case ImageProcessingFilters.SaturationCorrection2:
                baseFilter = new SaturationCorrection(-.25f);
                break;

            case ImageProcessingFilters.SaturationCorrection3:
                baseFilter = new SaturationCorrection(+0.5f);
                break;

            case ImageProcessingFilters.Invert:
                baseFilter = new Invert();
                break;

            case ImageProcessingFilters.Blur:
                baseFilter = new Blur();
                break;

            case ImageProcessingFilters.RotateChannels:
                baseFilter = new RotateChannels();
                break;

            case ImageProcessingFilters.RotateChannels2:
                baseFilter = new FiltersSequence();
                ((FiltersSequence)baseFilter).Add(new RotateChannels());
                ((FiltersSequence)baseFilter).Add(new RotateChannels());
                break;

            case ImageProcessingFilters.AdditiveNoise:
                IRandomNumberGenerator generator = new UniformGenerator(new Range(-50, 50));
                baseFilter = new AdditiveNoise(generator);
                break;

            case ImageProcessingFilters.GammaCorrection:
                baseFilter = new GammaCorrection(0.5);
                break;

            case ImageProcessingFilters.HistogramEqualization:
                baseFilter = new HistogramEqualization();
                break;

            case ImageProcessingFilters.OrderedDithering:
                byte[,] matrix = new byte[4, 4]
                {
                    { 95, 233, 127, 255 },
                    { 159, 31, 191, 63 },
                    { 111, 239, 79, 207 },
                    { 175, 47, 143, 15 }
                };
                baseFilter = new FiltersSequence();
                ((FiltersSequence)baseFilter).Add(new GrayscaleBT709());
                ((FiltersSequence)baseFilter).Add(new OrderedDithering(matrix));
                break;

            case ImageProcessingFilters.Pixallete:
                baseFilter = new Pixellate();
                break;

            case ImageProcessingFilters.SimplePosterization:
                baseFilter = new SimplePosterization();
                break;

            case ImageProcessingFilters.Texturer_Textile:
                baseFilter = new Texturer(new AForge.Imaging.Textures.TextileTexture(), 0.3, 0.7);
                break;

            case ImageProcessingFilters.Texturer_Cloud:
                baseFilter = new Texturer(new AForge.Imaging.Textures.CloudsTexture(), 0.3, 0.7);
                break;

            case ImageProcessingFilters.Texturer_Marble:
                baseFilter = new Texturer(new AForge.Imaging.Textures.MarbleTexture(), 0.3, 0.7);
                break;

            case ImageProcessingFilters.Texturer_Wood:
                baseFilter = new Texturer(new AForge.Imaging.Textures.WoodTexture(), 0.3, 0.7);
                break;

            case ImageProcessingFilters.Texturer_Labyrinth:
                baseFilter = new Texturer(new AForge.Imaging.Textures.LabyrinthTexture(), 0.3, 0.7);
                break;

            case ImageProcessingFilters.SobelEdgeDetector:
                baseFilter = new FiltersSequence();
                ((FiltersSequence)baseFilter).Add(new ExtractChannel(RGB.R));
                ((FiltersSequence)baseFilter).Add(new SobelEdgeDetector());
                break;

            case ImageProcessingFilters.SobelEdgeDetectorInvert:
                baseFilter = new FiltersSequence();
                ((FiltersSequence)baseFilter).Add(new ExtractChannel(RGB.R));
                ((FiltersSequence)baseFilter).Add(new SobelEdgeDetector());
                ((FiltersSequence)baseFilter).Add(new Invert());
                break;

            case ImageProcessingFilters.SobelEdgeDetectorSepia:
                baseFilter = new FiltersSequence();
                ((FiltersSequence)baseFilter).Add(new ExtractChannel(RGB.R));
                ((FiltersSequence)baseFilter).Add(new SobelEdgeDetector());
                ((FiltersSequence)baseFilter).Add(new GrayscaleToRGB());
                ((FiltersSequence)baseFilter).Add(new Sepia());
                break;

            case ImageProcessingFilters.SobelEdgeDetectorSepiaCanvas:
                baseFilter = new FiltersSequence();
                ((FiltersSequence)baseFilter).Add(new ExtractChannel(RGB.R));
                ((FiltersSequence)baseFilter).Add(new SobelEdgeDetector());
                ((FiltersSequence)baseFilter).Add(new GrayscaleToRGB());
                ((FiltersSequence)baseFilter).Add(new Sepia());
                ((FiltersSequence)baseFilter).Add(new SimplePosterization());
                ((FiltersSequence)baseFilter).Add(new Texturer(new AForge.Imaging.Textures.TextileTexture(), 0.3, 0.7));
                break;

            case ImageProcessingFilters.Drawing:
                baseFilter = new FiltersSequence();
                ((FiltersSequence)baseFilter).Add(new GrayscaleBT709());
                ((FiltersSequence)baseFilter).Add(new SobelEdgeDetector());
                ((FiltersSequence)baseFilter).Add(new Invert());
                ((FiltersSequence)baseFilter).Add(new SimplePosterization());
                break;

            case ImageProcessingFilters.DrawingSepia:
                baseFilter = new FiltersSequence();
                ((FiltersSequence)baseFilter).Add(new GrayscaleBT709());
                ((FiltersSequence)baseFilter).Add(new SobelEdgeDetector());
                ((FiltersSequence)baseFilter).Add(new Invert());
                ((FiltersSequence)baseFilter).Add(new SimplePosterization());
                ((FiltersSequence)baseFilter).Add(new GrayscaleToRGB());
                ((FiltersSequence)baseFilter).Add(new Sepia());
                break;

            case ImageProcessingFilters.OilCanvas:
                baseFilter = new FiltersSequence();
                ((FiltersSequence)baseFilter).Add(new SimplePosterization());
                ((FiltersSequence)baseFilter).Add(new Texturer(new AForge.Imaging.Textures.TextileTexture(), 0.3, 0.7));
                break;

            case ImageProcessingFilters.OilCanvasGray:
                baseFilter = new FiltersSequence();
                ((FiltersSequence)baseFilter).Add(new SimplePosterization());
                ((FiltersSequence)baseFilter).Add(new Texturer(new AForge.Imaging.Textures.TextileTexture(), 0.3, 0.7));
                ((FiltersSequence)baseFilter).Add(new GrayscaleBT709());
                break;

            case ImageProcessingFilters.OilCanvasSepia:
                baseFilter = new FiltersSequence();
                ((FiltersSequence)baseFilter).Add(new SimplePosterization());
                ((FiltersSequence)baseFilter).Add(new Texturer(new AForge.Imaging.Textures.TextileTexture(), 0.3, 0.7));
                ((FiltersSequence)baseFilter).Add(new Sepia());
                break;
            }

            if (baseFilter == null)
            {
                return(null);
            }

            return(ApplyFilter(imageBytes, baseFilter, format));
        }
示例#9
0
 private void btn_filter2_Click(object sender, EventArgs e)
 {
     AForge.Imaging.Filters.SimplePosterization filter = new SimplePosterization();
     pictureBox1.Image = filter.Apply((Bitmap)pictureBox1.Image);
 }
示例#10
0
        private Bitmap preProcessImage(Bitmap image, Grayscale gScale, SobelEdgeDetector sEgDetector, SimplePosterization posterization)
        {
            Bitmap temp = image;

            temp = gScale.Apply(temp);
            posterization.ApplyInPlace(temp);


            return(temp);
        }
示例#11
0
 public ImagePreprocessor()
 {
     gScale        = new Grayscale(0.2125, 0.7154, 0.0721);
     sobelDetector = new SobelEdgeDetector();
     posterization = new SimplePosterization();
 }
示例#12
0
        public Bitmap PosterizationFilter(Bitmap img)
        {
            SimplePosterization filter = new SimplePosterization();

            return(filter.Apply(img));
        }
示例#13
0
        protected void ApplyFiltersTo(ref Bitmap b, ImageState s)
        {
            var imageRectF   = s.layout.GetRingAsRectF("image");
            var areaOfEffect = imageRectF == null ? new Rectangle(0, 0, b.Width, b.Height) : PolygonMath.ToRectangleShrinkRound(imageRectF.Value);

            //TODO: if the image is unrotated, use a rectangle to limit the effect to the desired area

            string str = null;
            int    i   = 0;

            //If radiusunits is specified, use that code path.
            double units = s.settings.Get <double>("a.radiusunits", 1000);

            //TODO: move blur/sharpen aliases to a compatibility shim, deprecate them

            i = GetRadius(s, "blur", "a.blur", units);
            if (i > 0)
            {
                new GaussianBlur(1.4, i).ApplyInPlace(b, areaOfEffect);
            }

            i = GetRadius(s, "sharpen", "a.sharpen", units);
            if (i > 0)
            {
                new GaussianSharpen(1.4, Math.Min(11, i)).ApplyInPlace(b, areaOfEffect);
            }

            i = GetRadius(s, "a.oilpainting", null, units);
            if (i > 0)
            {
                new OilPainting(i).ApplyInPlace(b, areaOfEffect);
            }

            if ("true".Equals(s.settings["a.removenoise"], StringComparison.OrdinalIgnoreCase))
            {
                new ConservativeSmoothing(3).ApplyInPlace(b, areaOfEffect);
            }
            else
            {
                i = GetRadius(s, "a.removenoise", null, units);
                if (i > 0)
                {
                    new ConservativeSmoothing(i).ApplyInPlace(b, areaOfEffect);
                }
            }



            //Sobel only supports 8bpp grayscale images.
            //true/false
            if ("true".Equals(s.settings["a.sobel"], StringComparison.OrdinalIgnoreCase))
            {
                Bitmap old = b;
                try{
                    b = Grayscale.CommonAlgorithms.Y.Apply(b);
                }finally{
                    if (old != s.sourceBitmap)
                    {
                        old.Dispose();
                    }
                }

                new SobelEdgeDetector().ApplyInPlace(b, areaOfEffect);

                str = s.settings["a.threshold"]; //radius
                if (!string.IsNullOrEmpty(str) && int.TryParse(str, NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out i) && i > 0)
                {
                    new Threshold(i).ApplyInPlace(b, areaOfEffect);
                }
            }
            //Canny Edge Detector only supports 8bpp grayscale images.
            //true/false
            if ("true".Equals(s.settings["a.canny"], StringComparison.OrdinalIgnoreCase))
            {
                Bitmap old = b;
                try {
                    b = Grayscale.CommonAlgorithms.Y.Apply(b);
                } finally {
                    if (old != s.sourceBitmap)
                    {
                        old.Dispose();
                    }
                }
                new CannyEdgeDetector().ApplyInPlace(b, areaOfEffect);
            }

            //true/false - duplicate with SimpleFilters?
            if ("true".Equals(s.settings["a.sepia"], StringComparison.OrdinalIgnoreCase))
            {
                new Sepia().ApplyInPlace(b, areaOfEffect);
            }

            //true/false
            if ("true".Equals(s.settings["a.equalize"], StringComparison.OrdinalIgnoreCase))
            {
                new HistogramEqualization().ApplyInPlace(b, areaOfEffect);
            }

            //White balance adjustment
            var whiteAlg = s.settings.Get <HistogramThresholdAlgorithm>("a.balancewhite");
            var whiteVal = s.settings.Get <double>("a.balancethreshold");


            if (whiteAlg != null || whiteVal != null)
            {
                var bal = new AutoWhiteBalance(whiteAlg ?? HistogramThresholdAlgorithm.Area);
                if (whiteVal != null)
                {
                    bal.LowThreshold = bal.HighThreshold = whiteVal.Value / 100;
                }
                bal.ApplyInPlace(b, areaOfEffect);
            }

            str = s.settings["a.posterize"]; //number of colors to merge
            if (!string.IsNullOrEmpty(str) && int.TryParse(str, NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out i) && i > 0)
            {
                SimplePosterization sp = new SimplePosterization();
                if (i < 1)
                {
                    i = 1;
                }
                if (i > 255)
                {
                    i = 255;
                }
                sp.PosterizationInterval = (byte)i;
                sp.ApplyInPlace(b, areaOfEffect);
            }

            //Pixelate doesn't support 32-bit images, only 24-bit
            //str = s.settings["a.pixelate"]; //number of colors to merge
            //if (!string.IsNullOrEmpty(str) && int.TryParse(str, out i)){
            //     if (i < 2) i = 2;
            //    if (i > 32) i = 32;
            //    new Pixelate(i).ApplyInPlace(s.destBitmap);
            //}


            float contrast   = s.settings.Get <float>("a.contrast", 0);
            float brightness = s.settings.Get <float>("a.brightness", 0);
            float saturation = s.settings.Get <float>("a.saturation", 0);

            if (contrast != 0 || brightness != 0 || saturation != 0)
            {
                HSLLinear adjust = new HSLLinear();
                AdjustContrastBrightnessSaturation(adjust, contrast, brightness, saturation, "true".Equals(s.settings["a.truncate"]));
                adjust.ApplyInPlace(b, areaOfEffect);
            }
            //TODO - add grayscale?

            //For adding fax-like thresholding, use BradleyLocalThresholding

            //For trimming solid-color whitespace, use Shrink
        }