ImageDev

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

<b> (a)</b>
(a)
<b> (b)</b>
(b)
<b> (c)</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 See also

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

Parameters

Parameter Name Description Type Supported Values Default Value
input
numberOfRotations
The number of desired rotations UInt32 >=1 256
input
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
input
angularSampling
The pitch angle, in degree, between two neighbor orientations. Float64 [0, 180] 5
input
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
output
rotationTable
The output DataFrameView containing the rotations DataFrameView nullptr
Parameter Name Description Type Supported Values Default Value
input
number_of_rotations
The number of desired rotations uint32 >=1 256
input
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
input
angular_sampling
The pitch angle, in degree, between two neighbor orientations. float64 [0, 180] 5
input
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
output
rotation_table
The output DataFrameView containing the rotations data_frame_view None
Parameter Name Description Type Supported Values Default Value
input
numberOfRotations
The number of desired rotations UInt32 >=1 256
input
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
input
angularSampling
The pitch angle, in degree, between two neighbor orientations. Float64 [0, 180] 5
input
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
output
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.