pose_average
— Compute the average of a set of poses.
pose_average
computes the average rotation and translation of the
poses passed in Poses
, and returns this average pose in
AveragePose
.
The poses can be weighted using the parameter Weights
. If an
empty tuple is passed as weight, all poses have the same influence on the
result. Otherwise, a tuple that contains one positive weight per
pose needs to be passed. A higher weight leads to a higher influence of
that pose on the average.
pose_average
supports two modes for averaging the poses, which
can be selected with the parameter Mode
.
'direct' selects a direct computation of the average, where the
translation and rotation are averaged independently from each other.
'iterative' uses the average pose computed by the
'direct' method as initial value for an iterative method, which
computes the local mode of the poses.
The iterative method is slower than the direct method. However, it returns
more accurate poses especially in the presence of outlier poses, as such
outliers are downweighted automatically.
For the iterative method, the relative weight of the translation and the
rotation can be set with the parameters SigmaT
and
SigmaR
, respectively. Both values can be set to 'auto' ,
in which case they are automatically estimated. In this case,
SigmaT
is set to the spread of the translations of the poses, and
SigmaR
is set to a constant value.
Both values describe the expected spread of the translation and the
rotation, and influence the weighting of the poses.
For the direct method, both parameters are ignored.
A measure of the quality of the computed pose is returned in
Quality
.
Quality
contains a tuple with four elements, which describe
the average and maximum deviation of the passed poses from the returned
average pose AveragePose
.
The order of the values is: Root-Mean-Square error of the translation,
Root-Mean-Square error of the rotation, maximum translation and maximum
rotation deviation. The weights passed in Weights
are used in the
Root-Mean-Square errors of translation and rotation, but not for the last
two quality measures.
Poses
(input_control) pose-array →
(integer)
Set of poses of which the average if computed.
Weights
(input_control) number-array →
(real / integer)
Empty tuple, or one weight per pose.
Default value: []
Restriction: Weights > 0 && length(Weights) == 0 || length(Weights) == length(Poses) / 7
Mode
(input_control) string →
(string)
Averaging mode.
Default value: 'iterative'
List of values: 'direct' , 'iterative'
SigmaT
(input_control) number →
(real / integer / string)
Weight of the translation.
Default value: 'auto'
Suggested values: 'auto' , 0.1, 1, 100
SigmaR
(input_control) number →
(real / integer / string)
Weight of the rotation.
Default value: 'auto'
Suggested values: 'auto' , 0.1, 1, 10
AveragePose
(output_control) pose →
(real / integer)
Weighted mean of the poses.
Quality
(output_control) number-array →
(real)
Deviation of the mean from the input poses.
Assertion: length(Quality) == 4
If the parameters are valid, the operator pose_average
returns
2 (H_MSG_TRUE). If necessary, an exception is raised.
read_pose
,
hom_mat3d_to_pose
,
pose_to_hom_mat3d
Foundation