diff --git a/modules/surface_matching/src/ppf_match_3d.cpp b/modules/surface_matching/src/ppf_match_3d.cpp index c5c25e27e8..1c1a24729c 100644 --- a/modules/surface_matching/src/ppf_match_3d.cpp +++ b/modules/surface_matching/src/ppf_match_3d.cpp @@ -366,6 +366,13 @@ void PPF3DDetector::clusterPoses(std::vector& poseList, int numPoses, tAvg *= 1.0 / wSum; qAvg *= 1.0 / wSum; + // normalize quantonion + const double qNorm = cv::norm(qAvg); + if (qNorm > EPS) + { + qAvg *= 1.0 / qNorm; + } + curPoses[0]->updatePoseQuat(qAvg, tAvg); curPoses[0]->numVotes=curCluster->numVotes; @@ -397,6 +404,13 @@ void PPF3DDetector::clusterPoses(std::vector& poseList, int numPoses, tAvg *= 1.0 / curSize; qAvg *= 1.0 / curSize; + // normalize quantonion + const double qNorm = cv::norm(qAvg); + if (qNorm > EPS) + { + qAvg *= 1.0 / qNorm; + } + curPoses[0]->updatePoseQuat(qAvg, tAvg); curPoses[0]->numVotes=curCluster->numVotes;