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

# PercolationThreshold3d

Computes the intensity level spread following an axis of propagation in a three-dimensional image.
Access to parameter description
This algorithm determines the maximum intensity that can be "pierced". It can be only applied on grayscale images.
A measurement output object contains information about the propagation, indicating if the volume is pierced and the detected percolation threshold.
The maskAndSeedValues parameter identifies areas of the image in which propagation can be done; therefore, it allows identifying non-porous areas.
Propagation is performed from the seeds, along the user defined axis, through voxels of intensity X verifying the following conditions:

- The voxel is connected (adjacent) to a voxel already 'propagated'.
- X is different from the first maskAndSeedValues value.
- X is greater than or equal to the second maskAndSeedValues value.

The searchRange parameter defines the range inside which the percolation threshold is searched.
See also

- AxisPropagationDistance3d
- AxisPropagationBinary3d
- EstimateShortestPath3d

##
Function Syntax

This function returns outputMeasurement.

    // Function prototype
    PercolationThreshold3dMsr::Ptr
    percolationThreshold3d( std::shared_ptr< iolink::ImageView > inputImage,
                            const iolink::Vector2i32& maskAndSeedValues,
                            const iolink::Vector2i32& searchRange,
                            PercolationThreshold3d::Axis axis,
                            PercolationThreshold3d::Neighborhood neighborhood,
                            PercolationThreshold3dMsr::Ptr outputMeasurement = nullptr );

This function returns outputMeasurement.

    // Function prototype.
    percolation_threshold_3d(input_image: idt.ImageType,
                             mask_and_seed_values: Iterable[int] = [0, 255],
                             search_range: Iterable[int] = [0, 255],
                             axis: PercolationThreshold3d.Axis = PercolationThreshold3d.Axis.X_AXIS,
                             neighborhood: PercolationThreshold3d.Neighborhood = PercolationThreshold3d.Neighborhood.CONNECTIVITY_26,
                             output_measurement: Union[Any, None] = None) -> PercolationThreshold3dMsr

This function returns outputMeasurement.

    // Function prototype.
    public static PercolationThreshold3dMsr
    PercolationThreshold3d( IOLink.ImageView inputImage,
                            int[] maskAndSeedValues = null,
                            int[] searchRange = null,
                            PercolationThreshold3d.Axis axis = ImageDev.PercolationThreshold3d.Axis.X_AXIS,
                            PercolationThreshold3d.Neighborhood neighborhood = ImageDev.PercolationThreshold3d.Neighborhood.CONNECTIVITY_26,
                            PercolationThreshold3dMsr outputMeasurement = null );

##
Class Syntax

    // Command constructor.
    PercolationThreshold3d();

    /// Gets the inputImage parameter.
    /// The input grayscale or color image.
    std::shared_ptr< iolink::ImageView > inputImage() const;
    /// Sets the inputImage parameter.
    /// The input grayscale or color image.
    void setInputImage( std::shared_ptr< iolink::ImageView > inputImage );

    /// Gets the maskAndSeedValues parameter.
    /// The first value is a mask value. Voxels with this intensity value are not infiltrated by the propagation. The second value is the seed value. Voxels with an intensity value lower than this seed value are not infiltrated by the propagation.
    iolink::Vector2i32 maskAndSeedValues() const;
    /// Sets the maskAndSeedValues parameter.
    /// The first value is a mask value. Voxels with this intensity value are not infiltrated by the propagation. The second value is the seed value. Voxels with an intensity value lower than this seed value are not infiltrated by the propagation.
    void setMaskAndSeedValues( const iolink::Vector2i32& maskAndSeedValues );

    /// Gets the searchRange parameter.
    /// The range inside which the percolation threshold is searched.
    iolink::Vector2i32 searchRange() const;
    /// Sets the searchRange parameter.
    /// The range inside which the percolation threshold is searched.
    void setSearchRange( const iolink::Vector2i32& searchRange );

    /// Gets the axis parameter.
    /// The axis along which the propagation is performed.
    PercolationThreshold3d::Axis axis() const;
    /// Sets the axis parameter.
    /// The axis along which the propagation is performed.
    void setAxis( const PercolationThreshold3d::Axis& axis );

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

    /// Gets the outputMeasurement parameter.
    /// The output measurement result.
    PercolationThreshold3dMsr::Ptr outputMeasurement() const;

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

    # Property of the inputImage parameter.
    PercolationThreshold3d.input_image
    # Property of the maskAndSeedValues parameter.
    PercolationThreshold3d.mask_and_seed_values
    # Property of the searchRange parameter.
    PercolationThreshold3d.search_range
    # Property of the axis parameter.
    PercolationThreshold3d.axis
    # Property of the neighborhood parameter.
    PercolationThreshold3d.neighborhood
    # Property of the outputMeasurement parameter.
    PercolationThreshold3d.output_measurement

    // Method to launch the command.
    execute()

    // Command constructor.
    PercolationThreshold3d()

    // Property of the inputImage parameter.
    PercolationThreshold3d.inputImage
    // Property of the maskAndSeedValues parameter.
    PercolationThreshold3d.maskAndSeedValues
    // Property of the searchRange parameter.
    PercolationThreshold3d.searchRange
    // Property of the axis parameter.
    PercolationThreshold3d.axis
    // Property of the neighborhood parameter.
    PercolationThreshold3d.neighborhood
    // Property of the outputMeasurement parameter.
    PercolationThreshold3d.outputMeasurement

    // Method to launch the command.
    Execute()

