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

# Shearing3d

Applies a three-dimensional shear transformation along a user-defined direction.
Access to parameter description
This algorithm applies a shear transformation which can be seen as the translation of axis-aligned slices along a user-defined direction. It shears the input volume using 2 axes. The first axis (slice axis) is the axis of influence; it, together with the shear angle, determines the shift value. The second axis (shift axis) defines the direction along which the slices are translated.
For instance, if the shift axis is z and the slice axis is y, then the transformation only affects the z-coordinate of an input point, resulting in the newly transformed coordinate z'. $$ z' = z + \tan(\alpha) y $$ Using the matrix notation, the transformation $T(X)$ of a point $X \in R^3$ is given by: $$ T(X) = SX $$ $S$ is a $3 \times 3$ matrix where all diagonal elements are equal to 1, and all non-diagonal elements are equal to 0 except the one at position $(i, j)$, which takes the value $\tan(\alpha)$. Here, $i$ represents the index of the shift axis, $j$ represents the index of the slice axis (0 for x, 1 for y, 2 for z), and $\alpha$ represents the shearing angle.
If the slice axis is y (i=1), and the shift axis z (j=2), then $$ S = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & \tan(\alpha) & 1 \\ \end{bmatrix} $$

Figure 1. : (left) the original image; (right) shearing with y as the shift axis, z as the slice axis (xy slices are shifted), angle is 38°
See also

- ResampleAffine3d
- TranslateImage3d
- Rotate3d

##
Function Syntax

This function returns outputImage.

    // Function prototype
    std::shared_ptr< iolink::ImageView >
    shearing3d( std::shared_ptr< iolink::ImageView > inputImage,
                Shearing3d::Axis sliceAxis,
                Shearing3d::Axis shiftAxis,
                double angle,
                double sliceAxisOrigin,
                Shearing3d::OutputSpacingMode outputSpacingMode,
                const iolink::Vector3d& outputSpacing,
                double paddingValue,
                std::shared_ptr< iolink::ImageView > outputImage = nullptr );

This function returns outputImage.

    // Function prototype.
    shearing_3d(input_image: idt.ImageType,
                slice_axis: Shearing3d.Axis = Shearing3d.Axis.Y_AXIS,
                shift_axis: Shearing3d.Axis = Shearing3d.Axis.Z_AXIS,
                angle: float = 38,
                slice_axis_origin: float = 0,
                output_spacing_mode: Shearing3d.OutputSpacingMode = Shearing3d.OutputSpacingMode.SAME_AS_INPUT,
                output_spacing: Union[Iterable[int], Iterable[float]] = [1, 1, 1],
                padding_value: float = 0,
                output_image: idt.ImageType = None) -> idt.ImageType

This function returns outputImage.

    // Function prototype.
    public static IOLink.ImageView
    Shearing3d( IOLink.ImageView inputImage,
                Shearing3d.Axis sliceAxis = ImageDev.Shearing3d.Axis.Y_AXIS,
                Shearing3d.Axis shiftAxis = ImageDev.Shearing3d.Axis.Z_AXIS,
                double angle = 38,
                double sliceAxisOrigin = 0,
                Shearing3d.OutputSpacingMode outputSpacingMode = ImageDev.Shearing3d.OutputSpacingMode.SAME_AS_INPUT,
                double[] outputSpacing = null,
                double paddingValue = 0,
                IOLink.ImageView outputImage = null );

