ImageDev

SelectiveClosing2d

Closes objects of a two-dimensional binary image conditionally to a local constraint.

Access to parameter description

For an introduction: This algorithm successively runs a SelectiveDilation2d and a SelectiveErosion2d with the same kernel and threshold.
It can be applied only on binary images. Using a threshold of 1 amounts to applying a standard morphological closing.
This operator is smoother than the classic closing, and softens the appearance of the structuring element in the filtered image.

See also

Function Syntax

This function returns outputBinaryImage.
// Function prototype
std::shared_ptr< iolink::ImageView > selectiveClosing2d( std::shared_ptr< iolink::ImageView > inputBinaryImage, uint32_t numberOfIterations, uint32_t threshold, std::shared_ptr< iolink::ImageView > outputBinaryImage = NULL );
This function returns outputBinaryImage.
// Function prototype.
selective_closing_2d( input_binary_image,
                      number_of_iterations = 3,
                      threshold = 5,
                      output_binary_image = None )
This function returns outputBinaryImage.
// Function prototype.
public static IOLink.ImageView
SelectiveClosing2d( IOLink.ImageView inputBinaryImage,
                    UInt32 numberOfIterations = 3,
                    UInt32 threshold = 5,
                    IOLink.ImageView outputBinaryImage = null );

Class Syntax

Parameters

Class Name SelectiveClosing2d

Parameter Name Description Type Supported Values Default Value
input
inputBinaryImage
The binary input image. Image Binary nullptr
input
numberOfIterations
The number of iterations. UInt32 >=1 3
input
threshold
The minimum number of neighbors that is required to transform a pixel. UInt32 [1, 8] 5
output
outputBinaryImage
The binary output image. Its size and type are forced to the same values as the input. Image nullptr

Object Examples

auto polystyrene_sep = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "polystyrene_sep.vip" );

SelectiveClosing2d selectiveClosing2dAlgo;
selectiveClosing2dAlgo.setInputBinaryImage( polystyrene_sep );
selectiveClosing2dAlgo.setNumberOfIterations( 3 );
selectiveClosing2dAlgo.setThreshold( 5 );
selectiveClosing2dAlgo.execute();

std::cout << "outputBinaryImage:" << selectiveClosing2dAlgo.outputBinaryImage()->toString();
polystyrene_sep = imagedev.read_vip_image(imagedev_data.get_image_path("polystyrene_sep.vip"))

selective_closing_2d_algo = imagedev.SelectiveClosing2d()
selective_closing_2d_algo.input_binary_image = polystyrene_sep
selective_closing_2d_algo.number_of_iterations = 3
selective_closing_2d_algo.threshold = 5
selective_closing_2d_algo.execute()

print( "output_binary_image:", str( selective_closing_2d_algo.output_binary_image ) )
ImageView polystyrene_sep = Data.ReadVipImage( @"Data/images/polystyrene_sep.vip" );

SelectiveClosing2d selectiveClosing2dAlgo = new SelectiveClosing2d
{
    inputBinaryImage = polystyrene_sep,
    numberOfIterations = 3,
    threshold = 5
};
selectiveClosing2dAlgo.Execute();

Console.WriteLine( "outputBinaryImage:" + selectiveClosing2dAlgo.outputBinaryImage.ToString() );

Function Examples

auto polystyrene_sep = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "polystyrene_sep.vip" );

auto result = selectiveClosing2d( polystyrene_sep, 3, 5 );

std::cout << "outputBinaryImage:" << result->toString();
polystyrene_sep = imagedev.read_vip_image(imagedev_data.get_image_path("polystyrene_sep.vip"))

result = imagedev.selective_closing_2d( polystyrene_sep, 3, 5 )

print( "output_binary_image:", str( result ) )
ImageView polystyrene_sep = Data.ReadVipImage( @"Data/images/polystyrene_sep.vip" );

IOLink.ImageView result = Processing.SelectiveClosing2d( polystyrene_sep, 3, 5 );

Console.WriteLine( "outputBinaryImage:" + result.ToString() );