ImageDev

- Getting Started
- ImageDev Python
- ImageDev C#
- ImageDev C++
- Licensing Information
- Redistributable Files
- Processing
- Image Manipulation
- - Synthetic Images
  - - RandomImage2d
    - RandomImage3d
    - RandomGaussianImage2d
    - RandomGaussianImage3d
    - RadialFunctionImage2d
    - RadialFunctionImage3d
    - OrientedLinesImage2d
    - OrientedLinesImage3d
    - RandomSphereImage3d
    - BoxGridImage2d
    - BoxGridImage3d
    - WedgeMaskImage3d
    - PointSpreadFunctionImage3d
  - Image Editing
  - - ConvertImage
    - ResetImage
    - CopyImage
    - PasteImage2d
    - PasteImage3d
    - CropImage2d
    - CropImage3d
    - SampleImage2d
    - SampleImage3d
    - InterlaceFrames2d
    - DeinterlaceFrames2d
  - Stack Operations
  - - SequenceConcatenation
    - SequenceToMultispectral
    - SequenceToVolume
    - VolumeToSequence
    - MultispectralToSequence
    - GetSliceFromVolume3d
    - SetSliceToVolume3d
    - GetObliqueSliceFromVolume3d
    - ImageStackProjection3d
    - VolumeProjection3d
- Geometry And Matching
- - Geometric Transforms
  - - Shearing3d
    - TranslateImage2d
    - TranslateImage3d
    - Flip2d
    - Flip3d
    - FlipImage2d
    - FlipImage3d
    - TransposeImage2d
    - TransposeImage3d
    - SwapQuadrants
    - Rotate2d
    - Rotate3d
    - RotationGenerator3d
    - Resize2d
    - Resize3d
    - RescaleByFactor
    - RescaleImageByFactor
    - ResampleAffine2d
    - ResampleAffine3d
    - ResampleElastic2d
    - SurfaceUnfolding3d
  - Pattern Recognition
  - - BinaryCorrelation2d
    - CrossCorrelation2d
    - CorrelationByDifference2d
    - CorrelationBySignChange2d
  - Registration
  - - ImagePrealignment3d
    - AffineRegistration
    - ElasticRegistration2d
- Arithmetic And Logic
- - Arithmetical Operations
  - - AbsoluteValue
    - AbsoluteMaximumWithImage
    - ArithmeticOperationWithImage
    - ArithmeticOperationWithValue
    - BlendWithImage
    - BlendWithValue
    - DirectionalBlending2d
    - CombineByMask
    - ImageFormula
    - EigenDecomposition2d
    - EigenDecomposition3d
  - Logical Operations
  - - MaskImage
    - LogicalOperationWithImage
    - LogicalOperationWithValue
    - LogicalNot
    - InvertImage
    - BitShift
