Populates the region for each object using its outline points.
public void CalculateRegion(ICollection<ExObjObject> objects,ExObjRegionOptions options)
- (void)calculateRegion:(NSEnumerator<LTExObjObject *> *)objects withOptions:(LTExObjRegionOptions *)options; public void calculateRegion(java.util.Collection<ExObjObject> objects,ExObjRegionOptions options);
public:void CalculateRegion(ICollection<ExObjObject^>^ objects,ExObjRegionOptions^ options)
objects
The objects to process. This value cannot be null.
options
Additional options. This value cannot be null.
If ExObjObject.Siblings is populated, this method will properly handle the additional objects during calculation.
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:\LEADTOOLS23\Resources\Images";}
import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Collection;import java.util.Collections;import java.util.Iterator;import org.junit.*;import org.junit.runner.JUnitCore;import org.junit.runner.Result;import org.junit.runner.notification.Failure;import static org.junit.Assert.*;import leadtools.*;import leadtools.codecs.*;import leadtools.imageprocessing.FillCommand;import leadtools.imageprocessing.core.*;import leadtools.internal.Tuple;public void extractObjectsCommandExample() {final String LEAD_VARS_IMAGES_DIR = "C:\\LEADTOOLS23\\Resources\\Images";RasterCodecs codecs = new RasterCodecs();// Load the original imageRasterImage inputImage = codecs.load(combine(LEAD_VARS_IMAGES_DIR, "demoicr2.tif"));// Setup the extraction optionsExtractObjectsCommand command = new ExtractObjectsCommand();command.setDetectChildren(true);command.setEightConnectivity(true);command.setOutline(true);// Extract the objectscommand.run(inputImage);ExObjData data = command.getData();// Log the number of objects from the first listExObjObjectList objects = data.iterator().next().getObjects();System.out.println("Number of objects (before filtering): " + objects.size());// Log the number of points around the first object (braces for scope)System.out.println(objects.iterator().next().getOutline().size());// Setup the filter optionsExObjFilterOptions filterOptions = new ExObjFilterOptions();filterOptions.setLargeObjectThreshold(-1);filterOptions.setSmallObjectThreshold(10);// Filter the objectsdata.filterList(objects, filterOptions);// Log the number of objects againSystem.out.println("Number of objects (after filtering): " + objects.size());// Setup the content bound optionsExObjContentBound contentBound = new ExObjContentBound(new LeadRect(192, 260, 323, 146));Collection<ExObjContentBound> col = Collections.singleton(contentBound);ExObjContentBoundOptions contentBoundOptions = new ExObjContentBoundOptions();contentBoundOptions.setObjectsOfInterest(null);// Calculate the content boundsdata.calculateContentBound(col, contentBoundOptions);// Setup the region optionsExObjRegionOptions regionOptions = new ExObjRegionOptions();regionOptions.setHorizontal(true);// Calculate each object's regiondata.calculateRegion(objects, regionOptions);// Create an output imageRasterImage outputImage = RasterImage.create(inputImage.getWidth(), inputImage.getHeight(), 24,inputImage.getXResolution(), 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.getInput(), RasterRegionCombineMode.SET);new FillCommand(new RasterColor(255, 0, 0)).run(outputImage);outputImage.addRectangleToRegion(null, contentBound.getContent(), RasterRegionCombineMode.SET);new FillCommand(new RasterColor(0, 255, 0)).run(outputImage);// Populate the output image with each object's regionIterator<ExObjObject> it = objects.iterator();while (it.hasNext()) {Iterator<ExObjSegment> segments = it.next().getRegionHorizontal().iterator();while (segments.hasNext()) {outputImage.addRectangleToRegion(null, segments.next().getBounds(), RasterRegionCombineMode.SET);new FillCommand(RasterColor.BLACK).run(outputImage);}}// Clear the output image's regionoutputImage.makeRegionEmpty();// Save the output imagecodecs.save(outputImage, combine(LEAD_VARS_IMAGES_DIR, "ExtractObjects.png"), RasterImageFormat.PNG, 0);System.out.println("Command run and image saved to: " + combine(LEAD_VARS_IMAGES_DIR, "ExtractObjects.png"));assertTrue(new File(combine(LEAD_VARS_IMAGES_DIR, "ExtractObjects.png")).exists());outputImage.dispose();data.dispose();inputImage.dispose();codecs.dispose();}
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
