// On Filters->Texture private void fastGuidedFilterFiltersItem_Click(object sender, EventArgs e) { ClearCurrentImage(); // Spreading pixels values from 0 to 65535 instead of byte values for less loosing data when applying the filter. // Of course, we could use the source image in 8-bit (easiest and fastest way but slightly losing data). using (var bmp = Accord.Imaging.Image.Convert8bppTo16bpp(sourceImage)) { var fastGuidedFilter = new FastGuidedFilter { KernelSize = 8, Epsilon = 0.02f, SubSamplingRatio = 0.25f, OverlayImage = (Bitmap)bmp.Clone() }; // apply filter fastGuidedFilter.ApplyInPlace(bmp); fastGuidedFilter.OverlayImage.Dispose(); if (pictureBox.Image != null) { pictureBox.Image.Dispose(); } // display filtered image pictureBox.Image = Accord.Imaging.Image.Convert16bppTo8bpp(bmp); } }
private void button2_Click(object sender, EventArgs e) { _elapsedTime.Restart(); using (var bmp = AForge.Imaging.Image.Convert8bppTo16bpp((Bitmap)pictureBox1.Image)) { var fastGuidedFilter = new FastGuidedFilter { KernelSize = 8, Epsilon = 0.02f, SubSamplingRatio = 0.25f, OverlayImage = (Bitmap)bmp.Clone() }; fastGuidedFilter.ApplyInPlace(bmp); fastGuidedFilter.OverlayImage.Dispose(); pictureBox2.Image?.Dispose(); pictureBox2.Image = AForge.Imaging.Image.Convert16bppTo8bpp(bmp); } _elapsedTime.Stop(); Text = $"{_elapsedTime.Elapsed.Milliseconds} (ms)"; }
// Use method from forked Accord v.3.0.2 repository that uses AForge.Net // https://github.com/hzawary/CSharpDemoFastGuidedFilter public static Bitmap FastGuidedFilter(Bitmap bmp) { var fastGuidedFilter = new FastGuidedFilter { KernelSize = 8, Epsilon = 0.02f, SubSamplingRatio = 0.25f, OverlayImage = (Bitmap)bmp.Clone() }; fastGuidedFilter.ApplyInPlace(bmp); fastGuidedFilter.OverlayImage.Dispose(); return(AForge.Imaging.Image.Convert16bppTo8bpp(bmp)); }