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

# ClosestBoundaryPoints3d

Computes the Chamfer distance map of the background of a three-dimensional image and the coordinates of the associated boundary points.
Access to parameter description
This algorithm is like the DistanceMap3d algorithm, applied on the background of the input image, and indicates the distance to the closest object boundary point.
It also stores the X, Y, and Z coordinates of the corresponding point in three additional output images.
Note: This algorithm does not take into account the input image calibration. The output values are systematically indicating distance in voxel units.
See also

- DistanceMap3d
- GeodesicDistanceMap
- ClosestBoundaryPoints2d

##
Function Syntax

This function returns a ClosestBoundaryPoints3dOutput structure containing outputMapImage, outputImageX, outputImageY and outputImageZ.

    // Output structure of the closestBoundaryPoints3d function.
    struct ClosestBoundaryPoints3dOutput
    {
        /// The output background distance map image. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer.
        std::shared_ptr< iolink::ImageView > outputMapImage;
        /// The X coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer.
        std::shared_ptr< iolink::ImageView > outputImageX;
        /// The Y coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer.
        std::shared_ptr< iolink::ImageView > outputImageY;
        /// The Z coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer.
        std::shared_ptr< iolink::ImageView > outputImageZ;
    };

    // Function prototype
    ClosestBoundaryPoints3dOutput
    closestBoundaryPoints3d( std::shared_ptr< iolink::ImageView > inputBinaryImage,
                             std::shared_ptr< iolink::ImageView > outputMapImage = nullptr,
                             std::shared_ptr< iolink::ImageView > outputImageX = nullptr,
                             std::shared_ptr< iolink::ImageView > outputImageY = nullptr,
                             std::shared_ptr< iolink::ImageView > outputImageZ = nullptr );

This function returns a tuple containing output_map_image, output_image_x, output_image_y and output_image_z.

    // Function prototype.
    closest_boundary_points_3d(input_binary_image: idt.ImageType,
                               output_map_image: idt.ImageType = None,
                               output_image_x: idt.ImageType = None,
                               output_image_y: idt.ImageType = None,
                               output_image_z: idt.ImageType = None) -> Tuple[idt.ImageType, idt.ImageType, idt.ImageType, idt.ImageType]

This function returns a ClosestBoundaryPoints3dOutput structure containing outputMapImage, outputImageX, outputImageY and outputImageZ.

    /// Output structure of the ClosestBoundaryPoints3d function.
    public struct ClosestBoundaryPoints3dOutput
    {
        ///
        /// The output background distance map image. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer.
        ///
        public IOLink.ImageView outputMapImage;
        ///
        /// The X coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer.
        ///
        public IOLink.ImageView outputImageX;
        ///
        /// The Y coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer.
        ///
        public IOLink.ImageView outputImageY;
        ///
        /// The Z coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer.
        ///
        public IOLink.ImageView outputImageZ;
    };

    // Function prototype.
    public static ClosestBoundaryPoints3dOutput
    ClosestBoundaryPoints3d( IOLink.ImageView inputBinaryImage,
                             IOLink.ImageView outputMapImage = null,
                             IOLink.ImageView outputImageX = null,
                             IOLink.ImageView outputImageY = null,
                             IOLink.ImageView outputImageZ = null );

##
Class Syntax

    // Command constructor.
    ClosestBoundaryPoints3d();

    /// Gets the inputBinaryImage parameter.
    /// The binary input image.
    std::shared_ptr< iolink::ImageView > inputBinaryImage() const;
    /// Sets the inputBinaryImage parameter.
    /// The binary input image.
    void setInputBinaryImage( std::shared_ptr< iolink::ImageView > inputBinaryImage );

    /// Gets the outputMapImage parameter.
    /// The output background distance map image. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer.
    std::shared_ptr< iolink::ImageView > outputMapImage() const;
    /// Sets the outputMapImage parameter.
    /// The output background distance map image. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer.
    void setOutputMapImage( std::shared_ptr< iolink::ImageView > outputMapImage );

    /// Gets the outputImageX parameter.
    /// The X coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer.
    std::shared_ptr< iolink::ImageView > outputImageX() const;
    /// Sets the outputImageX parameter.
    /// The X coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer.
    void setOutputImageX( std::shared_ptr< iolink::ImageView > outputImageX );

    /// Gets the outputImageY parameter.
    /// The Y coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer.
    std::shared_ptr< iolink::ImageView > outputImageY() const;
    /// Sets the outputImageY parameter.
    /// The Y coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer.
    void setOutputImageY( std::shared_ptr< iolink::ImageView > outputImageY );

    /// Gets the outputImageZ parameter.
    /// The Z coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer.
    std::shared_ptr< iolink::ImageView > outputImageZ() const;
    /// Sets the outputImageZ parameter.
    /// The Z coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer.
    void setOutputImageZ( std::shared_ptr< iolink::ImageView > outputImageZ );

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

    # Property of the inputBinaryImage parameter.
    ClosestBoundaryPoints3d.input_binary_image
    # Property of the outputMapImage parameter.
    ClosestBoundaryPoints3d.output_map_image
    # Property of the outputImageX parameter.
    ClosestBoundaryPoints3d.output_image_x
    # Property of the outputImageY parameter.
    ClosestBoundaryPoints3d.output_image_y
    # Property of the outputImageZ parameter.
    ClosestBoundaryPoints3d.output_image_z

    // Method to launch the command.
    execute()

    // Command constructor.
    ClosestBoundaryPoints3d()

    // Property of the inputBinaryImage parameter.
    ClosestBoundaryPoints3d.inputBinaryImage
    // Property of the outputMapImage parameter.
    ClosestBoundaryPoints3d.outputMapImage
    // Property of the outputImageX parameter.
    ClosestBoundaryPoints3d.outputImageX
    // Property of the outputImageY parameter.
    ClosestBoundaryPoints3d.outputImageY
    // Property of the outputImageZ parameter.
    ClosestBoundaryPoints3d.outputImageZ

    // Method to launch the command.
    Execute()

