EulerNumber3d
Measures the Euler characteristic, which is a topological invariant indicator, from objects of a three-dimensional binary image.
Access to parameter description
For an introduction: section Image Analysis.
The Euler number, or Euler-Poincar characteristic $\chi$, or connectivity number, is a topological parameter which describes the structure of an object, regardless of its specific geometric shape. This indicator is topologically invariant, which means it remains unchanged by elastic transformations of the studied structure. Other topological parameters exist, such as the number of branches or of triple points in a skeleton, the hierarchical degree of a tree-like skeleton or the number of neighbours for a cell in a skeleton by zone of influence.
The Euler number is correlated with the "redundant connectivity", which can be defined as the maximal number of branches of a structure that may be cut without splitting it into several unconnected parts.
In 3D the Euler number is related to the three Betti numbers:
This algorithm computes the Euler number as the sum of measurements in local neighborhoods, considering the 26-connectivity. In the continuous case, this measurement is null almost everywhere, except on contours.
In the 3D discrete case, this local measurement is derived from the Euler formula for graph $$\chi=C-T+H=V+F-E$$ where $\beta_0$ is the number of connected components, $\beta_1$ the connectivity, $\beta_2$ the number of of enclosed cavities, $V$ the number of vertices, $F$ the number of elementary faces, and $E$ the number of edges.
Figure 1. Euler 3D number on basic shapes
The number of objects or connected components is straightforward to compute with the Labeling3d algorithm. The number of holes can be computed by labeling the image background. The number of tunnels can be deduced by subtracting the Euler number from the sum of the number of connected components $C$ and number of enclosed cavities $H$.
References
Access to parameter description
For an introduction: section Image Analysis.
The Euler number, or Euler-Poincar characteristic $\chi$, or connectivity number, is a topological parameter which describes the structure of an object, regardless of its specific geometric shape. This indicator is topologically invariant, which means it remains unchanged by elastic transformations of the studied structure. Other topological parameters exist, such as the number of branches or of triple points in a skeleton, the hierarchical degree of a tree-like skeleton or the number of neighbours for a cell in a skeleton by zone of influence.
The Euler number is correlated with the "redundant connectivity", which can be defined as the maximal number of branches of a structure that may be cut without splitting it into several unconnected parts.
In 3D the Euler number is related to the three Betti numbers:
- $\beta_0 = C$, the number of connected components
- $\beta_1= T $, the "redundant connectivity", or number of holes piercing the object (for instance, the number of tunnels)
- $\beta_2=H$, the number of enclosed cavities
This algorithm computes the Euler number as the sum of measurements in local neighborhoods, considering the 26-connectivity. In the continuous case, this measurement is null almost everywhere, except on contours.
In the 3D discrete case, this local measurement is derived from the Euler formula for graph $$\chi=C-T+H=V+F-E$$ where $\beta_0$ is the number of connected components, $\beta_1$ the connectivity, $\beta_2$ the number of of enclosed cavities, $V$ the number of vertices, $F$ the number of elementary faces, and $E$ the number of edges.
Figure 1. Euler 3D number on basic shapes
The number of objects or connected components is straightforward to compute with the Labeling3d algorithm. The number of holes can be computed by labeling the image background. The number of tunnels can be deduced by subtracting the Euler number from the sum of the number of connected components $C$ and number of enclosed cavities $H$.
References
- V.J.Toriwaki and T.Yonekura. "Euler Number and Connectivity Indexes of a Three Dimensional Digital Picture". Forma, vol. 17, 183-209, 2002.
- A.Odgaard. "Three-Dimensional Methods for Quantification of Cancellous Bone Architecture". Bone, vol. 20, no. 4, pp. 315-328, Apr. 1997.
Function Syntax
This function returns outputMeasurement.
// Function prototype
Euler3dMsr::Ptr eulerNumber3d( std::shared_ptr< iolink::ImageView > inputBinaryImage, Euler3dMsr::Ptr outputMeasurement = NULL );
This function returns outputMeasurement.
// Function prototype. euler_number_3d( input_binary_image, output_measurement = None )
This function returns outputMeasurement.
// Function prototype. public static Euler3dMsr EulerNumber3d( IOLink.ImageView inputBinaryImage, Euler3dMsr outputMeasurement = null );
Class Syntax
Parameters
Class Name | EulerNumber3d |
---|
Parameter Name | Description | Type | Supported Values | Default Value | |
---|---|---|---|---|---|
inputBinaryImage |
The 3D binary input image. | Image | Binary | nullptr | |
outputMeasurement |
The output measurement result. | Euler3dMsr | nullptr |
Object Examples
auto foam_sep = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "foam_sep.vip" ); EulerNumber3d eulerNumber3dAlgo; eulerNumber3dAlgo.setInputBinaryImage( foam_sep ); eulerNumber3dAlgo.execute(); std::cout << "eulerNumber: " << eulerNumber3dAlgo.outputMeasurement()->eulerNumber( ) ;
foam_sep = imagedev.read_vip_image(imagedev_data.get_image_path("foam_sep.vip")) euler_number_3d_algo = imagedev.EulerNumber3d() euler_number_3d_algo.input_binary_image = foam_sep euler_number_3d_algo.execute() print( "eulerNumber: ", str( euler_number_3d_algo.output_measurement.euler_number( ) ) )
ImageView foam_sep = Data.ReadVipImage( @"Data/images/foam_sep.vip" ); EulerNumber3d eulerNumber3dAlgo = new EulerNumber3d { inputBinaryImage = foam_sep }; eulerNumber3dAlgo.Execute(); Console.WriteLine( "eulerNumber: " + eulerNumber3dAlgo.outputMeasurement.eulerNumber( ) );
Function Examples
auto foam_sep = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "foam_sep.vip" ); auto result = eulerNumber3d( foam_sep ); std::cout << "eulerNumber: " << result->eulerNumber( ) ;
foam_sep = imagedev.read_vip_image(imagedev_data.get_image_path("foam_sep.vip")) result = imagedev.euler_number_3d( foam_sep ) print( "eulerNumber: ", str( result.euler_number( ) ) )
ImageView foam_sep = Data.ReadVipImage( @"Data/images/foam_sep.vip" ); Euler3dMsr result = Processing.EulerNumber3d( foam_sep ); Console.WriteLine( "eulerNumber: " + result.eulerNumber( ) );