+
+ // Write result
+ if (args_info.error_arg != 0)
+ {
+ std::ofstream error;
+ clitk::openFileForWriting(error, args_info.error_arg);
+
+
+ //imagePoints
+ int nImagePoints = imageLandmarks.size();
+ double imagePoints[3][nImagePoints];
+ double trackerPoints[3][nImagePoints];
+ double imagePointstoTrackerCoordinate[3][nImagePoints];
+ double FRE = 0;
+ double PointEuclideanDistance = 0;
+ double SumofPointsEuclideanDistance = 0;
+
+
+ for(int n= 0; n < imageLandmarks.size(); n++)
+ {
+ for(int j= 0; j < 2; j++)
+ {
+ imagePoints[j][n] = imageLandmarks[n][j];
+ trackerPoints[j][n] = trackerLandmarks[n][j];
+
+
+
+
+// imagePoints[j][n] = trackerLandmarks[n][j];
+// trackerPoints[j][n] = imageLandmarks[n][j];
+ imagePointstoTrackerCoordinate[j][n] = 0;
+
+ }
+ imagePoints[2][n] = 1.0;
+ trackerPoints[2][n] = 1.0;
+ imagePointstoTrackerCoordinate[2][n] = 0;
+ }
+
+
+ //transformation matrix
+ double RigidTransformationImagetoTracker[4][4];
+
+
+ for(int i = 0; i < 2; i++)
+ for(int j = 0; j < 2; j++)
+ RigidTransformationImagetoTracker[i][j] = matrix[i][j];
+
+
+ for(int i = 0; i < 2; i++)
+ RigidTransformationImagetoTracker[i][2] = offset[i];
+
+ RigidTransformationImagetoTracker[2][0] = 0.0;
+ RigidTransformationImagetoTracker[2][1] = 0.0;
+ RigidTransformationImagetoTracker[2][2] = 1.0;
+
+
+ //writing results
+ error << "ImagePoints: CorrespondingTrackerPoints: ImagePointstoTrackerCoordinateSystem: PointsDistanceafterRigidRegistration:" << std::endl;
+
+
+
+
+
+ //Calculate FRE
+
+ for(int n= 0; n < imageLandmarks.size(); n++)
+ {
+
+
+ //Calculate imagePointstoTrackerCoordinate
+ for(int i = 0; i < 3; i++)
+ {
+
+ for(int k = 0; k < 3; k++)
+ {
+ imagePointstoTrackerCoordinate[i][n] = imagePointstoTrackerCoordinate[i][n] + RigidTransformationImagetoTracker[i][k]*imagePoints[k][n];
+
+ }
+
+ }
+
+
+ //writing results
+
+ for(int i = 0; i < 2; i++)
+ error << imagePoints[i][n] << ' ';
+
+ error << " ";
+
+ for(int i = 0; i < 2; i++)
+ error << trackerPoints[i][n] << ' ';
+
+ error << " ";
+
+ for(int i = 0; i < 2; i++)
+ error << imagePointstoTrackerCoordinate[i][n] << ' ';
+
+
+
+ //calculate PointEuclideanDistance
+ PointEuclideanDistance = 0;
+ for(int i=0; i < 2;i++)
+ {
+ PointEuclideanDistance = PointEuclideanDistance + std::pow((trackerPoints[i][n] - imagePointstoTrackerCoordinate[i][n]),2);
+ }
+ PointEuclideanDistance = std::sqrt(PointEuclideanDistance);
+ error << " " << PointEuclideanDistance << " ";
+
+ SumofPointsEuclideanDistance = SumofPointsEuclideanDistance + std::pow(PointEuclideanDistance,2);
+
+
+
+
+
+
+ error << std::endl;
+
+
+
+
+
+ } //end loop via points
+
+ error << std::endl;
+ SumofPointsEuclideanDistance = std::sqrt(SumofPointsEuclideanDistance/nImagePoints);
+ error << "Fiducial Registration Error: " << SumofPointsEuclideanDistance;
+ error.close();
+
+ } //end if (args_info.error_arg != null)
+ } //end Dimension == 2 case