## Parameters

Parameter Name | Description | Type | Supported Values | Default Value
--- | --- | --- | --- | ---
| inputBinaryImage | The binary input image. | Image | Binary | nullptr
| outputMapImage | The output background distance map image. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer. | Image |  | nullptr
| outputImageX | The X coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer. | Image |  | nullptr
| outputImageY | The Y coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer. | Image |  | nullptr
| outputImageZ | The Z coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer. | Image |  | nullptr

Parameter Name | Description | Type | Supported Values | Default Value
--- | --- | --- | --- | ---
| input_binary_image | The binary input image. | image | Binary | None
| output_map_image | The output background distance map image. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer. | image |  | None
| output_image_x | The X coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer. | image |  | None
| output_image_y | The Y coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer. | image |  | None
| output_image_z | The Z coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer. | image |  | None

Parameter Name | Description | Type | Supported Values | Default Value
--- | --- | --- | --- | ---
| inputBinaryImage | The binary input image. | Image | Binary | null
| outputMapImage | The output background distance map image. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer. | Image |  | null
| outputImageX | The X coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer. | Image |  | null
| outputImageY | The Y coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer. | Image |  | null
| outputImageZ | The Z coordinate image of the closest boundary point, in voxel units. Its dimensions are forced to the same values as the input. Its type is signed 16-bit integer. | Image |  | null

## Object Examples

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

    ClosestBoundaryPoints3d closestBoundaryPoints3dAlgo;
    closestBoundaryPoints3dAlgo.setInputBinaryImage( foam_sep );
    closestBoundaryPoints3dAlgo.execute();

    std::cout << "outputMapImage:" << closestBoundaryPoints3dAlgo.outputMapImage()->toString();
    std::cout << "outputImageX:" << closestBoundaryPoints3dAlgo.outputImageX()->toString();
    std::cout << "outputImageY:" << closestBoundaryPoints3dAlgo.outputImageY()->toString();
    std::cout << "outputImageZ:" << closestBoundaryPoints3dAlgo.outputImageZ()->toString();

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

    closest_boundary_points_3d_algo = imagedev.ClosestBoundaryPoints3d()
    closest_boundary_points_3d_algo.input_binary_image = foam_sep
    closest_boundary_points_3d_algo.execute()

    print("output_map_image:", str(closest_boundary_points_3d_algo.output_map_image))
    print("output_image_x:", str(closest_boundary_points_3d_algo.output_image_x))
    print("output_image_y:", str(closest_boundary_points_3d_algo.output_image_y))
    print("output_image_z:", str(closest_boundary_points_3d_algo.output_image_z))

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

    ClosestBoundaryPoints3d closestBoundaryPoints3dAlgo = new ClosestBoundaryPoints3d
    {
        inputBinaryImage = foam_sep
    };
    closestBoundaryPoints3dAlgo.Execute();

    Console.WriteLine( "outputMapImage:" + closestBoundaryPoints3dAlgo.outputMapImage.ToString() );
    Console.WriteLine( "outputImageX:" + closestBoundaryPoints3dAlgo.outputImageX.ToString() );
    Console.WriteLine( "outputImageY:" + closestBoundaryPoints3dAlgo.outputImageY.ToString() );
    Console.WriteLine( "outputImageZ:" + closestBoundaryPoints3dAlgo.outputImageZ.ToString() );

## Function Examples

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

    auto result = closestBoundaryPoints3d( foam_sep );

    std::cout << "outputMapImage:" << result.outputMapImage->toString();
    std::cout << "outputImageX:" << result.outputImageX->toString();
    std::cout << "outputImageY:" << result.outputImageY->toString();
    std::cout << "outputImageZ:" << result.outputImageZ->toString();

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

    result_output_map_image, result_output_image_x, result_output_image_y, result_output_image_z = imagedev.closest_boundary_points_3d(foam_sep)

    print("output_map_image:", str(result_output_map_image))
    print("output_image_x:", str(result_output_image_x))
    print("output_image_y:", str(result_output_image_y))
    print("output_image_z:", str(result_output_image_z))

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

    Processing.ClosestBoundaryPoints3dOutput result = Processing.ClosestBoundaryPoints3d( foam_sep );

    Console.WriteLine( "outputMapImage:" + result.outputMapImage.ToString() );
    Console.WriteLine( "outputImageX:" + result.outputImageX.ToString() );
    Console.WriteLine( "outputImageY:" + result.outputImageY.ToString() );
    Console.WriteLine( "outputImageZ:" + result.outputImageZ.ToString() );

© 2025 Thermo Fisher Scientific Inc. All rights reserved.