##
Class Syntax

    // Command constructor.
    Shearing3d();

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

    /// Gets the sliceAxis parameter.
    /// The axis orthogonal to the slices that are shifted. If the z-axis is selected as the slice axis, the xy slices are shifted along the x or y direction.
    Shearing3d::Axis sliceAxis() const;
    /// Sets the sliceAxis parameter.
    /// The axis orthogonal to the slices that are shifted. If the z-axis is selected as the slice axis, the xy slices are shifted along the x or y direction.
    void setSliceAxis( const Shearing3d::Axis& sliceAxis );

    /// Gets the shiftAxis parameter.
    /// The direction toward which the slices are shifted. If the z-axis is selected as the slice axis and the y-axis as the shift axis, the xy-slices are shifted along the y direction.
    Shearing3d::Axis shiftAxis() const;
    /// Sets the shiftAxis parameter.
    /// The direction toward which the slices are shifted. If the z-axis is selected as the slice axis and the y-axis as the shift axis, the xy-slices are shifted along the y direction.
    void setShiftAxis( const Shearing3d::Axis& shiftAxis );

    /// Gets the angle parameter.
    /// The shear angle. It represents the angle in degrees between the initial slice axis and the shifted axis.
    double angle() const;
    /// Sets the angle parameter.
    /// The shear angle. It represents the angle in degrees between the initial slice axis and the shifted axis.
    void setAngle( const double& angle );

    /// Gets the sliceAxisOrigin parameter.
    /// The slice index along the slice axis which defines the origin of the transformation, that is the plane that is not shifted by the shearing transform.
    double sliceAxisOrigin() const;
    /// Sets the sliceAxisOrigin parameter.
    /// The slice index along the slice axis which defines the origin of the transformation, that is the plane that is not shifted by the shearing transform.
    void setSliceAxisOrigin( const double& sliceAxisOrigin );

    /// Gets the outputSpacingMode parameter.
    /// This parameter defines how to calculate the voxel size of the output volume.
    Shearing3d::OutputSpacingMode outputSpacingMode() const;
    /// Sets the outputSpacingMode parameter.
    /// This parameter defines how to calculate the voxel size of the output volume.
    void setOutputSpacingMode( const Shearing3d::OutputSpacingMode& outputSpacingMode );

    /// Gets the outputSpacing parameter.
    /// The voxel size of the output volume along the x, y, and z axes, expressed in the same unit as the input image. It is used only when the outputSpacingMode parameter is set to OTHER. In this case, these values must be chosen carefully, ensuring consistency with those of the input volume and the unit used. A value that is too large may generate an output volume that is empty or consists of few voxels, while a value that is too small may lead to memory overflow. This parameter is not used when the spacing mode is set to SAME_AS_INPUT
    iolink::Vector3d outputSpacing() const;
    /// Sets the outputSpacing parameter.
    /// The voxel size of the output volume along the x, y, and z axes, expressed in the same unit as the input image. It is used only when the outputSpacingMode parameter is set to OTHER. In this case, these values must be chosen carefully, ensuring consistency with those of the input volume and the unit used. A value that is too large may generate an output volume that is empty or consists of few voxels, while a value that is too small may lead to memory overflow. This parameter is not used when the spacing mode is set to SAME_AS_INPUT
    void setOutputSpacing( const iolink::Vector3d& outputSpacing );

    /// Gets the paddingValue parameter.
    /// The background value for output voxels which are outside the input image domain.
    double paddingValue() const;
    /// Sets the paddingValue parameter.
    /// The background value for output voxels which are outside the input image domain.
    void setPaddingValue( const double& paddingValue );

    /// Gets the outputImage parameter.
    /// The output image. Its type is forced to the same values as the input. The slice and shift axes have dimensions greater than the input image and the third axes has identical dimensions.
    std::shared_ptr< iolink::ImageView > outputImage() const;
    /// Sets the outputImage parameter.
    /// The output image. Its type is forced to the same values as the input. The slice and shift axes have dimensions greater than the input image and the third axes has identical dimensions.
    void setOutputImage( std::shared_ptr< iolink::ImageView > outputImage );

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

    # Property of the inputImage parameter.
    Shearing3d.input_image
    # Property of the sliceAxis parameter.
    Shearing3d.slice_axis
    # Property of the shiftAxis parameter.
    Shearing3d.shift_axis
    # Property of the angle parameter.
    Shearing3d.angle
    # Property of the sliceAxisOrigin parameter.
    Shearing3d.slice_axis_origin
    # Property of the outputSpacingMode parameter.
    Shearing3d.output_spacing_mode
    # Property of the outputSpacing parameter.
    Shearing3d.output_spacing
    # Property of the paddingValue parameter.
    Shearing3d.padding_value
    # Property of the outputImage parameter.
    Shearing3d.output_image

    // Method to launch the command.
    execute()

    // Command constructor.
    Shearing3d()

    // Property of the inputImage parameter.
    Shearing3d.inputImage
    // Property of the sliceAxis parameter.
    Shearing3d.sliceAxis
    // Property of the shiftAxis parameter.
    Shearing3d.shiftAxis
    // Property of the angle parameter.
    Shearing3d.angle
    // Property of the sliceAxisOrigin parameter.
    Shearing3d.sliceAxisOrigin
    // Property of the outputSpacingMode parameter.
    Shearing3d.outputSpacingMode
    // Property of the outputSpacing parameter.
    Shearing3d.outputSpacing
    // Property of the paddingValue parameter.
    Shearing3d.paddingValue
    // Property of the outputImage parameter.
    Shearing3d.outputImage

    // Method to launch the command.
    Execute()

