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

# RotationGenerator3d

Computes a list of uniformly distributed three-dimensional rotations on the unit sphere.
Access to parameter description
For an introduction: section 3D Rotations.
This algorithm generates a list of 3D rotations homogeneously distributed around the unit sphere.
The rotations are expressed as proper Euler angles ZXZ contained in an output data frame.
Each line of this output table represents a rotation configuration with its three proper Euler angles presented in three columns, respectively called RZ1, RX2, and RZ3.
By default, the rotations are provided in the 3D rotation group SO(3) and their computation is based on the Super-Fibonacci spirals algorithm. This is particularly relevant when the object to rotate is not symmetric, in order to cover more rotation configurations.
When the object to rotate presents a symmetry axis, like a cylinder or an ellipsoid, it is more relevant to generate only orientations by enabling the orientationOnly option. The computation of these orientations is based on the Fibonacci spirals algorithm. In this way, the generated distribution of orientations is more uniform

(a) | (b) | (c)

Figure 1. Visualization of 8 generated rotations: (a) a 3D image containing a synthetic object,
the initial object and its 8 rotations (b) in SO(3), (c) in orientation mode
References

- M. Alexa. "Super-Fibonacci Spirals: Fast, Low-Discrepancy Sampling of SO(3)". Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)., pp. 8291-8300, 2022.
- J.L. Brown, Jr., "Zeckendorf's theorem and some applications", Fibonacci Quarterly 2, pp. 163-168, 1964.

See also

- Rotate3d
- CudaTemplateMatching3d

##
Function Syntax

This function returns rotationTable.

    // Function prototype
    std::shared_ptr< iolink::DataFrameView >
    rotationGenerator3d( RotationGenerator3d::SamplingMode samplingMode,
                         uint32_t numberOfRotations,
                         double angularSampling,
                         bool orientationOnly,
                         std::shared_ptr< iolink::DataFrameView > rotationTable = nullptr );

This function returns rotationTable.

    // Function prototype.
    rotation_generator_3d(sampling_mode: RotationGenerator3d.SamplingMode = RotationGenerator3d.SamplingMode.NUMBER_OF_ROTATIONS,
                          number_of_rotations: int = 256,
                          angular_sampling: float = 5,
                          orientation_only: bool = False,
                          rotation_table: Union[iolink.DataFrameView, None] = None) -> Union[iolink.DataFrameView, None]

This function returns rotationTable.

    // Function prototype.
    public static IOLink.DataFrameView
    RotationGenerator3d( RotationGenerator3d.SamplingMode samplingMode = ImageDev.RotationGenerator3d.SamplingMode.NUMBER_OF_ROTATIONS,
                         UInt32 numberOfRotations = 256,
                         double angularSampling = 5,
                         bool orientationOnly = false,
                         IOLink.DataFrameView rotationTable = null );

##
Class Syntax

    // Command constructor.
    RotationGenerator3d();

    /// Gets the samplingMode parameter.
    /// The way to define the distribution of rotations to generate.
    RotationGenerator3d::SamplingMode samplingMode() const;
    /// Sets the samplingMode parameter.
    /// The way to define the distribution of rotations to generate.
    void setSamplingMode( const RotationGenerator3d::SamplingMode& samplingMode );

    /// Gets the numberOfRotations parameter.
    /// The number of desired rotations
    uint32_t numberOfRotations() const;
    /// Sets the numberOfRotations parameter.
    /// The number of desired rotations
    void setNumberOfRotations( const uint32_t& numberOfRotations );

    /// Gets the angularSampling parameter.
    /// The pitch angle, in degree, between two neighbor orientations.
    double angularSampling() const;
    /// Sets the angularSampling parameter.
    /// The pitch angle, in degree, between two neighbor orientations.
    void setAngularSampling( const double& angularSampling );

    /// Gets the orientationOnly parameter.
    /// The type of rotations to generate. If equal to true, the output rotations gives a uniform distribution of orientations. Else a uniform distribution of orientations is generated.
    bool orientationOnly() const;
    /// Sets the orientationOnly parameter.
    /// The type of rotations to generate. If equal to true, the output rotations gives a uniform distribution of orientations. Else a uniform distribution of orientations is generated.
    void setOrientationOnly( const bool& orientationOnly );

    /// Gets the rotationTable parameter.
    /// The output DataFrameView containing the rotations
    std::shared_ptr< iolink::DataFrameView > rotationTable() const;
    /// Sets the rotationTable parameter.
    /// The output DataFrameView containing the rotations
    void setRotationTable( const std::shared_ptr< iolink::DataFrameView >& rotationTable );

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

    # Property of the samplingMode parameter.
    RotationGenerator3d.sampling_mode
    # Property of the numberOfRotations parameter.
    RotationGenerator3d.number_of_rotations
    # Property of the angularSampling parameter.
    RotationGenerator3d.angular_sampling
    # Property of the orientationOnly parameter.
    RotationGenerator3d.orientation_only
    # Property of the rotationTable parameter.
    RotationGenerator3d.rotation_table

    // Method to launch the command.
    execute()

    // Command constructor.
    RotationGenerator3d()

    // Property of the samplingMode parameter.
    RotationGenerator3d.samplingMode
    // Property of the numberOfRotations parameter.
    RotationGenerator3d.numberOfRotations
    // Property of the angularSampling parameter.
    RotationGenerator3d.angularSampling
    // Property of the orientationOnly parameter.
    RotationGenerator3d.orientationOnly
    // Property of the rotationTable parameter.
    RotationGenerator3d.rotationTable

    // Method to launch the command.
    Execute()