- Image Filtering
- - Grayscale Transforms
  - - RescaleIntensity
    - StackRescaleIntensity
    - MatchContrast
    - HistogramEqualization
    - Clahe2d
    - Clahe3d
    - AdaptiveHistogramEqualization
    - ApplyGrayscaleLut
    - BackgroundImage2d
    - RadialBackgroundImage2d
    - ShadingCorrection
    - Exponential
    - Logarithm
    - Square
    - SquareRoot
    - RingArtifactRemoval3d
    - BeamHardeningCorrection3d
  - Color Transforms
  - - ColorToLightness
    - GetColorChannel
    - ColorToGrayscale
    - GrayscaleToColor
    - ColorSpaceConversion
    - ColorAntialiasing2d
    - BayerToRgb2d
    - DecorrelationStretch2d
    - BlendAlphaChannelWithImage
    - BlendAlphaChannelWithValue
  - Smoothing And Denoising
  - - BoxFilter2d
    - BoxFilter3d
    - MedianFilter2d
    - MedianFilter3d
    - GaussianFilter2d
    - GaussianFilter3d
    - ExponentialFilter2d
    - RecursiveExponentialFilter2d
    - RecursiveExponentialFilter3d
    - NonLocalMeansFilter2d
    - NonLocalMeansFilter3d
    - CurvatureDrivenDiffusion
    - BilateralFilter2d
    - BilateralFilter3d
    - MajorityFilter2d
    - MajorityFilter3d
    - SigmaFilter2d
    - SigmaFilter3d
    - Despeckle2d
    - Despeckle3d
    - NagaoFilter2d
    - NagaoFilter3d
    - SnnFilter2d
    - SnnFilter3d
    - FlowInpainting
  - Sharpening
  - - Deblurring2d
    - Delineate2d
    - Delineate3d
    - UnsharpMasking2d
    - UnsharpMasking3d
    - Shade2d
    - RichardsonLucyDeconvolution
  - Texture Filters
  - - MeanFilter2d
    - MeanFilter3d
    - VarianceFilter2d
    - VarianceFilter3d
    - SkewnessFilter2d
    - SkewnessFilter3d
    - KurtosisFilter2d
    - KurtosisFilter3d
    - ContrastFilter2d
    - ContrastFilter3d
    - VariationFilter2d
    - VariationFilter3d
    - EnergyFilter2d
    - EnergyFilter3d
    - EntropyFilter2d
    - EntropyFilter3d
    - AutocorrelationFilter
    - LocalAutocorrelationFilter2d
    - ImageCurvature2d
    - ImageCurvature3d
    - StructureEnhancementFilter2d
    - StructureEnhancementFilter3d
    - ScaleSpaceLogFilter2d
    - ScaleSpaceLogFilter3d
  - Frequency Domain
  - - ComplexFft
    - ComplexFftInverse
    - ComplexCenteredFft
    - ComplexCenteredFftInverse
    - CartesianToPolar2d
    - PolarToCartesian2d
    - ConvolutionWithImage
    - ConvolutionWithImage2d
    - RadialFrequencyFilter2d
    - GaborFiltering2d
- Edge Detection
- - Gradient
  - - GradientOperator2d
    - GradientOperator3d
    - VectorToMagnitude2d
    - VectorToMagnitude3d
    - GradientVector2d
    - GradientVector3d
    - GradientMagnitude2d
    - GradientMagnitude3d
    - MorphologicalGradient2d
    - MorphologicalGradient3d
    - RadialGradientCentered2d
    - RadialGradientCentered3d
    - RadialGradientContour2d
    - RadialGradientContour3d
    - RadialGradientLabel2d
    - RadialGradientLabel3d
  - Laplacian
  - - DobFilter2d
    - DobFilter3d
    - MorphologicalLaplacian
    - RecursiveLaplacian2d
    - RecursiveLaplacian3d
  - Other Derivatives
  - - GaussianDerivative2d
    - GaussianDerivative3d
    - GaussianHessianMatrix2d
    - GaussianHessianMatrix3d
    - GaussianGradientTensor2d
    - GaussianGradientTensor3d
  - Edge Marking
  - - ImageLocalMaxima2d
    - ImageLocalMaxima3d
    - RidgeDetection
    - ZeroCrossings2d
    - DijkstraShortestPath2d
    - EigenvaluesToStructureness2d
    - EigenvaluesToStructureness3d
    - TensorVoting2d
    - CannyEdgeDetector2d
    - CannyEdgeDetector3d