## Parameters

Parameter Name | Description | Type | Supported Values | Default Value
--- | --- | --- | --- | ---
| inputImage | The input image. | Image | Binary, Label, Grayscale or Multispectral | nullptr
| sliceAxis | The axis orthogonal to the slices that are shifted. If the z-axis is selected as the slice axis, the xy slices are shifted along the x or y direction.
X_AXIS | The slice axis is the x-axis, the yz slices are shifted.
Y_AXIS | The slice axis is the y-axis, the xz slices are shifted.
Z_AXIS | The slice axis is the z-axis, the xy slices are shifted.
| Enumeration |  | Y_AXIS
| shiftAxis | The direction toward which the slices are shifted. If the z-axis is selected as the slice axis and the y-axis as the shift axis, the xy-slices are shifted along the y direction.
X_AXIS | The slices are shifted along the x-axis.
Y_AXIS | The slices are shifted along the y-axis.
Z_AXIS | The slices are shifted along the z-axis.
| Enumeration |  | Z_AXIS
| sliceAxisOrigin | The slice index along the slice axis which defines the origin of the transformation, that is the plane that is not shifted by the shearing transform. | Float64 | Any value | 0
| angle | The shear angle. It represents the angle in degrees between the initial slice axis and the shifted axis. | Float64 | [-90, 90] | 38
| outputSpacingMode | This parameter defines how to calculate the voxel size of the output volume.
SAME_AS_INPUT | Set the output spacing to the same values as the inputvoxel size. However, the output may differ slightly due to numerical sampling and rounding.
OTHER | Use the outputSpacing parameter to set the output voxel size. It may be useful to change it when the input has an anisotropic voxel size, for instance when the z-axis has a greater spacing than x and y. The output voxel size uses the same unit as the input image.
| Enumeration |  | SAME_AS_INPUT
| outputSpacing | The voxel size of the output volume along the x, y, and z axes, expressed in the same unit as the input image. It is used only when the outputSpacingMode parameter is set to OTHER. In this case, these values must be chosen carefully, ensuring consistency with those of the input volume and the unit used. A value that is too large may generate an output volume that is empty or consists of few voxels, while a value that is too small may lead to memory overflow. This parameter is not used when the spacing mode is set to SAME_AS_INPUT | Vector3d | >0 | {1.f, 1.f, 1.f}
| paddingValue | The background value for output voxels which are outside the input image domain. | Float64 | Any value | 0
| outputImage | The output image. Its type is forced to the same values as the input. The slice and shift axes have dimensions greater than the input image and the third axes has identical dimensions. | Image |  | nullptr