## Parameters

Parameter Name | Description | Type | Supported Values | Default Value
--- | --- | --- | --- | ---
| numberOfRotations | The number of desired rotations | UInt32 | >=1 | 256
| samplingMode | The way to define the distribution of rotations to generate.
NUMBER_OF_ROTATIONS | The distribution is defined by a number of rotations.
ANGULAR_SAMPLING | The distribution is defined by a pitch angle, in degree, between two neighbor orientations.
| Enumeration |  | NUMBER_OF_ROTATIONS
| angularSampling | The pitch angle, in degree, between two neighbor orientations. | Float64 | [0, 180] | 5
| orientationOnly | The type of rotations to generate. If equal to true, the output rotations gives a uniform distribution of orientations. Else a uniform distribution of orientations is generated. | Bool |  | false
| rotationTable | The output DataFrameView containing the rotations | DataFrameView |  | nullptr

Parameter Name | Description | Type | Supported Values | Default Value
--- | --- | --- | --- | ---
| number_of_rotations | The number of desired rotations | uint32 | >=1 | 256
| sampling_mode | The way to define the distribution of rotations to generate.
NUMBER_OF_ROTATIONS | The distribution is defined by a number of rotations.
ANGULAR_SAMPLING | The distribution is defined by a pitch angle, in degree, between two neighbor orientations.
| enumeration |  | NUMBER_OF_ROTATIONS
| angular_sampling | The pitch angle, in degree, between two neighbor orientations. | float64 | [0, 180] | 5
| orientation_only | The type of rotations to generate. If equal to true, the output rotations gives a uniform distribution of orientations. Else a uniform distribution of orientations is generated. | bool |  | False
| rotation_table | The output DataFrameView containing the rotations | data_frame_view |  | None

Parameter Name | Description | Type | Supported Values | Default Value
--- | --- | --- | --- | ---
| numberOfRotations | The number of desired rotations | UInt32 | >=1 | 256
| samplingMode | The way to define the distribution of rotations to generate.
NUMBER_OF_ROTATIONS | The distribution is defined by a number of rotations.
ANGULAR_SAMPLING | The distribution is defined by a pitch angle, in degree, between two neighbor orientations.
| Enumeration |  | NUMBER_OF_ROTATIONS
| angularSampling | The pitch angle, in degree, between two neighbor orientations. | Float64 | [0, 180] | 5
| orientationOnly | The type of rotations to generate. If equal to true, the output rotations gives a uniform distribution of orientations. Else a uniform distribution of orientations is generated. | Bool |  | false
| rotationTable | The output DataFrameView containing the rotations | DataFrameView |  | null

## Object Examples

    RotationGenerator3d rotationGenerator3dAlgo;
    rotationGenerator3dAlgo.setSamplingMode( RotationGenerator3d::SamplingMode::NUMBER_OF_ROTATIONS );
    rotationGenerator3dAlgo.setNumberOfRotations( 256 );
    rotationGenerator3dAlgo.setAngularSampling( 5 );
    rotationGenerator3dAlgo.setOrientationOnly( false );
    rotationGenerator3dAlgo.execute();

    std::cout << "rotationTable:" << rotationGenerator3dAlgo.rotationTable()->shape();

    rotation_generator_3d_algo = imagedev.RotationGenerator3d()
    rotation_generator_3d_algo.sampling_mode = imagedev.RotationGenerator3d.NUMBER_OF_ROTATIONS
    rotation_generator_3d_algo.number_of_rotations = 256
    rotation_generator_3d_algo.angular_sampling = 5
    rotation_generator_3d_algo.orientation_only = False
    rotation_generator_3d_algo.execute()

    print("rotation_table:", str(rotation_generator_3d_algo.rotation_table))

    RotationGenerator3d rotationGenerator3dAlgo = new RotationGenerator3d
    {
        samplingMode = RotationGenerator3d.SamplingMode.NUMBER_OF_ROTATIONS,
        numberOfRotations = 256,
        angularSampling = 5,
        orientationOnly = false
    };
    rotationGenerator3dAlgo.Execute();

    Console.WriteLine( "rotationTable:" + rotationGenerator3dAlgo.rotationTable.ToString() );

## Function Examples

    auto result = rotationGenerator3d( RotationGenerator3d::SamplingMode::NUMBER_OF_ROTATIONS, 256, 5, false );

    std::cout << "rotationTable:" << result->shape();

    result = imagedev.rotation_generator_3d(imagedev.RotationGenerator3d.NUMBER_OF_ROTATIONS, 256, 5, False)

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

    IOLink.DataFrameView result = Processing.RotationGenerator3d( RotationGenerator3d.SamplingMode.NUMBER_OF_ROTATIONS, 256, 5, false );

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

© 2025 Thermo Fisher Scientific Inc. All rights reserved.