- Image Segmentation
- - Binarization
  - - Thresholding
    - ThresholdingByCriterion
    - AutoThresholdingBright
    - AutoThresholdingDark
    - ColorThresholding
    - TopHat
    - FeatureAdaptiveThresholding
    - AdaptiveThresholding2d
    - AdaptiveThresholding3d
    - HysteresisThresholding
  - Labeling
  - - Labeling2d
    - Labeling3d
    - ReorderLabels
    - AssignLabel
    - AddObjectToLabel
    - GroupCloseLabelsl2d
  - Feature Selection
  - - KillBorder2d
    - KillBorder3d
    - RemoveSmallSpots
    - ObjectBoundaries
    - BinarySmoothing2d
    - BinarySmoothing3d
    - LabelInterfaces
  - Separating And Filling
  - - FillHoles2d
    - FillHoles3d
    - RemoveSmallHoles
    - FillImageBorder3d
    - ExpandLabelBoundaries
    - SeparateObjects
    - HExtremaWatershed
    - SeparateObjectsByBlock
    - HExtremaWatershedByBlock
    - ConvexHull2d
  - Region Growing
  - - MarkerBasedWatershed2d
    - MarkerBasedWatershed3d
    - MarkerBasedWatershedByBlock
    - MarkerBasedWatershedBasinsByBlock
    - ExpandLabelsOnBackground
    - FloodFillThreshold2d
    - FloodFillThreshold3d
    - Waterpixel
  - Computational Geometry
  - - PolylineResampler2d
    - PolylineResampler3d
    - PolylineExtrusion3d
    - SurfaceFitting3d
- Mathematical Morphology
- - Erosion And Dilation
  - - Erosion2d
    - Erosion3d
    - Dilation2d
    - Dilation3d
    - ErosionDisk2d
    - ErosionDisk3d
    - ErosionBall3d
    - DilationDisk2d
    - DilationDisk3d
    - DilationBall3d
    - ErosionLine2d
    - ErosionLine3d
    - DilationLine2d
    - DilationLine3d
    - ErosionColor2d
    - DilationColor2d
    - SelectiveErosion2d
    - SelectiveErosion3d
    - SelectiveDilation2d
    - SelectiveDilation3d
  - Opening And Closing
  - - Opening2d
    - Opening3d
    - Closing2d
    - Closing3d
    - OpeningDisk2d
    - OpeningDisk3d
    - OpeningBall3d
    - ClosingDisk2d
    - ClosingDisk3d
    - ClosingBall3d
    - OpeningLine2d
    - OpeningLine3d
    - ClosingLine2d
    - ClosingLine3d
    - OpeningLineMaximum
    - ClosingLineMinimum
    - OpeningColor2d
    - ClosingColor2d
    - OpeningByReconstruction2d
    - OpeningByReconstruction3d
    - ClosingByReconstruction2d
    - ClosingByReconstruction3d
    - OpeningDiskByReconstruction2d
    - OpeningBallByReconstruction3d
    - ClosingDiskByReconstruction2d
    - ClosingBallByReconstruction3d
    - SelectiveOpening2d
    - SelectiveOpening3d
    - SelectiveClosing2d
    - SelectiveClosing3d
  - Hit Or Miss And Skeleton
  - - Skeleton
    - Centerline3d
    - InfluenceZones
    - Centroid2d
    - EndPoints2d
    - EndPoints3d
    - Pruning2d
    - Pruning3d
    - IsolatedPoints2d
    - IsolatedPoints3d
    - TriplePoints2d
    - InteriorPoints2d
    - ApplyMorphologicalLut2d
    - ApplyMorphologicalLut3d
  - Geodesic Transformations
  - - ReconstructionFromMarkers2d
    - ReconstructionFromMarkers3d
    - GrayscaleReconstruction2d
    - GrayscaleReconstruction3d
    - GrayscaleFillHoles2d
    - GrayscaleFillHoles3d
    - HExtrema2d
    - HExtrema3d
    - RegionalExtrema2d
    - RegionalExtrema3d
    - UltimateErosion
  - Distance Maps
  - - DistanceMap2d
    - DistanceMap3d
    - EuclideanDistanceMap3d
    - EuclideanDistanceMap2d
    - GeodesicDistanceMap
    - ClosestBoundaryPoints2d
    - ClosestBoundaryPoints3d
    - TimeMap
    - LocalThicknessMap3d
    - GeodesicPropagation2d
    - GeodesicMaxima
    - GeodesicMinima
