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)); }
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"); }
/// <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); } } }
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)); }
private void btn_filter2_Click(object sender, EventArgs e) { AForge.Imaging.Filters.SimplePosterization filter = new SimplePosterization(); pictureBox1.Image = filter.Apply((Bitmap)pictureBox1.Image); }
private Bitmap preProcessImage(Bitmap image, Grayscale gScale, SobelEdgeDetector sEgDetector, SimplePosterization posterization) { Bitmap temp = image; temp = gScale.Apply(temp); posterization.ApplyInPlace(temp); return(temp); }
public ImagePreprocessor() { gScale = new Grayscale(0.2125, 0.7154, 0.0721); sobelDetector = new SobelEdgeDetector(); posterization = new SimplePosterization(); }
public Bitmap PosterizationFilter(Bitmap img) { SimplePosterization filter = new SimplePosterization(); return(filter.Apply(img)); }
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 }