ClassesClassesClassesClasses | | | | Operators

pose_averageT_pose_averagePoseAveragepose_averagePoseAveragePoseAverage (Operator)

Name

pose_averageT_pose_averagePoseAveragepose_averagePoseAveragePoseAverage — Compute the average of a set of poses.

Signature

pose_average( : : Poses, Weights, Mode, SigmaT, SigmaR : AveragePose, Quality)

Herror T_pose_average(const Htuple Poses, const Htuple Weights, const Htuple Mode, const Htuple SigmaT, const Htuple SigmaR, Htuple* AveragePose, Htuple* Quality)

Herror pose_average(const HTuple& Poses, const HTuple& Weights, const HTuple& Mode, const HTuple& SigmaT, const HTuple& SigmaR, HTuple* AveragePose, HTuple* Quality)

void PoseAverage(const HTuple& Poses, const HTuple& Weights, const HTuple& Mode, const HTuple& SigmaT, const HTuple& SigmaR, HTuple* AveragePose, HTuple* Quality)

static HPose HPose::PoseAverage(const HPoseArray& Poses, const HTuple& Weights, const HString& Mode, const HTuple& SigmaT, const HTuple& SigmaR, HTuple* Quality)

static HPose HPose::PoseAverage(const HPoseArray& Poses, const HTuple& Weights, const HString& Mode, double SigmaT, double SigmaR, HTuple* Quality)

static HPose HPose::PoseAverage(const HPoseArray& Poses, const HTuple& Weights, const char* Mode, double SigmaT, double SigmaR, HTuple* Quality)

void HOperatorSetX.PoseAverage(
[in] VARIANT Poses, [in] VARIANT Weights, [in] VARIANT Mode, [in] VARIANT SigmaT, [in] VARIANT SigmaR, [out] VARIANT* AveragePose, [out] VARIANT* Quality)

VARIANT HPoseX.PoseAverage(
[in] VARIANT Poses, [in] VARIANT Weights, [in] BSTR Mode, [in] VARIANT SigmaT, [in] VARIANT SigmaR, [out] VARIANT* Quality)

static void HOperatorSet.PoseAverage(HTuple poses, HTuple weights, HTuple mode, HTuple sigmaT, HTuple sigmaR, out HTuple averagePose, out HTuple quality)

static HPose HPose.PoseAverage(HPose[] poses, HTuple weights, string mode, HTuple sigmaT, HTuple sigmaR, out HTuple quality)

static HPose HPose.PoseAverage(HPose[] poses, HTuple weights, string mode, double sigmaT, double sigmaR, out HTuple quality)

Description

pose_averagepose_averagePoseAveragepose_averagePoseAveragePoseAverage computes the average rotation and translation of the poses passed in PosesPosesPosesPosesPosesposes, and returns this average pose in AveragePoseAveragePoseAveragePoseAveragePoseAveragePoseaveragePose. The poses can be weighted using the parameter WeightsWeightsWeightsWeightsWeightsweights. 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_averagepose_averagePoseAveragepose_averagePoseAveragePoseAverage supports two modes for averaging the poses, which can be selected with the parameter ModeModeModeModeModemode. 'direct'"direct""direct""direct""direct""direct" selects a direct computation of the average, where the translation and rotation are averaged independently from each other. 'iterative'"iterative""iterative""iterative""iterative""iterative" uses the average pose computed by the 'direct'"direct""direct""direct""direct""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 SigmaTSigmaTSigmaTSigmaTSigmaTsigmaT and SigmaRSigmaRSigmaRSigmaRSigmaRsigmaR, respectively. Both values can be set to 'auto'"auto""auto""auto""auto""auto", in which case they are automatically estimated. In this case, SigmaTSigmaTSigmaTSigmaTSigmaTsigmaT is set to the spread of the translations of the poses, and SigmaRSigmaRSigmaRSigmaRSigmaRsigmaR 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 QualityQualityQualityQualityQualityquality. QualityQualityQualityQualityQualityquality contains a tuple with four elements, which describe the average and maximum deviation of the passed poses from the returned average pose AveragePoseAveragePoseAveragePoseAveragePoseAveragePoseaveragePose. 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 WeightsWeightsWeightsWeightsWeightsweights are used in the Root-Mean-Square errors of translation and rotation, but not for the last two quality measures.

Parallelization

Parameters

PosesPosesPosesPosesPosesposes (input_control)  pose-array HPose, HTupleHTupleHTupleHPoseX, VARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Set of poses of which the average if computed.

WeightsWeightsWeightsWeightsWeightsweights (input_control)  number-array HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Empty tuple, or one weight per pose.

Default value: []

Restriction: Weights > 0 && length(Weights) == 0 || length(Weights) == length(Poses) / 7

ModeModeModeModeModemode (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Averaging mode.

Default value: 'iterative' "iterative" "iterative" "iterative" "iterative" "iterative"

List of values: 'direct'"direct""direct""direct""direct""direct", 'iterative'"iterative""iterative""iterative""iterative""iterative"

SigmaTSigmaTSigmaTSigmaTSigmaTsigmaT (input_control)  number HTupleHTupleHTupleVARIANTHtuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*) (double / Hlong / BSTR) (double / Hlong / char*)

Weight of the translation.

Default value: 'auto' "auto" "auto" "auto" "auto" "auto"

Suggested values: 'auto'"auto""auto""auto""auto""auto", 0.1, 1, 100

SigmaRSigmaRSigmaRSigmaRSigmaRsigmaR (input_control)  number HTupleHTupleHTupleVARIANTHtuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*) (double / Hlong / BSTR) (double / Hlong / char*)

Weight of the rotation.

Default value: 'auto' "auto" "auto" "auto" "auto" "auto"

Suggested values: 'auto'"auto""auto""auto""auto""auto", 0.1, 1, 10

AveragePoseAveragePoseAveragePoseAveragePoseAveragePoseaveragePose (output_control)  pose HPose, HTupleHTupleHTupleHPoseX, VARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Weighted mean of the poses.

QualityQualityQualityQualityQualityquality (output_control)  number-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Deviation of the mean from the input poses.

Assertion: length(Quality) == 4

Result

If the parameters are valid, the operator pose_averagepose_averagePoseAveragepose_averagePoseAveragePoseAverage returns 2 (H_MSG_TRUE). If necessary, an exception is raised.

Possible Predecessors

read_poseread_poseReadPoseread_poseReadPoseReadPose, hom_mat3d_to_posehom_mat3d_to_poseHomMat3dToPosehom_mat3d_to_poseHomMat3dToPoseHomMat3dToPose

See also

read_poseread_poseReadPoseread_poseReadPoseReadPose, hom_mat3d_to_posehom_mat3d_to_poseHomMat3dToPosehom_mat3d_to_poseHomMat3dToPoseHomMat3dToPose, pose_to_hom_mat3dpose_to_hom_mat3dPoseToHomMat3dpose_to_hom_mat3dPoseToHomMat3dPoseToHomMat3d

Module

Foundation


ClassesClassesClassesClasses | | | | Operators