- Image Analysis
- - Image Measurements
  - - BinaryAnalysis
    - Area2d
    - Area3d
    - IntensityIntegral2d
    - IntensityIntegral3d
    - ObjectCount
    - DistanceMean2d
    - EulerNumber2d
    - EulerNumber3d
    - FractalDimension
    - CurvatureIntegrals3d
  - Image Statistics
  - - IntensityExtrema
    - IntensityStatistics
    - IntensityMaskedStatistics
    - IntensityHistogram
    - IntensityBinHistogram
    - AutoThresholdingValue
    - CompareImage
    - CompareValue
    - SimilarityMetricValue
    - SsimValue2d
    - SsimValue3d
    - RegionSimilarity
    - RadialIntensityProfile2d
    - RadialIntensityProfile3d
    - CylindricalIntensityProfile3d
    - RadialAutocorrelationProfile
    - Cooccurrence2d
    - MeasureGaussianNoise
    - LocalMaxima2d
    - LocalMaxima3d
    - PeakExtractor
    - LocalDensityMap2d
    - LocalDensityMap3d
    - SegmentationMetrics
  - Individual Measurements
  - - VolumeFractionByLabel
    - LabelCountByRegion
    - VolumeFractionByRegion
    - LabelAnalysis
    - LabelFiltering
    - LabelFilteringAnalysis
    - FilterAnalysis
    - MeasurementToImage
    - FilterByMeasurement
    - SieveLabeling
  - Moments And Orientations
  - - MomentsOfInertia2d
    - MomentsOfInertia3d
    - InertiaMoment2d
    - Eccentricity2d
    - OrientationMapFourier3d
    - OrientationMatchingFourier3d
  - Morphometry
  - - ObjectVolume
    - TotalImageVolume
    - ObjectBoundaryArea
    - TotalImageBoundaryArea
    - AverageObjectAreaPerSlice3d
    - AverageObjectCountPerSlice3d
    - ObjectImageRatio
    - ObjectSpecificSurface
    - ObjectSurfaceDensity
    - PorosityPercentage3d
    - FragmentationIndex
    - StructureModelIndex3d
    - AverageObjectThickness3d
    - AverageSpaceThickness3d
    - ObjectLinearDensity3d
    - DegreeOfAnisotropy
  - Propagation
  - - AxisPropagationBinary3d
    - AxisPropagationBinaryWithSeeds3d
    - AxisPropagationLabel3d
    - AxisPropagationLabelWithSeeds3d
    - AxisPropagationDistance3d
    - EstimateShortestPath3d
    - PercolationThreshold3d
    - AxisConnectivity3d
    - CentroidPathTortuosity3d
- Machine Learning
- - Classification
  - - AutoSegmentation3Phases
    - AutoIntensityClassification
    - SupervisedTextureClassification2d
    - SupervisedTextureClassification3d
    - TextureClassificationCreate
    - TextureClassificationTrain
    - TextureClassificationApply
  - Deep learning
  - - OnnxPredictionFiltering2d
    - OnnxPredictionFiltering3d
    - OnnxPredictionSegmentation2d
    - OnnxPredictionSegmentation3d
    - OnnxPredictionTwoOutputs2d
    - OnnxPredictionTwoOutputs3d
- Business Application
- - Dental
  - - DentalWallSegmentation3d
    - DentalMeshExtraction3d
    - DentalUnfolding3d
- IO
- - Image Data
  - - ReadVipImage
    - WriteVipImage
  - Algebraic Data
  - - ReadArrayXd
    - ReadArrayXi64
    - WriteArrayXd
    - WriteArrayXi64
  - Model
  - - ReadOnnxModel
- CUDA
- - Geometry And Matching
  - - CudaCrossCorrelation2d
    - CudaTemplateMatching3d
  - Image Filtering
  - - CudaBoxFilter2d
    - CudaMedianFilter2d
    - CudaGaussianFilter3d
    - CudaAdaptiveManifoldNlmFilter
  - Mathematical Morphology
  - - CudaErosion2d
    - CudaDilation2d
    - CudaOpening2d
    - CudaClosing2d
