private static double Validate(VectorOfVectorOfPoint3D32F processedObjectPoints, VectorOfVectorOfPointF processedImagePoints, Mat cameraMatrix, Mat distCoeffs, VectorOfPoint3D32F rvecs, VectorOfPoint3D32F tvecs, bool fisheye) { double error = 0; int totalpoints = 0; if (fisheye) { for (int i = 0; i < processedObjectPoints.Size; i++) { VectorOfPoint3D32F objectFramePoints = processedObjectPoints[i]; VectorOfPointF imageFramePoints = processedImagePoints[i]; RotationVector3D tvec = new RotationVector3D(new double[] { tvecs[i].X, tvecs[i].Y, tvecs[i].Z }); RotationVector3D rvec = new RotationVector3D(new double[] { rvecs[i].X, rvecs[i].Y, rvecs[i].Z }); VectorOfPointF newImageFramePoints = new VectorOfPointF(); Fisheye.ProjectPoints(objectFramePoints, newImageFramePoints, rvec, tvec, cameraMatrix, distCoeffs); for (int j = 0; j < newImageFramePoints.Size; j++) { PointF x1 = newImageFramePoints[j]; PointF x2 = imageFramePoints[j]; totalpoints++; error += Math.Pow(x1.X - x2.X, 2) + Math.Pow(x1.Y - x2.Y, 2); } } } return(Math.Sqrt(error / totalpoints)); }