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 image
using (RasterImage inputImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "demoicr2.tif")))
{
// Setup the extraction options
ExtractObjectsCommand command = new ExtractObjectsCommand()
{
DetectChildren = true,
EightConnectivity = true,
Outline = true
};
// Extract the objects
command.Run(inputImage);
using (ExObjData data = command.Data)
{
// Log the number of objects from the first list
ExObjObjectList 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 options
ExObjFilterOptions filterOptions = new ExObjFilterOptions()
{
LargeObjectThreshold = -1, // No upper limit on size
SmallObjectThreshold = 10 // Remove objects smaller than 10x10 pixels
};
// Filter the objects
data.FilterList(objects, filterOptions);
// Log the number of objects again
Console.WriteLine($"Number of objects (after filtering): {objects.Count}");
// Setup the content bound options
ExObjContentBound 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 bounds
data.CalculateContentBound(new ExObjContentBound[] { contentBound }, contentBoundOptions);
// Setup the region options
ExObjRegionOptions regionOptions = new ExObjRegionOptions()
{
Horizontal = true
};
// Calculate each object's region
data.CalculateRegion(objects, regionOptions);
// Create an output image
using (RasterImage outputImage = RasterImage.Create(inputImage.Width, inputImage.Height, 24, inputImage.XResolution, RasterColor.White))
{
// Fill the output image with white
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(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 region
foreach (ExObjObject @object in objects)
foreach (ExObjSegment segment in @object.RegionHorizontal)
{
// Update the region to the current segment
outputImage.AddRectangleToRegion(null, segment.Bounds, RasterRegionCombineMode.Set);
// Fill the region with black
new FillCommand(RasterColor.Black).Run(outputImage);
}
// Clear the output image's region
outputImage.MakeRegionEmpty();
// Save the output image
codecs.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 image
RasterImage inputImage = codecs.load(combine(LEAD_VARS_IMAGES_DIR, "demoicr2.tif"));
// Setup the extraction options
ExtractObjectsCommand command = new ExtractObjectsCommand();
command.setDetectChildren(true);
command.setEightConnectivity(true);
command.setOutline(true);
// Extract the objects
command.run(inputImage);
ExObjData data = command.getData();
// Log the number of objects from the first list
ExObjObjectList 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 options
ExObjFilterOptions filterOptions = new ExObjFilterOptions();
filterOptions.setLargeObjectThreshold(-1);
filterOptions.setSmallObjectThreshold(10);
// Filter the objects
data.filterList(objects, filterOptions);
// Log the number of objects again
System.out.println("Number of objects (after filtering): " + objects.size());
// Setup the content bound options
ExObjContentBound 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 bounds
data.calculateContentBound(col, contentBoundOptions);
// Setup the region options
ExObjRegionOptions regionOptions = new ExObjRegionOptions();
regionOptions.setHorizontal(true);
// Calculate each object's region
data.calculateRegion(objects, regionOptions);
// Create an output image
RasterImage outputImage = RasterImage.create(inputImage.getWidth(), inputImage.getHeight(), 24,
inputImage.getXResolution(), RasterColor.WHITE);
// Fill the output image with white
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(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 region
Iterator<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 region
outputImage.makeRegionEmpty();
// Save the output image
codecs.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