- Utilities
- Initialization
- Processing
- Syntax Check
- Visualization
- Data Object
- Image Data
- Kernels
- - MorphologicalKernel2d
  - MorphologicalKernel3d
  - MorphologicalLut2d
  - MorphologicalLut3d
- Model
- - TextureClassificationModel
  - OnnxModel
- Global Measurements
- - Image Measurements
  - - Area2dMsr
    - Area3dMsr
    - IntensityIntegral2dMsr
    - IntensityIntegral3dMsr
    - ObjectCountMsr
    - DistanceMeanMsr
    - Euler2dMsr
    - Euler3dMsr
    - FractalMsr
    - CurvatureIntegralsMsr
  - Image Statistics
  - - IntensityExtremaMsr
    - StatisticsMsr
    - IntensityHistogramMsr
    - IntensityBinHistogramMsr
    - CompareMsr
    - SimilarityMetricValueMsr
    - SsimValueMsr
    - RegionSimilarityMsr
    - SegmentationMetricsObjectMsr
    - SegmentationMetricsImageMsr
    - CylindricalIntensityProfileMsr
    - RadialIntensityProfileMsr
    - CorrelationMsr
    - CoocurrrenceMsr
    - GaussianNoiseMsr
    - LocalMaximaMsr
    - PeakExtractorMsr
  - Individual Measurements
  - - VolumeFractionByLabelMsr
    - LabelCountByRegionMsr
    - VolumeFractionByRegionMsr
  - Moments And Orientations
  - - MomentsOfInertia2dMsr
    - MomentsOfInertia3dMsr
    - MeanInertiaMomentMsr
    - Eccentricity2dMsr
    - LocalOrientation3dMsr
  - Morphometry
  - - ObjectVolumeMsr
    - ImageVolumeMsr
    - ObjectBoundaryAreaMsr
    - ImageBoundaryAreaMsr
    - AverageObjectAreaPerSliceMsr
    - AverageObjectCountPerSliceMsr
    - ObjectImageRatioMsr
    - ObjectSpecificSurfaceMsr
    - ObjectSurfaceDensityMsr
    - PorosityPercentageMsr
    - FragmentationMsr
    - StructureModelIndexMsr
    - AverageObjectThicknessMsr
    - AverageSpaceThicknessMsr
    - ObjectLinearDensityMsr
    - AnisotropyDegreeMsr
  - Propagation
  - - AxisPropagationBinary3dMsr
    - AxisPropagationLabel3dMsr
    - AxisPropagationDistance3dMsr
    - PercolationThreshold3dMsr
    - CentroidTortuosity3dMsr
  - Geometry And Matching
  - - CrossCorrelation2dMsr
  - Edge Detection
  - - CannyEdgeDetectorMsr
  - Image Segmentation
  - - AutoThresholdingMsr
    - AutoSegmentation3PhasesMsr
  - Mathematical Morphology
  - - ApplyMorphologicalLutMsr
- Analysis Measurements
- - AnalysisMsr
  - Measurement
  - Native Measurements
  - - Geometry
    - Feret
    - Intensity
    - Histogram
    - Inertia
    - Locate
    - Segment
    - Cooccurrence
  - CustomMeasurement
  - MeasurementAttributes
  - - Quantile
    - Histogram
    - Feret2d
    - Feret3d
    - NeighborCount
    - Cooccurrence
    - Breadth3d
  - MeasurementGroup
- Measurement Information
- - FieldInformation
  - CustomMeasurementInfo
- CUDA
- - CudaContext
- User Guide
- First Steps
- - Hello ImageDev
  - Initialize ImageDev
- Image Management
- - Create 2D Image
  - Create 3D Image
  - Data Transfer
- Standard Processing
- - Denoising
  - Thresholding
- Image Analysis
- - Global Analysis
  - Label Analysis
  - Measurement Browsing
  - Measurement Group
  - Custom Analysis
