EndPoints3d
            Point detector selecting end points of a three-dimensional binary image.
Access to parameter description
For an introduction:
This algorithm is a point detector that selects end points of a skeleton (all object voxels having only one neighbor).
The skeleton is first detected, and then this algorithm performs a hit-or-miss transform (HMT) with the following configuration and its 25 associated rotations: $$ \begin{array}{ccc} 0 & 0 & 0\\ 0 & \times & 0\\ 0 & 0 & 0 \end{array} ~~~~~~~~~~~~ \begin{array}{ccc} 0 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 0 \end{array} ~~~~~~~~~~~~ \begin{array}{ccc} 0 & 0 & 0\\ 0 & 0 & 0\\ 0 & 0 & 0 \end{array} $$ Where $\times$ means "don't care".
        
See also
		Access to parameter description
For an introduction:
- section Mathematical Morphology
 - section Point Detectors
 
This algorithm is a point detector that selects end points of a skeleton (all object voxels having only one neighbor).
The skeleton is first detected, and then this algorithm performs a hit-or-miss transform (HMT) with the following configuration and its 25 associated rotations: $$ \begin{array}{ccc} 0 & 0 & 0\\ 0 & \times & 0\\ 0 & 0 & 0 \end{array} ~~~~~~~~~~~~ \begin{array}{ccc} 0 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 0 \end{array} ~~~~~~~~~~~~ \begin{array}{ccc} 0 & 0 & 0\\ 0 & 0 & 0\\ 0 & 0 & 0 \end{array} $$ Where $\times$ means "don't care".
See also
Function Syntax
This function returns the outputBinaryImage output parameter.
                        
                    
// Function prototype.
std::shared_ptr< iolink::ImageView >
endPoints3d( std::shared_ptr< iolink::ImageView > inputBinaryImage,
             EndPoints3d::BorderCondition borderCondition,
             EndPoints3d::Neighborhood neighborhood,
             std::shared_ptr< iolink::ImageView > outputBinaryImage = NULL );
                    
This function returns the outputBinaryImage output parameter.
                        
                    
// Function prototype.
end_points_3d( input_binary_image,
               border_condition = EndPoints3d.BorderCondition.ZERO,
               neighborhood = EndPoints3d.Neighborhood.CONNECTIVITY_26,
               output_binary_image = None )
                    
This function returns the outputBinaryImage output parameter.
                        
                
// Function prototype.
public static IOLink.ImageView
EndPoints3d( IOLink.ImageView inputBinaryImage,
             EndPoints3d.BorderCondition borderCondition = ImageDev.EndPoints3d.BorderCondition.ZERO,
             EndPoints3d.Neighborhood neighborhood = ImageDev.EndPoints3d.Neighborhood.CONNECTIVITY_26,
             IOLink.ImageView outputBinaryImage = null );
                    Class Syntax
Parameters
| Class Name | EndPoints3d | 
|---|
| Parameter Name | Description | Type | Supported Values | Default Value | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
![]()  | 
  inputBinaryImage    | 
 The binary input image. | Image | Binary | nullptr | ||||||
![]()  | 
  borderCondition    | 
 The way to consider voxels out of image borders.
  | 
Enumeration | ZERO | |||||||
![]()  | 
  neighborhood    | 
 The 3D neighborhood configuration.
  | 
Enumeration | CONNECTIVITY_26 | |||||||
![]()  | 
  outputBinaryImage    | 
 The binary output image. Its size and type are forced to the same values as the input. | Image | nullptr | |||||||
Object Examples
auto foam_sep = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "foam_sep.vip" ); EndPoints3d endPoints3dAlgo; endPoints3dAlgo.setInputBinaryImage( foam_sep ); endPoints3dAlgo.setBorderCondition( EndPoints3d::BorderCondition::ZERO ); endPoints3dAlgo.setNeighborhood( EndPoints3d::Neighborhood::CONNECTIVITY_26 ); endPoints3dAlgo.execute(); std::cout << "outputBinaryImage:" << endPoints3dAlgo.outputBinaryImage()->toString();
foam_sep = imagedev.read_vip_image(imagedev_data.get_image_path("foam_sep.vip"))
end_points_3d_algo = imagedev.EndPoints3d()
end_points_3d_algo.input_binary_image = foam_sep
end_points_3d_algo.border_condition = imagedev.EndPoints3d.ZERO
end_points_3d_algo.neighborhood = imagedev.EndPoints3d.CONNECTIVITY_26
end_points_3d_algo.execute()
print( "output_binary_image:", str( end_points_3d_algo.output_binary_image ) );
            
ImageView foam_sep = Data.ReadVipImage( @"Data/images/foam_sep.vip" );
EndPoints3d endPoints3dAlgo = new EndPoints3d
{
    inputBinaryImage = foam_sep,
    borderCondition = EndPoints3d.BorderCondition.ZERO,
    neighborhood = EndPoints3d.Neighborhood.CONNECTIVITY_26
};
endPoints3dAlgo.Execute();
Console.WriteLine( "outputBinaryImage:" + endPoints3dAlgo.outputBinaryImage.ToString() );
            Function Examples
auto foam_sep = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "foam_sep.vip" ); auto result = endPoints3d( foam_sep, EndPoints3d::BorderCondition::ZERO, EndPoints3d::Neighborhood::CONNECTIVITY_26 ); std::cout << "outputBinaryImage:" << result->toString();
foam_sep = imagedev.read_vip_image(imagedev_data.get_image_path("foam_sep.vip"))
result = imagedev.end_points_3d( foam_sep, imagedev.EndPoints3d.ZERO, imagedev.EndPoints3d.CONNECTIVITY_26 )
print( "output_binary_image:", str( result ) );
            ImageView foam_sep = Data.ReadVipImage( @"Data/images/foam_sep.vip" ); IOLink.ImageView result = Processing.EndPoints3d( foam_sep, EndPoints3d.BorderCondition.ZERO, EndPoints3d.Neighborhood.CONNECTIVITY_26 ); Console.WriteLine( "outputBinaryImage:" + result.ToString() );

