@@ -293,7 +293,7 @@ static hashtable_int* getHashtable(int* data, size_t length, int numMaxElement)
293
293
}
294
294
295
295
// source point clouds are assumed to contain their normals
296
- int ICP::registerModelToScene (const Mat& srcPC, const Mat& dstPC, double & residual, double pose[ 16 ] )
296
+ int ICP::registerModelToScene (const Mat& srcPC, const Mat& dstPC, double & residual, Matx44d& pose)
297
297
{
298
298
int n = srcPC.rows ;
299
299
@@ -320,7 +320,7 @@ int ICP::registerModelToScene(const Mat& srcPC, const Mat& dstPC, double& residu
320
320
Mat dstPC0 = dstTemp;
321
321
322
322
// initialize pose
323
- matrixIdentity (4 , pose);
323
+ matrixIdentity (4 , pose. val );
324
324
325
325
void * flann = indexPCFlann (dstPC0);
326
326
Mat M = Mat::eye (4 ,4 ,CV_64F);
@@ -339,7 +339,7 @@ int ICP::registerModelToScene(const Mat& srcPC, const Mat& dstPC, double& residu
339
339
const int MaxIterationsPyr = cvRound ((double )m_maxIterations/(level+1 ));
340
340
341
341
// Obtain the sampled point clouds for this level: Also rotates the normals
342
- Mat srcPCT = transformPCPose (srcPC0, pose);
342
+ Mat srcPCT = transformPCPose (srcPC0, pose. val );
343
343
344
344
const int sampleStep = cvRound ((double )n/(double )numSamples);
345
345
std::vector<int > srcSampleInd;
@@ -500,11 +500,11 @@ int ICP::registerModelToScene(const Mat& srcPC, const Mat& dstPC, double& residu
500
500
}
501
501
502
502
double TempPose[16 ];
503
- matrixProduct44 (PoseX, pose, TempPose);
503
+ matrixProduct44 (PoseX, pose. val , TempPose);
504
504
505
505
// no need to copy the last 4 rows
506
506
for (int c=0 ; c<12 ; c++)
507
- pose[c] = TempPose[c];
507
+ pose. val [c] = TempPose[c];
508
508
509
509
residual = tempResidual;
510
510
@@ -519,17 +519,17 @@ int ICP::registerModelToScene(const Mat& srcPC, const Mat& dstPC, double& residu
519
519
}
520
520
521
521
// Pose(1:3, 4) = Pose(1:3, 4)./scale;
522
- pose[3 ] = pose[3 ]/scale + meanAvg[0 ];
523
- pose[7 ] = pose[7 ]/scale + meanAvg[1 ];
524
- pose[11 ] = pose[11 ]/scale + meanAvg[2 ];
522
+ pose. val [3 ] = pose. val [3 ]/scale + meanAvg[0 ];
523
+ pose. val [7 ] = pose. val [7 ]/scale + meanAvg[1 ];
524
+ pose. val [11 ] = pose. val [11 ]/scale + meanAvg[2 ];
525
525
526
526
// In MATLAB this would be : Pose(1:3, 4) = Pose(1:3, 4)./scale + meanAvg' - Pose(1:3, 1:3)*meanAvg';
527
527
double Rpose[9 ], Cpose[3 ];
528
- poseToR (pose, Rpose);
528
+ poseToR (pose. val , Rpose);
529
529
matrixProduct331 (Rpose, meanAvg, Cpose);
530
- pose[3 ] -= Cpose[0 ];
531
- pose[7 ] -= Cpose[1 ];
532
- pose[11 ] -= Cpose[2 ];
530
+ pose. val [3 ] -= Cpose[0 ];
531
+ pose. val [7 ] -= Cpose[1 ];
532
+ pose. val [11 ] -= Cpose[2 ];
533
533
534
534
residual = tempResidual;
535
535
@@ -542,10 +542,10 @@ int ICP::registerModelToScene(const Mat& srcPC, const Mat& dstPC, std::vector<Po
542
542
{
543
543
for (size_t i=0 ; i<poses.size (); i++)
544
544
{
545
- double poseICP[ 16 ]={ 0 } ;
545
+ Matx44d poseICP = Matx44d::eye () ;
546
546
Mat srcTemp = transformPCPose (srcPC, poses[i]->pose );
547
547
registerModelToScene (srcTemp, dstPC, poses[i]->residual , poseICP);
548
- poses[i]->appendPose (poseICP);
548
+ poses[i]->appendPose (poseICP. val );
549
549
}
550
550
return 0 ;
551
551
}
0 commit comments