- Advanced Processing
- - Algorithm Tracking
- Typical Use Cases
- - Particle Analysis
  - Pore Analysis

# Labeling3d

Assigns a same label to each connected component voxel set of a three-dimensional binary or label image.
Access to parameter description
The connected-component labeling algorithm scans the input 3D image from its first to the its XY slice, each slice from its first to its last row along the y-axis, and from its first to its last column along the x-axis. With a standard visualization of a 2D image considering the image origin in the top left corner and the y-axis down, this algorithm scans each XY slice of the input image from top to bottom and left to right.
A connected component refers here to a set of voxels with a same value that are connected or contiguous to each other. They form a region or object within the image. The connectivity between voxels is determined by 6-connectivity, 18-connectivity, or 26-connectivity and can be defined by the neighborhood parameter.
Each pixel of the same connected component (or object) takes the same value, each object is assigned to a different value, starting from value 1. The assigned gray level (or label) depends on the location of the object in the image. The maximum gray level value gives the total number of objects in the original binary or label image, which means that all objects have consecutive indices.

Figure 1. 3D connected-component labeling: (left) the binary input image, (right) label assignation
A label image pixel may be represented by 8, 16, or 32 bits.
By default, the output image type is defined by the labelType parameter. If the number of labels exceeds its capacity, then the output image is automatically converted to the upper type to be able to manage the number of labels. The processing is then restarted from the beginning to produce the result in the selected new data type. To optimize the computation, it is important to select a relevant type for the output. Selecting an 8-bit type for an image containing more than 65535 objects will produce the expected result, but will compute it in much more time than by selecting a 32-bit output type directly. On the contrary, selecting a 32-bit type for an image containing fewer than 256 objects will produce the result in nearly optimal time but will use much more memory than necessary.
See also

- Thresholding
- ReorderLabels
- LabelAnalysis
- Labeling2d

See related example

- PoreAnalysis

##
Function Syntax

This function returns outputLabelImage.

    // Function prototype
    std::shared_ptr< iolink::ImageView >
    labeling3d( std::shared_ptr< iolink::ImageView > inputObjectImage,
                Labeling3d::LabelType labelType,
                Labeling3d::Neighborhood neighborhood,
                std::shared_ptr< iolink::ImageView > outputLabelImage = nullptr );

This function returns outputLabelImage.

    // Function prototype.
    labeling_3d(input_object_image: idt.ImageType,
                label_type: Labeling3d.LabelType = Labeling3d.LabelType.LABEL_16_BIT,
                neighborhood: Labeling3d.Neighborhood = Labeling3d.Neighborhood.CONNECTIVITY_26,
                output_label_image: idt.ImageType = None) -> idt.ImageType

This function returns outputLabelImage.

    // Function prototype.
    public static IOLink.ImageView
    Labeling3d( IOLink.ImageView inputObjectImage,
                Labeling3d.LabelType labelType = ImageDev.Labeling3d.LabelType.LABEL_16_BIT,
                Labeling3d.Neighborhood neighborhood = ImageDev.Labeling3d.Neighborhood.CONNECTIVITY_26,
                IOLink.ImageView outputLabelImage = null );