Parameter Name | Description | Type | Supported Values | Default Value
--- | --- | --- | --- | ---
| input_image | The input image. | image | Binary, Label, Grayscale or Multispectral | None
| slice_axis | The axis orthogonal to the slices that are shifted. If the z-axis is selected as the slice axis, the xy slices are shifted along the x or y direction.
X_AXIS | The slice axis is the x-axis, the yz slices are shifted.
Y_AXIS | The slice axis is the y-axis, the xz slices are shifted.
Z_AXIS | The slice axis is the z-axis, the xy slices are shifted.
| enumeration |  | Y_AXIS
| shift_axis | The direction toward which the slices are shifted. If the z-axis is selected as the slice axis and the y-axis as the shift axis, the xy-slices are shifted along the y direction.
X_AXIS | The slices are shifted along the x-axis.
Y_AXIS | The slices are shifted along the y-axis.
Z_AXIS | The slices are shifted along the z-axis.
| enumeration |  | Z_AXIS
| slice_axis_origin | The slice index along the slice axis which defines the origin of the transformation, that is the plane that is not shifted by the shearing transform. | float64 | Any value | 0
| angle | The shear angle. It represents the angle in degrees between the initial slice axis and the shifted axis. | float64 | [-90, 90] | 38
| output_spacing_mode | This parameter defines how to calculate the voxel size of the output volume.
SAME_AS_INPUT | Set the output spacing to the same values as the inputvoxel size. However, the output may differ slightly due to numerical sampling and rounding.
OTHER | Use the outputSpacing parameter to set the output voxel size. It may be useful to change it when the input has an anisotropic voxel size, for instance when the z-axis has a greater spacing than x and y. The output voxel size uses the same unit as the input image.
| enumeration |  | SAME_AS_INPUT
| output_spacing | The voxel size of the output volume along the x, y, and z axes, expressed in the same unit as the input image. It is used only when the outputSpacingMode parameter is set to OTHER. In this case, these values must be chosen carefully, ensuring consistency with those of the input volume and the unit used. A value that is too large may generate an output volume that is empty or consists of few voxels, while a value that is too small may lead to memory overflow. This parameter is not used when the spacing mode is set to SAME_AS_INPUT | vector3d | >0 | [1, 1, 1]
| padding_value | The background value for output voxels which are outside the input image domain. | float64 | Any value | 0
| output_image | The output image. Its type is forced to the same values as the input. The slice and shift axes have dimensions greater than the input image and the third axes has identical dimensions. | image |  | None

Parameter Name | Description | Type | Supported Values | Default Value
--- | --- | --- | --- | ---
| inputImage | The input image. | Image | Binary, Label, Grayscale or Multispectral | null
| sliceAxis | The axis orthogonal to the slices that are shifted. If the z-axis is selected as the slice axis, the xy slices are shifted along the x or y direction.
X_AXIS | The slice axis is the x-axis, the yz slices are shifted.
Y_AXIS | The slice axis is the y-axis, the xz slices are shifted.
Z_AXIS | The slice axis is the z-axis, the xy slices are shifted.
| Enumeration |  | Y_AXIS
| shiftAxis | The direction toward which the slices are shifted. If the z-axis is selected as the slice axis and the y-axis as the shift axis, the xy-slices are shifted along the y direction.
X_AXIS | The slices are shifted along the x-axis.
Y_AXIS | The slices are shifted along the y-axis.
Z_AXIS | The slices are shifted along the z-axis.
| Enumeration |  | Z_AXIS
| sliceAxisOrigin | The slice index along the slice axis which defines the origin of the transformation, that is the plane that is not shifted by the shearing transform. | Float64 | Any value | 0
| angle | The shear angle. It represents the angle in degrees between the initial slice axis and the shifted axis. | Float64 | [-90, 90] | 38
| outputSpacingMode | This parameter defines how to calculate the voxel size of the output volume.
SAME_AS_INPUT | Set the output spacing to the same values as the inputvoxel size. However, the output may differ slightly due to numerical sampling and rounding.
OTHER | Use the outputSpacing parameter to set the output voxel size. It may be useful to change it when the input has an anisotropic voxel size, for instance when the z-axis has a greater spacing than x and y. The output voxel size uses the same unit as the input image.
| Enumeration |  | SAME_AS_INPUT
| outputSpacing | The voxel size of the output volume along the x, y, and z axes, expressed in the same unit as the input image. It is used only when the outputSpacingMode parameter is set to OTHER. In this case, these values must be chosen carefully, ensuring consistency with those of the input volume and the unit used. A value that is too large may generate an output volume that is empty or consists of few voxels, while a value that is too small may lead to memory overflow. This parameter is not used when the spacing mode is set to SAME_AS_INPUT | Vector3d | >0 | {1f, 1f, 1f}
| paddingValue | The background value for output voxels which are outside the input image domain. | Float64 | Any value | 0
| outputImage | The output image. Its type is forced to the same values as the input. The slice and shift axes have dimensions greater than the input image and the third axes has identical dimensions. | Image |  | null

