Extracts the connected groups of pixels from a bitmap using various options.
public class ExtractObjectsCommand : RasterCommand Public Class ExtractObjectsCommandInherits RasterCommand
public:ref class ExtractObjectsCommand : RasterCommand
using Leadtools;using Leadtools.Codecs;using Leadtools.ImageProcessing;using Leadtools.ImageProcessing.Core;public void ExtractObjectsCommandExample(){using (RasterCodecs codecs = new RasterCodecs())// Load the original imageusing (RasterImage inputImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "demoicr2.tif"))){// Setup the extraction optionsExtractObjectsCommand command = new ExtractObjectsCommand(){DetectChildren = true,EightConnectivity = true,Outline = true};// Extract the objectscommand.Run(inputImage);using (ExObjData data = command.Data){// Log the number of objects from the first listExObjObjectList objects = data[0].Objects;Console.WriteLine($"Number of objects (before filtering): {objects.Count}");// Log the number of points around the first object (braces for scope){int count = 0;foreach (ExObjOutlinePoint point in objects.First().Outline)count++;Console.WriteLine($"First object's outline length: {count}");}// Setup the filter optionsExObjFilterOptions filterOptions = new ExObjFilterOptions(){LargeObjectThreshold = -1, // No upper limit on sizeSmallObjectThreshold = 10 // Remove objects smaller than 10x10 pixels};// Filter the objectsdata.FilterList(objects, filterOptions);// Log the number of objects againConsole.WriteLine($"Number of objects (after filtering): {objects.Count}");// Setup the content bound optionsExObjContentBound contentBound = new ExObjContentBound(new LeadRect(192, 260, 323, 146));ExObjContentBoundOptions contentBoundOptions = new ExObjContentBoundOptions(){ObjectsOfInterest = null // Pass null to use every object in data};// Calculate the content boundsdata.CalculateContentBound(new ExObjContentBound[] { contentBound }, contentBoundOptions);// Setup the region optionsExObjRegionOptions regionOptions = new ExObjRegionOptions(){Horizontal = true};// Calculate each object's regiondata.CalculateRegion(objects, regionOptions);// Create an output imageusing (RasterImage outputImage = RasterImage.Create(inputImage.Width, inputImage.Height, 24, inputImage.XResolution, RasterColor.White)){// Fill the output image with whitenew FillCommand(RasterColor.White).Run(outputImage);// Draw the content bound rects for the first word. Red for the input, green for the output.outputImage.AddRectangleToRegion(null, contentBound.Input, RasterRegionCombineMode.Set);new FillCommand(new RasterColor(255, 0, 0)).Run(outputImage);outputImage.AddRectangleToRegion(null, contentBound.Content, RasterRegionCombineMode.Set);new FillCommand(new RasterColor(0, 255, 0)).Run(outputImage);// Populate the output image with each object's regionforeach (ExObjObject @object in objects)foreach (ExObjSegment segment in @object.RegionHorizontal){// Update the region to the current segmentoutputImage.AddRectangleToRegion(null, segment.Bounds, RasterRegionCombineMode.Set);// Fill the region with blacknew FillCommand(RasterColor.Black).Run(outputImage);}// Clear the output image's regionoutputImage.MakeRegionEmpty();// Save the output imagecodecs.Save(outputImage, Path.Combine(LEAD_VARS.ImagesDir, "ExtractObjects.png"), RasterImageFormat.Png, 0);}}}}static class LEAD_VARS{public const string ImagesDir = @"C:\LEADTOOLS21\Resources\Images";}
Imports LeadtoolsImports Leadtools.CodecsImports Leadtools.ImageProcessingImports Leadtools.ImageProcessing.CorePublic Sub ExtractObjectsCommandExample()Using codecs As New RasterCodecs()' Load the original imageUsing inputImage As RasterImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "demoicr2.tif"))' Setup the extraction optionsDim command As New ExtractObjectsCommand() With {.DetectChildren = True,.EightConnectivity = True,.Outline = True}' Extract the objectscommand.Run(inputImage)Using data As ExObjData = command.Data' Log the number of objects from the first listDim objects As ExObjObjectList = data(0).ObjectsConsole.WriteLine($"Number of objects (before filtering): {objects.Count}")' Log the number of points around the first objectDim count As Integer = 0For Each point As ExObjOutlinePoint In objects.First().Outlinecount += 1NextConsole.WriteLine($"First object's outline length: {count}")' Setup the filter optionsDim filterOptions As New ExObjFilterOptions() With {.LargeObjectThreshold = -1, ' No upper limit on size.SmallObjectThreshold = 10 ' Remove objects smaller than 10x10 pixels}' Filter the objectsdata.FilterList(objects, filterOptions)' Log the number of objects againConsole.WriteLine($"Number of objects (after filtering): {objects.Count}")' Setup the content bound optionsDim contentBound As New ExObjContentBound(New LeadRect(192, 260, 323, 146))Dim contentBoundOptions As New ExObjContentBoundOptions() With {.ObjectsOfInterest = Nothing ' Pass Nothing to use every object in data}' Calculate the content boundsdata.CalculateContentBound(New ExObjContentBound() {contentBound}, contentBoundOptions)' Setup the region optionsDim regionOptions As New ExObjRegionOptions() With {.Horizontal = True}' Calculate each object's regiondata.CalculateRegion(objects, regionOptions)' Create an output imageUsing outputImage As RasterImage = RasterImage.Create(inputImage.Width, inputImage.Height, 24, inputImage.XResolution, RasterColor.White)' Fill the output image with whiteCall New FillCommand(RasterColor.White).Run(outputImage)' Draw the content bound rects for the first word. Red for the input, green for the output.outputImage.AddRectangleToRegion(Nothing, contentBound.Input, RasterRegionCombineMode.[Set])Call New FillCommand(New RasterColor(255, 0, 0)).Run(outputImage)outputImage.AddRectangleToRegion(Nothing, contentBound.Content, RasterRegionCombineMode.[Set])Call New FillCommand(New RasterColor(0, 255, 0)).Run(outputImage)' Populate the output image with each object's regionFor Each [object] As ExObjObject In objectsFor Each segment As ExObjSegment In [object].RegionHorizontal' Update the region to the current segmentoutputImage.AddRectangleToRegion(Nothing, segment.Bounds, RasterRegionCombineMode.[Set])' Fill the region with blackCall New FillCommand(RasterColor.Black).Run(outputImage)NextNext' Clear the output image's regionoutputImage.MakeRegionEmpty()' Save the output imagecodecs.Save(outputImage, Path.Combine(LEAD_VARS.ImagesDir, "ExtractObjects.png"), RasterImageFormat.Png, 0)End UsingEnd UsingEnd UsingEnd UsingEnd SubPublic NotInheritable Class LEAD_VARSPublic Const ImagesDir As String = "C:\LEADTOOLS21\Resources\Images"End Class
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document