##
Class Syntax

    // Command constructor.
    Labeling3d();

    /// Gets the inputObjectImage parameter.
    /// The input binary or label image.
    std::shared_ptr< iolink::ImageView > inputObjectImage() const;
    /// Sets the inputObjectImage parameter.
    /// The input binary or label image.
    void setInputObjectImage( std::shared_ptr< iolink::ImageView > inputObjectImage );

    /// Gets the labelType parameter.
    /// The minimum output data type. Automatically changed if not sufficient to encode all labels.
    Labeling3d::LabelType labelType() const;
    /// Sets the labelType parameter.
    /// The minimum output data type. Automatically changed if not sufficient to encode all labels.
    void setLabelType( const Labeling3d::LabelType& labelType );

    /// Gets the neighborhood parameter.
    /// The 3D neighborhood configuration defining the connected components.
    Labeling3d::Neighborhood neighborhood() const;
    /// Sets the neighborhood parameter.
    /// The 3D neighborhood configuration defining the connected components.
    void setNeighborhood( const Labeling3d::Neighborhood& neighborhood );

    /// Gets the outputLabelImage parameter.
    /// The output label image. Its dimensions are forced to the same values as the input image. Its type depends on the number of objects and the labelType parameter.
    std::shared_ptr< iolink::ImageView > outputLabelImage() const;
    /// Sets the outputLabelImage parameter.
    /// The output label image. Its dimensions are forced to the same values as the input image. Its type depends on the number of objects and the labelType parameter.
    void setOutputLabelImage( std::shared_ptr< iolink::ImageView > outputLabelImage );

    // Method to launch the command.
    void execute();

    # Property of the inputObjectImage parameter.
    Labeling3d.input_object_image
    # Property of the labelType parameter.
    Labeling3d.label_type
    # Property of the neighborhood parameter.
    Labeling3d.neighborhood
    # Property of the outputLabelImage parameter.
    Labeling3d.output_label_image

    // Method to launch the command.
    execute()

    // Command constructor.
    Labeling3d()

    // Property of the inputObjectImage parameter.
    Labeling3d.inputObjectImage
    // Property of the labelType parameter.
    Labeling3d.labelType
    // Property of the neighborhood parameter.
    Labeling3d.neighborhood
    // Property of the outputLabelImage parameter.
    Labeling3d.outputLabelImage

    // Method to launch the command.
    Execute()

## Parameters

Parameter Name | Description | Type | Supported Values | Default Value
--- | --- | --- | --- | ---
| inputObjectImage | The input binary or label image. | Image | Binary or Label | nullptr
| labelType | The minimum output data type. Automatically changed if not sufficient to encode all labels.
LABEL_8_BIT | The minimum output data type is 8-bit per pixel.
LABEL_16_BIT | The minimum output data type is 16-bit per pixel.
LABEL_32_BIT | The minimum output data type is 32-bit per pixel.
| Enumeration |  | LABEL_16_BIT
| neighborhood | The 3D neighborhood configuration defining the connected components.
CONNECTIVITY_6 | Connected components are defined by a 6-neighbor connectivity. The connectivity pattern is composed of voxels sharing a common face with the voxel of interest.
CONNECTIVITY_18 | Connected components are defined by a 18-neighbor connectivity. The connectivity pattern is composed of voxels sharing a common edge with the voxel of interest.
CONNECTIVITY_26 | Connected components are defined by a 26-neighbor connectivity. The connectivity pattern is a full cube.
| Enumeration |  | CONNECTIVITY_26
| outputLabelImage | The output label image. Its dimensions are forced to the same values as the input image. Its type depends on the number of objects and the labelType parameter. | Image |  | nullptr

Parameter Name | Description | Type | Supported Values | Default Value
--- | --- | --- | --- | ---
| input_object_image | The input binary or label image. | image | Binary or Label | None
| label_type | The minimum output data type. Automatically changed if not sufficient to encode all labels.
LABEL_8_BIT | The minimum output data type is 8-bit per pixel.
LABEL_16_BIT | The minimum output data type is 16-bit per pixel.
LABEL_32_BIT | The minimum output data type is 32-bit per pixel.
| enumeration |  | LABEL_16_BIT
| neighborhood | The 3D neighborhood configuration defining the connected components.
CONNECTIVITY_6 | Connected components are defined by a 6-neighbor connectivity. The connectivity pattern is composed of voxels sharing a common face with the voxel of interest.
CONNECTIVITY_18 | Connected components are defined by a 18-neighbor connectivity. The connectivity pattern is composed of voxels sharing a common edge with the voxel of interest.
CONNECTIVITY_26 | Connected components are defined by a 26-neighbor connectivity. The connectivity pattern is a full cube.
| enumeration |  | CONNECTIVITY_26
| output_label_image | The output label image. Its dimensions are forced to the same values as the input image. Its type depends on the number of objects and the labelType parameter. | image |  | None