## Object Examples

    auto polystyrene = ioformat::readImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "polystyrene.tif" );

    Shearing3d shearing3dAlgo;
    shearing3dAlgo.setInputImage( polystyrene );
    shearing3dAlgo.setSliceAxis( Shearing3d::Axis::Y_AXIS );
    shearing3dAlgo.setShiftAxis( Shearing3d::Axis::Z_AXIS );
    shearing3dAlgo.setAngle( 38.0 );
    shearing3dAlgo.setSliceAxisOrigin( 0.0 );
    shearing3dAlgo.setOutputSpacingMode( Shearing3d::OutputSpacingMode::SAME_AS_INPUT );
    shearing3dAlgo.setOutputSpacing( {1.0, 1.0, 1.0} );
    shearing3dAlgo.setPaddingValue( 0.0 );
    shearing3dAlgo.execute();

    std::cout << "outputImage:" << shearing3dAlgo.outputImage()->toString();

    polystyrene = ioformat.read_image(imagedev_data.get_image_path("polystyrene.tif"))

    shearing_3d_algo = imagedev.Shearing3d()
    shearing_3d_algo.input_image = polystyrene
    shearing_3d_algo.slice_axis = imagedev.Shearing3d.Y_AXIS
    shearing_3d_algo.shift_axis = imagedev.Shearing3d.Z_AXIS
    shearing_3d_algo.angle = 38.0
    shearing_3d_algo.slice_axis_origin = 0.0
    shearing_3d_algo.output_spacing_mode = imagedev.Shearing3d.SAME_AS_INPUT
    shearing_3d_algo.output_spacing = [1.0, 1.0, 1.0]
    shearing_3d_algo.padding_value = 0.0
    shearing_3d_algo.execute()

    print("output_image:", str(shearing_3d_algo.output_image))

    ImageView polystyrene = ViewIO.ReadImage( @"Data/images/polystyrene.tif" );

    Shearing3d shearing3dAlgo = new Shearing3d
    {
        inputImage = polystyrene,
        sliceAxis = Shearing3d.Axis.Y_AXIS,
        shiftAxis = Shearing3d.Axis.Z_AXIS,
        angle = 38.0,
        sliceAxisOrigin = 0.0,
        outputSpacingMode = Shearing3d.OutputSpacingMode.SAME_AS_INPUT,
        outputSpacing = new double[]{1.0, 1.0, 1.0},
        paddingValue = 0.0
    };
    shearing3dAlgo.Execute();

    Console.WriteLine( "outputImage:" + shearing3dAlgo.outputImage.ToString() );

## Function Examples

    auto polystyrene = ioformat::readImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "polystyrene.tif" );

    auto result = shearing3d( polystyrene, Shearing3d::Axis::Y_AXIS, Shearing3d::Axis::Z_AXIS, 38.0, 0.0, Shearing3d::OutputSpacingMode::SAME_AS_INPUT, {1.0, 1.0, 1.0}, 0.0 );

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

    polystyrene = ioformat.read_image(imagedev_data.get_image_path("polystyrene.tif"))

    result = imagedev.shearing_3d(polystyrene, imagedev.Shearing3d.Y_AXIS, imagedev.Shearing3d.Z_AXIS, 38.0, 0.0, imagedev.Shearing3d.SAME_AS_INPUT, [1.0, 1.0, 1.0], 0.0)

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

    ImageView polystyrene = ViewIO.ReadImage( @"Data/images/polystyrene.tif" );

    IOLink.ImageView result = Processing.Shearing3d( polystyrene, Shearing3d.Axis.Y_AXIS, Shearing3d.Axis.Z_AXIS, 38.0, 0.0, Shearing3d.OutputSpacingMode.SAME_AS_INPUT, new double[]{1.0, 1.0, 1.0}, 0.0 );

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

© 2025 Thermo Fisher Scientific Inc. All rights reserved.