## Parameters

Parameter Name | Description | Type | Supported Values | Default Value
--- | --- | --- | --- | ---
| inputImage | The input grayscale or color image. | Image | Binary, Label, Grayscale or Multispectral | nullptr
| maskAndSeedValues | The first value is a mask value. Voxels with this intensity value are not infiltrated by the propagation. The second value is the seed value. Voxels with an intensity value lower than this seed value are not infiltrated by the propagation. | Vector2i32 | Any value | {0, 255}
| searchRange | The range inside which the percolation threshold is searched. | Vector2i32 | Any value | {0, 255}
| axis | The axis along which the propagation is performed.
X_AXIS | The propagation is performed along the X axis.
Y_AXIS | The propagation is performed along the Y axis.
Z_AXIS | The propagation is performed along the Z axis.
| Enumeration |  | X_AXIS
| neighborhood | The 3D neighborhood configuration.
CONNECTIVITY_6 | The structuring element is composed of voxels with a common face with the voxel of interest.
CONNECTIVITY_18 | The structuring element is composed of voxels with at least one common edge.
CONNECTIVITY_26 | The structuring element is a full cube.
| Enumeration |  | CONNECTIVITY_26
| outputMeasurement | The output measurement result. | PercolationThreshold3dMsr |  | nullptr

Parameter Name | Description | Type | Supported Values | Default Value
--- | --- | --- | --- | ---
| input_image | The input grayscale or color image. | image | Binary, Label, Grayscale or Multispectral | None
| mask_and_seed_values | The first value is a mask value. Voxels with this intensity value are not infiltrated by the propagation. The second value is the seed value. Voxels with an intensity value lower than this seed value are not infiltrated by the propagation. | vector2i32 | Any value | [0, 255]
| search_range | The range inside which the percolation threshold is searched. | vector2i32 | Any value | [0, 255]
| axis | The axis along which the propagation is performed.
X_AXIS | The propagation is performed along the X axis.
Y_AXIS | The propagation is performed along the Y axis.
Z_AXIS | The propagation is performed along the Z axis.
| enumeration |  | X_AXIS
| neighborhood | The 3D neighborhood configuration.
CONNECTIVITY_6 | The structuring element is composed of voxels with a common face with the voxel of interest.
CONNECTIVITY_18 | The structuring element is composed of voxels with at least one common edge.
CONNECTIVITY_26 | The structuring element is a full cube.
| enumeration |  | CONNECTIVITY_26
| output_measurement | The output measurement result. | PercolationThreshold3dMsr |  | None

