Indicates whether a small noise should be ignored during extraction.
public bool IgnoreSmallNoise {get; set;}
@property (nonatomic, assign) BOOL ignoreSmallNoise;
public boolean getIgnoreSmallNoise();
public void setIgnoreSmallNoise(
boolean booleanValue
);
public:
property bool IgnoreSmallNoise
{
bool get()
void set(bool value)
}
IgnoreSmallNoise # get and set (ExtractObjectsCommand)
true to ignore small noise when extracting the objects; otherwise, false. The default value is false.
The threshold for the small noise can be configured using SmallNoiseThreshold.
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 extractObjectsCommandUseMultiColorsExample() {
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"));
File output = new File(combine(LEAD_VARS_IMAGES_DIR, "demoicr2.tif"));
assertTrue(output.exists());
// Setup the extraction options
Tuple<String, RasterColor>[] colors = new Tuple[3];
colors[0] = Tuple.create("DarkGray", new RasterColor(30, 30, 30));
colors[1] = Tuple.create("DarkGreen", new RasterColor(41, 108, 70));
colors[2] = Tuple.create("LightRed", new RasterColor(200, 68, 65));
ExtractObjectsCommand command = new ExtractObjectsCommand();
command.setDetectChildren(true);
command.setEightConnectivity(true);
command.setIgnoreSmallNoise(true);
command.setOutline(true);
command.setSmallNoiseThreshold(5);// Filter out noise smaller than 5x5 pixels
command.setUseMultiColors(true);
ExObjColorInfo[] exColors = new ExObjColorInfo[colors.length];
for (int i = 0; i < colors.length; i++) {
exColors[i] = new ExObjColorInfo();
exColors[i].setColor(colors[i].getItem2());
exColors[i].setThreshold(50);
}
// Extract the objects
command.run(inputImage);
ExObjData data = command.getData();
// Put objects into one list for processing all at once
ArrayList<ExObjObject> objects = new ArrayList<ExObjObject>();
Iterator<ExObjResult> it = data.iterator();
while (it.hasNext()) {
objects.addAll(it.next().getObjects());
}
// 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);
// Extract each color to a separate image
int colorIndex = -1;
for (ExObjResult result : data) {
colorIndex++;
// Fill the output image with white
new FillCommand(RasterColor.WHITE).run(outputImage);
// Populate the output image with each object's region
for (ExObjObject ob : result.getObjects()) {
for (ExObjSegment segment : ob.getRegionHorizontal()) {
// Update the region to the current segment
outputImage.addRectangleToRegion(null, segment.getBounds(), RasterRegionCombineMode.SET);
// Fill the region with the current color
new FillCommand(colors[colorIndex].getItem2()).run(outputImage);
}
}
// Clear the output image's region
outputImage.makeRegionEmpty();
// Save the output image
codecs.save(outputImage,
combine(LEAD_VARS_IMAGES_DIR, "ExtractObjectsMultiColors_" + colors[colorIndex].getItem1() + ".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();
}
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
public void ExtractObjectsCommandUseMultiColorsExample()
{
using (RasterCodecs codecs = new RasterCodecs())
// Load the original image
using (RasterImage inputImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "unwarp1.jpg")))
{
// Setup the extraction options
Tuple<string, RasterColor>[] colors = new Tuple<string, RasterColor>[]
{
Tuple.Create("DarkGray", new RasterColor(30, 30, 30)),
Tuple.Create("DarkGreen", new RasterColor(41, 108, 70)),
Tuple.Create("LightRed", new RasterColor(200, 68, 65))
};
ExtractObjectsCommand command = new ExtractObjectsCommand()
{
ColorInfo = colors
.Select(c => new ExObjColorInfo()
{
Color = c.Item2,
Threshold = 50
})
.ToArray(),
DetectChildren = true,
EightConnectivity = true,
IgnoreSmallNoise = true,
Outline = true,
SmallNoiseThreshold = 2, // Filter out noise smaller than 2x2 pixels
IgnoreLargeNoise = true,
LargeNoiseThreshold = 950, // Filter out noise larger than 950 pixels
UseMultiColors = true,
ReportIgnored = true,
};
// Extract the objects
command.Run(inputImage);
using (ExObjData data = command.Data)
{
// Put objects into one list for processing all at once, and count the noise
List<ExObjObject> objects = new List<ExObjObject>();
int smallNoiseCount = 0, largeNoiseCount = 0;
foreach (ExObjResult result in data)
{
objects.AddRange(result.Objects);
if (result.SmallNoise != null)
smallNoiseCount += result.SmallNoise.Count;
if (result.LargeNoise != null)
largeNoiseCount += result.LargeNoise.Count;
}
Console.WriteLine($"Small Noise Count: {smallNoiseCount}");
Console.WriteLine($"Large Noise Count: {largeNoiseCount}");
// 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))
{
// Extract each color to a separate image
int colorIndex = -1;
foreach (ExObjResult result in data)
{
colorIndex++;
// Fill the output image with white
new FillCommand(RasterColor.White).Run(outputImage);
// Populate the output image with each object's region
foreach (ExObjObject @object in result.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 the current color
new FillCommand(colors[colorIndex].Item2).Run(outputImage);
}
// Clear the output image's region
outputImage.MakeRegionEmpty();
// Save the output image
codecs.Save(outputImage, Path.Combine(LEAD_VARS.ImagesDir, $"ExtractObjectsMultiColors_{colors[colorIndex].Item1}.png"), RasterImageFormat.Png, 0);
}
}
}
}
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images";
}
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