SeparateObjectsByBlock
Separates connected objects in a binary image in a low memory consumption mode.
Access to parameter description
For an introduction:
It is based on a block-wise implementation of the watershed algorithm, building a graph allowing the propagation of the catchments areas through the entire image.
Note:
Access to parameter description
For an introduction:
- section Introduction To Watershed
- section Geodesic Transformations
It is based on a block-wise implementation of the watershed algorithm, building a graph allowing the propagation of the catchments areas through the entire image.
Note:
- This algorithm requires less free memory than the SeparateObjects algorithm but is much slower to execute.
- As the implementation is totally different, the results of both algorithms may differ slightly, especially on areas where the distance map generates some plateaus.
Function Syntax
This function returns outputImage.
// Function prototype
std::shared_ptr< iolink::ImageView > separateObjectsByBlock( std::shared_ptr< iolink::ImageView > inputBinaryImage, int32_t contrastValue, SeparateObjectsByBlock::OutputType outputType, SeparateObjectsByBlock::AlgorithmMode algorithmMode, int32_t blockSize, SeparateObjectsByBlock::Neighborhood neighborhood, std::shared_ptr< iolink::ImageView > outputImage = NULL );
This function returns outputImage.
// Function prototype. separate_objects_by_block( input_binary_image, contrast_value = 4, output_type = SeparateObjectsByBlock.OutputType.SEPARATED_OBJECTS, algorithm_mode = SeparateObjectsByBlock.AlgorithmMode.REPEATABLE, block_size = 256, neighborhood = SeparateObjectsByBlock.Neighborhood.CONNECTIVITY_26, output_image = None )
This function returns outputImage.
// Function prototype. public static IOLink.ImageView SeparateObjectsByBlock( IOLink.ImageView inputBinaryImage, Int32 contrastValue = 4, SeparateObjectsByBlock.OutputType outputType = ImageDev.SeparateObjectsByBlock.OutputType.SEPARATED_OBJECTS, SeparateObjectsByBlock.AlgorithmMode algorithmMode = ImageDev.SeparateObjectsByBlock.AlgorithmMode.REPEATABLE, Int32 blockSize = 256, SeparateObjectsByBlock.Neighborhood neighborhood = ImageDev.SeparateObjectsByBlock.Neighborhood.CONNECTIVITY_26, IOLink.ImageView outputImage = null );
Class Syntax
Parameters
Class Name | SeparateObjectsByBlock |
---|
Parameter Name | Description | Type | Supported Values | Default Value | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
inputBinaryImage |
The input binary image. | Image | Binary | nullptr | |||||||||||
contrastValue |
The depth of the valley used to select the markers of the watershed. | Int32 | >=0 | 4 | |||||||||||
outputType |
The type of result image.
|
Enumeration | SEPARATED_OBJECTS | ||||||||||||
algorithmMode |
The mode for applying the watershed algorithm.
|
Enumeration | REPEATABLE | ||||||||||||
blockSize |
The size of blocks used to crop the input images. | Int32 | >=32 | 256 | |||||||||||
neighborhood |
The 3D neighborhood configuration. This parameter is ignored with a 2D input image.
|
Enumeration | CONNECTIVITY_26 | ||||||||||||
outputImage |
The output binary or label image. Its dimensions are forced to the same values as the input image. Its type depends on the outputType parameter. | Image | nullptr |
Object Examples
auto polystyrene_sep = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "polystyrene_sep.vip" ); SeparateObjectsByBlock separateObjectsByBlockAlgo; separateObjectsByBlockAlgo.setInputBinaryImage( polystyrene_sep ); separateObjectsByBlockAlgo.setContrastValue( 4 ); separateObjectsByBlockAlgo.setOutputType( SeparateObjectsByBlock::OutputType::SEPARATED_OBJECTS ); separateObjectsByBlockAlgo.setAlgorithmMode( SeparateObjectsByBlock::AlgorithmMode::REPEATABLE ); separateObjectsByBlockAlgo.setBlockSize( 256 ); separateObjectsByBlockAlgo.setNeighborhood( SeparateObjectsByBlock::Neighborhood::CONNECTIVITY_26 ); separateObjectsByBlockAlgo.execute(); std::cout << "outputImage:" << separateObjectsByBlockAlgo.outputImage()->toString();
polystyrene_sep = imagedev.read_vip_image(imagedev_data.get_image_path("polystyrene_sep.vip")) separate_objects_by_block_algo = imagedev.SeparateObjectsByBlock() separate_objects_by_block_algo.input_binary_image = polystyrene_sep separate_objects_by_block_algo.contrast_value = 4 separate_objects_by_block_algo.output_type = imagedev.SeparateObjectsByBlock.SEPARATED_OBJECTS separate_objects_by_block_algo.algorithm_mode = imagedev.SeparateObjectsByBlock.REPEATABLE separate_objects_by_block_algo.block_size = 256 separate_objects_by_block_algo.neighborhood = imagedev.SeparateObjectsByBlock.CONNECTIVITY_26 separate_objects_by_block_algo.execute() print( "output_image:", str( separate_objects_by_block_algo.output_image ) )
ImageView polystyrene_sep = Data.ReadVipImage( @"Data/images/polystyrene_sep.vip" ); SeparateObjectsByBlock separateObjectsByBlockAlgo = new SeparateObjectsByBlock { inputBinaryImage = polystyrene_sep, contrastValue = 4, outputType = SeparateObjectsByBlock.OutputType.SEPARATED_OBJECTS, algorithmMode = SeparateObjectsByBlock.AlgorithmMode.REPEATABLE, blockSize = 256, neighborhood = SeparateObjectsByBlock.Neighborhood.CONNECTIVITY_26 }; separateObjectsByBlockAlgo.Execute(); Console.WriteLine( "outputImage:" + separateObjectsByBlockAlgo.outputImage.ToString() );
Function Examples
auto polystyrene_sep = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "polystyrene_sep.vip" ); auto result = separateObjectsByBlock( polystyrene_sep, 4, SeparateObjectsByBlock::OutputType::SEPARATED_OBJECTS, SeparateObjectsByBlock::AlgorithmMode::REPEATABLE, 256, SeparateObjectsByBlock::Neighborhood::CONNECTIVITY_26 ); std::cout << "outputImage:" << result->toString();
polystyrene_sep = imagedev.read_vip_image(imagedev_data.get_image_path("polystyrene_sep.vip")) result = imagedev.separate_objects_by_block( polystyrene_sep, 4, imagedev.SeparateObjectsByBlock.SEPARATED_OBJECTS, imagedev.SeparateObjectsByBlock.REPEATABLE, 256, imagedev.SeparateObjectsByBlock.CONNECTIVITY_26 ) print( "output_image:", str( result ) )
ImageView polystyrene_sep = Data.ReadVipImage( @"Data/images/polystyrene_sep.vip" ); IOLink.ImageView result = Processing.SeparateObjectsByBlock( polystyrene_sep, 4, SeparateObjectsByBlock.OutputType.SEPARATED_OBJECTS, SeparateObjectsByBlock.AlgorithmMode.REPEATABLE, 256, SeparateObjectsByBlock.Neighborhood.CONNECTIVITY_26 ); Console.WriteLine( "outputImage:" + result.ToString() );