Parameter Name | Description | Type | Supported Values | Default Value
--- | --- | --- | --- | ---
| inputImage | The input grayscale or color image. | Image | Binary, Label, Grayscale or Multispectral | null
| maskAndSeedValues | The first value is a mask value. Voxels with this intensity value are not infiltrated by the propagation. The second value is the seed value. Voxels with an intensity value lower than this seed value are not infiltrated by the propagation. | Vector2i32 | Any value | {0, 255}
| searchRange | The range inside which the percolation threshold is searched. | Vector2i32 | Any value | {0, 255}
| axis | The axis along which the propagation is performed.
X_AXIS | The propagation is performed along the X axis.
Y_AXIS | The propagation is performed along the Y axis.
Z_AXIS | The propagation is performed along the Z axis.
| Enumeration |  | X_AXIS
| neighborhood | The 3D neighborhood configuration.
CONNECTIVITY_6 | The structuring element is composed of voxels with a common face with the voxel of interest.
CONNECTIVITY_18 | The structuring element is composed of voxels with at least one common edge.
CONNECTIVITY_26 | The structuring element is a full cube.
| Enumeration |  | CONNECTIVITY_26
| outputMeasurement | The output measurement result. | PercolationThreshold3dMsr |  | null

## Object Examples

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

    PercolationThreshold3d percolationThreshold3dAlgo;
    percolationThreshold3dAlgo.setInputImage( foam );
    percolationThreshold3dAlgo.setMaskAndSeedValues( {0, 255} );
    percolationThreshold3dAlgo.setSearchRange( {0, 255} );
    percolationThreshold3dAlgo.setAxis( PercolationThreshold3d::Axis::X_AXIS );
    percolationThreshold3dAlgo.setNeighborhood( PercolationThreshold3d::Neighborhood::CONNECTIVITY_26 );
    percolationThreshold3dAlgo.execute();

    std::cout << "isVolumePierced: " << percolationThreshold3dAlgo.outputMeasurement()->isVolumePierced( ) ;

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

    percolation_threshold_3d_algo = imagedev.PercolationThreshold3d()
    percolation_threshold_3d_algo.input_image = foam
    percolation_threshold_3d_algo.mask_and_seed_values = [0, 255]
    percolation_threshold_3d_algo.search_range = [0, 255]
    percolation_threshold_3d_algo.axis = imagedev.PercolationThreshold3d.X_AXIS
    percolation_threshold_3d_algo.neighborhood = imagedev.PercolationThreshold3d.CONNECTIVITY_26
    percolation_threshold_3d_algo.execute()

    print("isVolumePierced: ", str(percolation_threshold_3d_algo.output_measurement.is_volume_pierced()))

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

    PercolationThreshold3d percolationThreshold3dAlgo = new PercolationThreshold3d
    {
        inputImage = foam,
        maskAndSeedValues = new int[]{0, 255},
        searchRange = new int[]{0, 255},
        axis = PercolationThreshold3d.Axis.X_AXIS,
        neighborhood = PercolationThreshold3d.Neighborhood.CONNECTIVITY_26
    };
    percolationThreshold3dAlgo.Execute();

    Console.WriteLine( "isVolumePierced: " + percolationThreshold3dAlgo.outputMeasurement.isVolumePierced( ) );

## Function Examples

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

    auto result = percolationThreshold3d( foam, {0, 255}, {0, 255}, PercolationThreshold3d::Axis::X_AXIS, PercolationThreshold3d::Neighborhood::CONNECTIVITY_26 );

    std::cout << "isVolumePierced: " << result->isVolumePierced( ) ;

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

    result = imagedev.percolation_threshold_3d(foam, [0, 255], [0, 255], imagedev.PercolationThreshold3d.X_AXIS, imagedev.PercolationThreshold3d.CONNECTIVITY_26)

    print("isVolumePierced: ", str(result.is_volume_pierced()))

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

    PercolationThreshold3dMsr result = Processing.PercolationThreshold3d( foam, new int[]{0, 255}, new int[]{0, 255}, PercolationThreshold3d.Axis.X_AXIS, PercolationThreshold3d.Neighborhood.CONNECTIVITY_26 );

    Console.WriteLine(  "isVolumePierced: " + result.isVolumePierced( )  );

© 2025 Thermo Fisher Scientific Inc. All rights reserved.