Parameter Name | Description | Type | Supported Values | Default Value
--- | --- | --- | --- | ---
| inputObjectImage | The input binary or label image. | Image | Binary or Label | null
| labelType | The minimum output data type. Automatically changed if not sufficient to encode all labels.
LABEL_8_BIT | The minimum output data type is 8-bit per pixel.
LABEL_16_BIT | The minimum output data type is 16-bit per pixel.
LABEL_32_BIT | The minimum output data type is 32-bit per pixel.
| Enumeration |  | LABEL_16_BIT
| neighborhood | The 3D neighborhood configuration defining the connected components.
CONNECTIVITY_6 | Connected components are defined by a 6-neighbor connectivity. The connectivity pattern is composed of voxels sharing a common face with the voxel of interest.
CONNECTIVITY_18 | Connected components are defined by a 18-neighbor connectivity. The connectivity pattern is composed of voxels sharing a common edge with the voxel of interest.
CONNECTIVITY_26 | Connected components are defined by a 26-neighbor connectivity. The connectivity pattern is a full cube.
| Enumeration |  | CONNECTIVITY_26
| outputLabelImage | The output label image. Its dimensions are forced to the same values as the input image. Its type depends on the number of objects and the labelType parameter. | Image |  | null

## Object Examples

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

    Labeling3d labeling3dAlgo;
    labeling3dAlgo.setInputObjectImage( foam_sep );
    labeling3dAlgo.setLabelType( Labeling3d::LabelType::LABEL_8_BIT );
    labeling3dAlgo.setNeighborhood( Labeling3d::Neighborhood::CONNECTIVITY_26 );
    labeling3dAlgo.execute();

    std::cout << "outputLabelImage:" << labeling3dAlgo.outputLabelImage()->toString();

    foam_sep = imagedev.read_vip_image(imagedev_data.get_image_path("foam_sep.vip"))

    labeling_3d_algo = imagedev.Labeling3d()
    labeling_3d_algo.input_object_image = foam_sep
    labeling_3d_algo.label_type = imagedev.Labeling3d.LABEL_8_BIT
    labeling_3d_algo.neighborhood = imagedev.Labeling3d.CONNECTIVITY_26
    labeling_3d_algo.execute()

    print("output_label_image:", str(labeling_3d_algo.output_label_image))

    ImageView foam_sep = Data.ReadVipImage( @"Data/images/foam_sep.vip" );

    Labeling3d labeling3dAlgo = new Labeling3d
    {
        inputObjectImage = foam_sep,
        labelType = Labeling3d.LabelType.LABEL_8_BIT,
        neighborhood = Labeling3d.Neighborhood.CONNECTIVITY_26
    };
    labeling3dAlgo.Execute();

    Console.WriteLine( "outputLabelImage:" + labeling3dAlgo.outputLabelImage.ToString() );

## Function Examples

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

    auto result = labeling3d( foam_sep, Labeling3d::LabelType::LABEL_8_BIT, Labeling3d::Neighborhood::CONNECTIVITY_26 );

    std::cout << "outputLabelImage:" << result->toString();

    foam_sep = imagedev.read_vip_image(imagedev_data.get_image_path("foam_sep.vip"))

    result = imagedev.labeling_3d(foam_sep, imagedev.Labeling3d.LABEL_8_BIT, imagedev.Labeling3d.CONNECTIVITY_26)

    print("output_label_image:", str(result))

    ImageView foam_sep = Data.ReadVipImage( @"Data/images/foam_sep.vip" );

    IOLink.ImageView result = Processing.Labeling3d( foam_sep, Labeling3d.LabelType.LABEL_8_BIT, Labeling3d.Neighborhood.CONNECTIVITY_26 );

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

© 2025 Thermo Fisher Scientific Inc. All rights reserved.