You are here: Start » FIL.NET » FabImage Library .NET Usage » Blob Analysis Example
Blob Analysis Example
Following example thresholds a loaded image into the region with ThresholdToRegion function and then splits it into blobs with SplitRegionIntoBlobs function. Blobs, that don't met specific area condition, are bounded with red circle. Circles, determined with RegionBoundingCircle function are drawn with DrawCircle function. The region area is calculated using RegionArea function.
To have the example work, a single form with PictureBox control and a mounts.jpg file located in the application directory are needed.
//... using Fil; using Fil.Utils; //... public partial class Form1 : Form { public Form1() { InitializeComponent(); Inspect(); } private void Inspect() { using Disposables disposables = new(); Image mountsImage = new(); Region mountsRegion = new(); List<Region> mounts = []; DrawingStyle style = new() { Thickness = 2.0f, DrawingMode = DrawingMode.HighQuality, Opacity = 1.0f }; mountsImage.DisposeWith(disposables); mountsRegion.DisposeWith(disposables); mounts.DisposeWith(disposables); style.DisposeWith(disposables); Fil.Invoke.LoadImage("mounts.jpg", false, mountsImage); Fil.Invoke.ThresholdToRegion(mountsImage, null, null, 128.0f, 0.0f, mountsRegion); Fil.Invoke.SplitRegionIntoBlobs( inRegion: mountsRegion, inConnectivity: RegionConnectivity.FourDirections, inMinBlobArea: 1, inMaxBlobArea: null, inRemoveBoundaryBlobs: false, outBlobs: mounts); //display invalid mounts foreach (Region mount in mounts) { Fil.Invoke.RegionArea(mount, out int area); if (area < 2000) { Fil.Invoke.RegionBoundingCircle(mount, out Circle2D circle); Fil.Invoke.DrawCircle( ioImage: mountsImage, inCircle: circle, inCircleAlignment: null, inColor: Pixel.Red, inDrawingStyle: style); } } pictureBox1.Image?.Dispose(); pictureBox1.Image = mountsImage.ToBitmap(); } //... }
Previous: Basic Template Matching | Next: FIL.NET Designers example |