Merge branch 'rmEigen' of http://gitlab.mynt.com/mynteye/mynt-eye-s-sdk into rmEigen
This commit is contained in:
		
						commit
						789a6f4a0e
					
				| @ -139,6 +139,7 @@ if(WITH_CAM_MODELS) | |||||||
|     ${CMAKE_CURRENT_BINARY_DIR}/include |     ${CMAKE_CURRENT_BINARY_DIR}/include | ||||||
|     ${EIGEN_INCLUDE_DIR} |     ${EIGEN_INCLUDE_DIR} | ||||||
|     src/mynteye/api/camera_models |     src/mynteye/api/camera_models | ||||||
|  |     src/mynteye | ||||||
|   ) |   ) | ||||||
| 
 | 
 | ||||||
|   add_library(camera_models STATIC |   add_library(camera_models STATIC | ||||||
|  | |||||||
| @ -104,7 +104,7 @@ void Camera::estimateExtrinsics( | |||||||
|   std::vector<cv::Point2f> Ms(imagePoints.size()); |   std::vector<cv::Point2f> Ms(imagePoints.size()); | ||||||
|   for (size_t i = 0; i < Ms.size(); ++i) { |   for (size_t i = 0; i < Ms.size(); ++i) { | ||||||
|   // Eigen::Vector3d P;
 |   // Eigen::Vector3d P;
 | ||||||
|   ctain::Vectord P(3, 1), p(2, 1); |   models::Vectord P(3, 1), p(2, 1); | ||||||
|   p<< imagePoints.at(i).x << imagePoints.at(i).y; |   p<< imagePoints.at(i).x << imagePoints.at(i).y; | ||||||
| 
 | 
 | ||||||
|   // liftProjective(
 |   // liftProjective(
 | ||||||
| @ -121,8 +121,8 @@ void Camera::estimateExtrinsics( | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| double Camera::reprojectionDist( | double Camera::reprojectionDist( | ||||||
|     const ctain::Vector3d &P1, const ctain::Vector3d &P2) const { |     const models::Vector3d &P1, const models::Vector3d &P2) const { | ||||||
|   ctain::Vector2d p1(2, 1), p2(2, 1); |   models::Vector2d p1(2, 1), p2(2, 1); | ||||||
| 
 | 
 | ||||||
|   spaceToPlane(P1, p1); |   spaceToPlane(P1, p1); | ||||||
|   spaceToPlane(P2, p2); |   spaceToPlane(P2, p2); | ||||||
| @ -170,13 +170,13 @@ double Camera::reprojectionError( | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| double Camera::reprojectionError( | double Camera::reprojectionError( | ||||||
|     const ctain::Vector3d &P, const ctain::Quaterniond &camera_q, |     const models::Vector3d &P, const models::Quaterniond &camera_q, | ||||||
|     const ctain::Vector3d &camera_t, |     const models::Vector3d &camera_t, | ||||||
|     const ctain::Vector2d &observed_p) const { |     const models::Vector2d &observed_p) const { | ||||||
|   ctain::Vector3d P_cam; |   models::Vector3d P_cam; | ||||||
|   P_cam = camera_q.toRotationMatrix() * P + camera_t; |   P_cam = camera_q.toRotationMatrix() * P + camera_t; | ||||||
| 
 | 
 | ||||||
|   ctain::Vector2d p(2, 1), res(2, 1); |   models::Vector2d p(2, 1), res(2, 1); | ||||||
|   spaceToPlane(P_cam, p); |   spaceToPlane(P_cam, p); | ||||||
|   res = p - observed_p; |   res = p - observed_p; | ||||||
|   return res.norm(); |   return res.norm(); | ||||||
| @ -192,24 +192,24 @@ void Camera::projectPoints( | |||||||
|   cv::Mat R0; |   cv::Mat R0; | ||||||
|   cv::Rodrigues(rvec, R0); |   cv::Rodrigues(rvec, R0); | ||||||
| 
 | 
 | ||||||
|   ctain::MatrixXd R(3, 3); |   models::MatrixXd R(3, 3); | ||||||
|   R << R0.at<double>(0, 0) << R0.at<double>(0, 1) << R0.at<double>(0, 2) << |   R << R0.at<double>(0, 0) << R0.at<double>(0, 1) << R0.at<double>(0, 2) << | ||||||
|        R0.at<double>(1, 0) << R0.at<double>(1, 1) << R0.at<double>(1, 2) << |        R0.at<double>(1, 0) << R0.at<double>(1, 1) << R0.at<double>(1, 2) << | ||||||
|        R0.at<double>(2, 0) << R0.at<double>(2, 1) << R0.at<double>(2, 2); |        R0.at<double>(2, 0) << R0.at<double>(2, 1) << R0.at<double>(2, 2); | ||||||
| 
 | 
 | ||||||
|   ctain::Vectord t(3, 1); |   models::Vectord t(3, 1); | ||||||
|   t << tvec.at<double>(0) << tvec.at<double>(1) << tvec.at<double>(2); |   t << tvec.at<double>(0) << tvec.at<double>(1) << tvec.at<double>(2); | ||||||
| 
 | 
 | ||||||
|   for (size_t i = 0; i < objectPoints.size(); ++i) { |   for (size_t i = 0; i < objectPoints.size(); ++i) { | ||||||
|     const cv::Point3f &objectPoint = objectPoints.at(i); |     const cv::Point3f &objectPoint = objectPoints.at(i); | ||||||
| 
 | 
 | ||||||
|     // Rotate and translate
 |     // Rotate and translate
 | ||||||
|     ctain::Vectord P(3, 1); |     models::Vectord P(3, 1); | ||||||
|     P << objectPoint.x << objectPoint.y << objectPoint.z; |     P << objectPoint.x << objectPoint.y << objectPoint.z; | ||||||
| 
 | 
 | ||||||
|     P = R * P + t; |     P = R * P + t; | ||||||
| 
 | 
 | ||||||
|     ctain::Vector2d p(2, 1); |     models::Vector2d p(2, 1); | ||||||
|     spaceToPlane(P, p); |     spaceToPlane(P, p); | ||||||
| 
 | 
 | ||||||
|     imagePoints.push_back(cv::Point2f(p(0), p(1))); |     imagePoints.push_back(cv::Point2f(p(0), p(1))); | ||||||
|  | |||||||
| @ -77,12 +77,12 @@ class Camera { | |||||||
| 
 | 
 | ||||||
|   // Lift points from the image plane to the projective space
 |   // Lift points from the image plane to the projective space
 | ||||||
|   virtual void liftProjective( |   virtual void liftProjective( | ||||||
|       const ctain::Vector2d &p, ctain::Vector3d &P) const = 0;  // NOLINT
 |       const models::Vector2d &p, models::Vector3d &P) const = 0;  // NOLINT
 | ||||||
|   // %output P
 |   // %output P
 | ||||||
| 
 | 
 | ||||||
|   // Projects 3D points to the image plane (Pi function)
 |   // Projects 3D points to the image plane (Pi function)
 | ||||||
|   virtual void spaceToPlane( |   virtual void spaceToPlane( | ||||||
|       const ctain::Vector3d &P, ctain::Vector2d &p) const = 0;  // NOLINT
 |       const models::Vector3d &P, models::Vector2d &p) const = 0;  // NOLINT
 | ||||||
|   // %output p
 |   // %output p
 | ||||||
| 
 | 
 | ||||||
|   // Projects 3D points to the image plane (Pi function)
 |   // Projects 3D points to the image plane (Pi function)
 | ||||||
| @ -114,7 +114,7 @@ class Camera { | |||||||
|    * \return euclidean distance in the plane |    * \return euclidean distance in the plane | ||||||
|    */ |    */ | ||||||
|   double reprojectionDist( |   double reprojectionDist( | ||||||
|       const ctain::Vector3d &P1, const ctain::Vector3d &P2) const; |       const models::Vector3d &P1, const models::Vector3d &P2) const; | ||||||
| 
 | 
 | ||||||
|   double reprojectionError( |   double reprojectionError( | ||||||
|       const std::vector<std::vector<cv::Point3f> > &objectPoints, |       const std::vector<std::vector<cv::Point3f> > &objectPoints, | ||||||
| @ -123,8 +123,8 @@ class Camera { | |||||||
|       cv::OutputArray perViewErrors = cv::noArray()) const; |       cv::OutputArray perViewErrors = cv::noArray()) const; | ||||||
| 
 | 
 | ||||||
|   double reprojectionError( |   double reprojectionError( | ||||||
|       const ctain::Vector3d &P, const ctain::Quaterniond &camera_q, |       const models::Vector3d &P, const models::Quaterniond &camera_q, | ||||||
|       const ctain::Vector3d &camera_t, const ctain::Vector2d &observed_p) const; |       const models::Vector3d &camera_t, const models::Vector2d &observed_p) const; | ||||||
| 
 | 
 | ||||||
|   void projectPoints( |   void projectPoints( | ||||||
|       const std::vector<cv::Point3f> &objectPoints, const cv::Mat &rvec, |       const std::vector<cv::Point3f> &objectPoints, const cv::Mat &rvec, | ||||||
|  | |||||||
| @ -281,8 +281,8 @@ void EquidistantCamera::estimateIntrinsics( | |||||||
|   double f0 = 0.0; |   double f0 = 0.0; | ||||||
|   for (size_t i = 0; i < imagePoints.size(); ++i) { |   for (size_t i = 0; i < imagePoints.size(); ++i) { | ||||||
|     // std::vector<Eigen::Vector2d> center(boardSize.height);
 |     // std::vector<Eigen::Vector2d> center(boardSize.height);
 | ||||||
|     std::vector<ctain::Vector2d> center( |     std::vector<models::Vector2d> center( | ||||||
|         boardSize.height, ctain::Vector2d(2, 1)); |         boardSize.height, models::Vector2d(2, 1)); | ||||||
|     int arrayLength = boardSize.height; |     int arrayLength = boardSize.height; | ||||||
|     double *radius = new double[arrayLength]; |     double *radius = new double[arrayLength]; | ||||||
|     memset(radius, 0, arrayLength * sizeof(double)); |     memset(radius, 0, arrayLength * sizeof(double)); | ||||||
| @ -355,9 +355,9 @@ void EquidistantCamera::estimateIntrinsics( | |||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| void EquidistantCamera::liftProjective( | void EquidistantCamera::liftProjective( | ||||||
|     const ctain::Vector2d &p, ctain::Vector3d &P) const { |     const models::Vector2d &p, models::Vector3d &P) const { | ||||||
|   // Lift points to normalised plane
 |   // Lift points to normalised plane
 | ||||||
|   ctain::Vector2d p_u(2, 1); |   models::Vector2d p_u(2, 1); | ||||||
|   p_u << m_inv_K11 * p(0) + m_inv_K13 << m_inv_K22 * p(1) + m_inv_K23; |   p_u << m_inv_K11 * p(0) + m_inv_K13 << m_inv_K22 * p(1) + m_inv_K23; | ||||||
| 
 | 
 | ||||||
|   // Obtain a projective ray
 |   // Obtain a projective ray
 | ||||||
| @ -377,7 +377,7 @@ void EquidistantCamera::liftProjective( | |||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| void EquidistantCamera::spaceToPlane( | void EquidistantCamera::spaceToPlane( | ||||||
|     const ctain::Vector3d &P, ctain::Vector2d &p) const { |     const models::Vector3d &P, models::Vector2d &p) const { | ||||||
| // double theta = acos(0.5);
 | // double theta = acos(0.5);
 | ||||||
| // double theta = 0.5;
 | // double theta = 0.5;
 | ||||||
| // double phi = 0.5;
 | // double phi = 0.5;
 | ||||||
| @ -391,9 +391,9 @@ void EquidistantCamera::spaceToPlane( | |||||||
| // double phi = ApproxAtan2(P(1), P(0));
 | // double phi = ApproxAtan2(P(1), P(0));
 | ||||||
| 
 | 
 | ||||||
|   double tmp[2] = {cos(phi), sin(phi)}; |   double tmp[2] = {cos(phi), sin(phi)}; | ||||||
|   ctain::Vector2d p_u = r(mParameters.k2(), mParameters.k3(), mParameters.k4(), |   models::Vector2d p_u = r(mParameters.k2(), mParameters.k3(), mParameters.k4(), | ||||||
|                           mParameters.k5(), theta) * |                           mParameters.k5(), theta) * | ||||||
|                         ctain::Vector2d(tmp, 2, 1); |                         models::Vector2d(tmp, 2, 1); | ||||||
| 
 | 
 | ||||||
|   // Apply generalised projection matrix
 |   // Apply generalised projection matrix
 | ||||||
|   p << mParameters.mu() * p_u(0) + mParameters.u0() |   p << mParameters.mu() * p_u(0) + mParameters.u0() | ||||||
| @ -407,14 +407,14 @@ void EquidistantCamera::spaceToPlane( | |||||||
|  * \param p return value, contains the image point coordinates |  * \param p return value, contains the image point coordinates | ||||||
|  */ |  */ | ||||||
| void EquidistantCamera::spaceToPlane( | void EquidistantCamera::spaceToPlane( | ||||||
|     const ctain::Vector3d &P, ctain::Vector2d &p, |     const models::Vector3d &P, models::Vector2d &p, | ||||||
|     ctain::Matrix23d &J) const { |     models::Matrix23d &J) const { | ||||||
|   double theta = acos(P(2) / 3.0); |   double theta = acos(P(2) / 3.0); | ||||||
|   double phi = atan2(P(1), P(0)); |   double phi = atan2(P(1), P(0)); | ||||||
|   double tmp[2] = {cos(phi), sin(phi)}; |   double tmp[2] = {cos(phi), sin(phi)}; | ||||||
|   ctain::Vector2d p_u = r(mParameters.k2(), mParameters.k3(), mParameters.k4(), |   models::Vector2d p_u = r(mParameters.k2(), mParameters.k3(), mParameters.k4(), | ||||||
|                           mParameters.k5(), theta) * |                           mParameters.k5(), theta) * | ||||||
|                         ctain::Vector2d(tmp, 2, 1); |                         models::Vector2d(tmp, 2, 1); | ||||||
| 
 | 
 | ||||||
|   // Apply generalised projection matrix
 |   // Apply generalised projection matrix
 | ||||||
|   p << mParameters.mu() * p_u(0) + mParameters.u0() |   p << mParameters.mu() * p_u(0) + mParameters.u0() | ||||||
| @ -433,14 +433,14 @@ void EquidistantCamera::initUndistortMap( | |||||||
|       double my_u = m_inv_K22 / fScale * v + m_inv_K23 / fScale; |       double my_u = m_inv_K22 / fScale * v + m_inv_K23 / fScale; | ||||||
| 
 | 
 | ||||||
|       double theta, phi; |       double theta, phi; | ||||||
|       ctain::Vector2d tmp(2, 1); |       models::Vector2d tmp(2, 1); | ||||||
|       tmp << mx_u << my_u; |       tmp << mx_u << my_u; | ||||||
|       backprojectSymmetric(tmp, theta, phi); |       backprojectSymmetric(tmp, theta, phi); | ||||||
| 
 | 
 | ||||||
|       ctain::Vector3d P(3, 1); |       models::Vector3d P(3, 1); | ||||||
|       P << sin(theta) * cos(phi) << sin(theta) * sin(phi) << cos(theta); |       P << sin(theta) * cos(phi) << sin(theta) * sin(phi) << cos(theta); | ||||||
| 
 | 
 | ||||||
|       ctain::Vector2d p(2, 1); |       models::Vector2d p(2, 1); | ||||||
|       spaceToPlane(P, p); |       spaceToPlane(P, p); | ||||||
| 
 | 
 | ||||||
|       mapX.at<float>(v, u) = p(0); |       mapX.at<float>(v, u) = p(0); | ||||||
| @ -463,7 +463,7 @@ cv::Mat EquidistantCamera::initUndistortRectifyMap( | |||||||
|   cv::Mat mapX = cv::Mat::zeros(imageSize.height, imageSize.width, CV_32F); |   cv::Mat mapX = cv::Mat::zeros(imageSize.height, imageSize.width, CV_32F); | ||||||
|   cv::Mat mapY = cv::Mat::zeros(imageSize.height, imageSize.width, CV_32F); |   cv::Mat mapY = cv::Mat::zeros(imageSize.height, imageSize.width, CV_32F); | ||||||
| 
 | 
 | ||||||
|   ctain::Matrix3f K_rect(3); |   models::Matrix3f K_rect(3); | ||||||
| 
 | 
 | ||||||
|   if (cx == -1.0f && cy == -1.0f) { |   if (cx == -1.0f && cy == -1.0f) { | ||||||
|     K_rect << fx << 0 << imageSize.width / 2 << |     K_rect << fx << 0 << imageSize.width / 2 << | ||||||
| @ -477,8 +477,8 @@ cv::Mat EquidistantCamera::initUndistortRectifyMap( | |||||||
|     K_rect(1, 1) = mParameters.mv(); |     K_rect(1, 1) = mParameters.mv(); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   ctain::Matrix3f K_rect_inv = K_rect.inverse(); |   models::Matrix3f K_rect_inv = K_rect.inverse(); | ||||||
|   ctain::Matrix3f R(3), R_inv(3); |   models::Matrix3f R(3), R_inv(3); | ||||||
| 
 | 
 | ||||||
|   for (int i = 0; i < 3; ++i) { |   for (int i = 0; i < 3; ++i) { | ||||||
|     for (int j = 0; j < 3; ++j) { |     for (int j = 0; j < 3; ++j) { | ||||||
| @ -489,11 +489,11 @@ cv::Mat EquidistantCamera::initUndistortRectifyMap( | |||||||
| 
 | 
 | ||||||
|   for (int v = 0; v < imageSize.height; ++v) { |   for (int v = 0; v < imageSize.height; ++v) { | ||||||
|     for (int u = 0; u < imageSize.width; ++u) { |     for (int u = 0; u < imageSize.width; ++u) { | ||||||
|       ctain::Vector3f xo(3, 1); |       models::Vector3f xo(3, 1); | ||||||
|       xo << u << v << 1; |       xo << u << v << 1; | ||||||
| 
 | 
 | ||||||
|       ctain::Vector3f uo = R_inv * K_rect_inv * xo; |       models::Vector3f uo = R_inv * K_rect_inv * xo; | ||||||
|       ctain::Vector2d p(2, 1); |       models::Vector2d p(2, 1); | ||||||
|       spaceToPlane(uo.cast<double>(), p); |       spaceToPlane(uo.cast<double>(), p); | ||||||
| 
 | 
 | ||||||
|       mapX.at<float>(v, u) = p(0); |       mapX.at<float>(v, u) = p(0); | ||||||
| @ -580,16 +580,16 @@ void EquidistantCamera::fitOddPoly( | |||||||
|     pows.push_back(i); |     pows.push_back(i); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   ctain::MatrixXd X(x.size(), pows.size()); |   models::MatrixXd X(x.size(), pows.size()); | ||||||
|   ctain::MatrixXd Y(y.size(), 1); |   models::MatrixXd Y(y.size(), 1); | ||||||
|   for (size_t i = 0; i < x.size(); ++i) { |   for (size_t i = 0; i < x.size(); ++i) { | ||||||
|     for (size_t j = 0; j < pows.size(); ++j) { |     for (size_t j = 0; j < pows.size(); ++j) { | ||||||
|       X(i, j) = pow(x.at(i), pows.at(j)); |       X(i, j) = pow(x.at(i), pows.at(j)); | ||||||
|     } |     } | ||||||
|     Y(i, 0) = y.at(i); |     Y(i, 0) = y.at(i); | ||||||
|   } |   } | ||||||
|   ctain::SMatrix<double> Tmp(X.transpose() * X); |   models::SMatrix<double> Tmp(X.transpose() * X); | ||||||
|   ctain::MatrixXd A = Tmp.inverse() * X.transpose() * Y; |   models::MatrixXd A = Tmp.inverse() * X.transpose() * Y; | ||||||
| 
 | 
 | ||||||
|   coeffs.resize(A.rows()); |   coeffs.resize(A.rows()); | ||||||
|   for (int i = 0; i < A.rows(); ++i) { |   for (int i = 0; i < A.rows(); ++i) { | ||||||
| @ -598,7 +598,7 @@ void EquidistantCamera::fitOddPoly( | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void EquidistantCamera::backprojectSymmetric( | void EquidistantCamera::backprojectSymmetric( | ||||||
|     const ctain::Vector2d &p_u, double &theta, double &phi) const { |     const models::Vector2d &p_u, double &theta, double &phi) const { | ||||||
|   double tol = 1e-10; |   double tol = 1e-10; | ||||||
|   double p_u_norm = p_u.norm(); |   double p_u_norm = p_u.norm(); | ||||||
| 
 | 
 | ||||||
| @ -622,7 +622,7 @@ void EquidistantCamera::backprojectSymmetric( | |||||||
|     npow -= 2; |     npow -= 2; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   ctain::MatrixXd coeffs(npow + 1, 1); |   models::MatrixXd coeffs(npow + 1, 1); | ||||||
|   coeffs.setZero(); |   coeffs.setZero(); | ||||||
|   coeffs(0) = -p_u_norm; |   coeffs(0) = -p_u_norm; | ||||||
|   coeffs(1) = 1.0; |   coeffs(1) = 1.0; | ||||||
| @ -645,17 +645,17 @@ void EquidistantCamera::backprojectSymmetric( | |||||||
|   } else { |   } else { | ||||||
|     // Get eigenvalues of companion matrix corresponding to polynomial.
 |     // Get eigenvalues of companion matrix corresponding to polynomial.
 | ||||||
|     // Eigenvalues correspond to roots of polynomial.
 |     // Eigenvalues correspond to roots of polynomial.
 | ||||||
|     ctain::Matrixd A(npow); |     models::Matrixd A(npow); | ||||||
|     A.setZero(); |     A.setZero(); | ||||||
|     A.block(1, 0, npow - 1, npow - 1).setIdentity(); |     A.block(1, 0, npow - 1, npow - 1).setIdentity(); | ||||||
|     A.col(npow - 1) = -coeffs.block(0, 0, npow, 1) / coeffs(npow); |     A.col(npow - 1) = -coeffs.block(0, 0, npow, 1) / coeffs(npow); | ||||||
|     std::cout << std::endl <<"A:" << A; |     std::cout << std::endl <<"A:" << A; | ||||||
| 
 | 
 | ||||||
|     ctain::EigenSolver es(A); |     models::EigenSolver es(A); | ||||||
|     ctain::Matrix<double> eigval(9, 2); |     models::Matrix<double> eigval(9, 2); | ||||||
|     eigval = es.eigenvalues(); |     eigval = es.eigenvalues(); | ||||||
|     // ctain::EigenSolver es(A);
 |     // models::EigenSolver es(A);
 | ||||||
|     // ctain::MatrixXcd eigval(npow, 2);
 |     // models::MatrixXcd eigval(npow, 2);
 | ||||||
|     // eigval = es.eigenvalues();
 |     // eigval = es.eigenvalues();
 | ||||||
|     std::cout << std::endl <<"eigval:" << eigval; |     std::cout << std::endl <<"eigval:" << eigval; | ||||||
|     std::vector<double> thetas; |     std::vector<double> thetas; | ||||||
|  | |||||||
| @ -117,26 +117,26 @@ class EquidistantCamera : public Camera { | |||||||
|       const std::vector<std::vector<cv::Point2f> > &imagePoints); |       const std::vector<std::vector<cv::Point2f> > &imagePoints); | ||||||
| 
 | 
 | ||||||
|   // Lift points from the image plane to the projective space
 |   // Lift points from the image plane to the projective space
 | ||||||
|   void liftProjective(const ctain::Vector2d &p, ctain::Vector3d &P) const;  // NOLINT
 |   void liftProjective(const models::Vector2d &p, models::Vector3d &P) const;  // NOLINT
 | ||||||
|   // %output P
 |   // %output P
 | ||||||
| 
 | 
 | ||||||
|   // Projects 3D points to the image plane (Pi function)
 |   // Projects 3D points to the image plane (Pi function)
 | ||||||
|   void spaceToPlane(const ctain::Vector3d &P, ctain::Vector2d &p) const;  // NOLINT
 |   void spaceToPlane(const models::Vector3d &P, models::Vector2d &p) const;  // NOLINT
 | ||||||
|   // %output p
 |   // %output p
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|   // Projects 3D points to the image plane (Pi function)
 |   // Projects 3D points to the image plane (Pi function)
 | ||||||
|   // and calculates jacobian
 |   // and calculates jacobian
 | ||||||
|   void spaceToPlane( |   void spaceToPlane( | ||||||
|       const ctain::Vector3d &P,ctain::Vector2d &p,  // NOLINT
 |       const models::Vector3d &P,models::Vector2d &p,  // NOLINT
 | ||||||
|       ctain::Matrix23d &J) const;  // NOLINT
 |       models::Matrix23d &J) const;  // NOLINT
 | ||||||
|   // %output p
 |   // %output p
 | ||||||
|   // %output J
 |   // %output J
 | ||||||
| 
 | 
 | ||||||
|   template <typename T> |   template <typename T> | ||||||
|   static void spaceToPlane( |   static void spaceToPlane( | ||||||
|       const T *const params, const T *const q, const T *const t, |       const T *const params, const T *const q, const T *const t, | ||||||
|       const ctain::Matrix<T> &P, ctain::Matrix<T> &p);  // NOLINT
 |       const models::Matrix<T> &P, models::Matrix<T> &p);  // NOLINT
 | ||||||
| 
 | 
 | ||||||
|   void initUndistortMap( |   void initUndistortMap( | ||||||
|       cv::Mat &map1, cv::Mat &map2, double fScale = 1.0) const;  // NOLINT
 |       cv::Mat &map1, cv::Mat &map2, double fScale = 1.0) const;  // NOLINT
 | ||||||
| @ -165,7 +165,7 @@ class EquidistantCamera : public Camera { | |||||||
|       std::vector<double> &coeffs) const;  // NOLINT
 |       std::vector<double> &coeffs) const;  // NOLINT
 | ||||||
| 
 | 
 | ||||||
|   void backprojectSymmetric( |   void backprojectSymmetric( | ||||||
|       const ctain::Vector2d &p_u, double &theta, double &phi) const;  // NOLINT
 |       const models::Vector2d &p_u, double &theta, double &phi) const;  // NOLINT
 | ||||||
| 
 | 
 | ||||||
|   Parameters mParameters; |   Parameters mParameters; | ||||||
| 
 | 
 | ||||||
| @ -194,7 +194,7 @@ T EquidistantCamera::r(T k2, T k3, T k4, T k5, T theta) { | |||||||
| template <typename T> | template <typename T> | ||||||
| void spaceToPlane( | void spaceToPlane( | ||||||
|     const T *const params, const T *const q, const T *const t, |     const T *const params, const T *const q, const T *const t, | ||||||
|     const ctain::Matrix<T> &P, ctain::Matrix<T> &p) {  // NOLINT
 |     const models::Matrix<T> &P, models::Matrix<T> &p) {  // NOLINT
 | ||||||
|   T P_w[3]; |   T P_w[3]; | ||||||
|   P_w[0] = T(P(0)); |   P_w[0] = T(P(0)); | ||||||
|   P_w[1] = T(P(1)); |   P_w[1] = T(P(1)); | ||||||
| @ -225,7 +225,7 @@ void spaceToPlane( | |||||||
|   T theta = acos(P_c[2] / len); |   T theta = acos(P_c[2] / len); | ||||||
|   T phi = atan2(P_c[1], P_c[0]); |   T phi = atan2(P_c[1], P_c[0]); | ||||||
| 
 | 
 | ||||||
|   ctain::Matrix<T> p_u(2, 1), tmp(2, 1); |   models::Matrix<T> p_u(2, 1), tmp(2, 1); | ||||||
|   tmp(0) = cos(phi); |   tmp(0) = cos(phi); | ||||||
|   tmp(1) = sin(phi); |   tmp(1) = sin(phi); | ||||||
|   p_u = r(k2, k3, k4, k5, theta) * tmp; |   p_u = r(k2, k3, k4, k5, theta) * tmp; | ||||||
|  | |||||||
| @ -24,7 +24,7 @@ | |||||||
| 
 | 
 | ||||||
| MYNTEYE_BEGIN_NAMESPACE | MYNTEYE_BEGIN_NAMESPACE | ||||||
| 
 | 
 | ||||||
| namespace ctain { | namespace models { | ||||||
|   typedef SMatrix<double> Matrixd; |   typedef SMatrix<double> Matrixd; | ||||||
|   typedef Matrix<double> MatrixXd; |   typedef Matrix<double> MatrixXd; | ||||||
|   typedef Matrix<double> Matrix23d; |   typedef Matrix<double> Matrix23d; | ||||||
| @ -45,7 +45,7 @@ namespace ctain { | |||||||
|   typedef Matrix<double> MatrixXcd; |   typedef Matrix<double> MatrixXcd; | ||||||
| 
 | 
 | ||||||
|   typedef Quaternion<double> Quaterniond; |   typedef Quaternion<double> Quaterniond; | ||||||
| }   //  namespace ctain
 | }   // namespace models
 | ||||||
| 
 | 
 | ||||||
| MYNTEYE_END_NAMESPACE | MYNTEYE_END_NAMESPACE | ||||||
| #endif  // SRC_MYNTEYE_API_CAMERA_MODELS_CTAINBASE_H_
 | #endif  // SRC_MYNTEYE_API_CAMERA_MODELS_CTAINBASE_H_
 | ||||||
|  | |||||||
| @ -23,7 +23,7 @@ | |||||||
| 
 | 
 | ||||||
| MYNTEYE_BEGIN_NAMESPACE | MYNTEYE_BEGIN_NAMESPACE | ||||||
| 
 | 
 | ||||||
| namespace ctain { | namespace models { | ||||||
| template<typename _Scalar> | template<typename _Scalar> | ||||||
| class Matrix { | class Matrix { | ||||||
|  public: |  public: | ||||||
| @ -419,7 +419,7 @@ double Matrix<_Scalar>::norm(void) const { | |||||||
| 
 | 
 | ||||||
|   return sum; |   return sum; | ||||||
| } | } | ||||||
| }   //  namespace ctain
 | }   //  namespace models
 | ||||||
| 
 | 
 | ||||||
| MYNTEYE_END_NAMESPACE | MYNTEYE_END_NAMESPACE | ||||||
| #endif  //  SRC_MYNTEYE_API_CAMERA_MODELS_MATRIX_H_
 | #endif  //  SRC_MYNTEYE_API_CAMERA_MODELS_MATRIX_H_
 | ||||||
|  | |||||||
| @ -12,8 +12,8 @@ | |||||||
| // See the License for the specific language governing permissions and
 | // See the License for the specific language governing permissions and
 | ||||||
| // limitations under the License.
 | // limitations under the License.
 | ||||||
| #pragma once | #pragma once | ||||||
| #ifndef SRC_MYNTEYE_API_CAMERA_MODELS_CTAIN_MATRIX_SOLVER_H_ | #ifndef SRC_MYNTEYE_API_CAMERA_MODELS_models_MATRIX_SOLVER_H_ | ||||||
| #define SRC_MYNTEYE_API_CAMERA_MODELS_CTAIN_MATRIX_SOLVER_H_ | #define SRC_MYNTEYE_API_CAMERA_MODELS_models_MATRIX_SOLVER_H_ | ||||||
| #include <cmath> | #include <cmath> | ||||||
| #include <complex> | #include <complex> | ||||||
| #include "mynteye/mynteye.h" | #include "mynteye/mynteye.h" | ||||||
| @ -24,7 +24,7 @@ static bool Matrix_EigenValue(double *k1, int n, | |||||||
|     int loop_number, double error1, double *ret); |     int loop_number, double error1, double *ret); | ||||||
| static void Matrix_Hessenberg(double *a1, int n, double *ret); | static void Matrix_Hessenberg(double *a1, int n, double *ret); | ||||||
| 
 | 
 | ||||||
| namespace ctain { | namespace models { | ||||||
| class EigenSolver { | class EigenSolver { | ||||||
|  public: |  public: | ||||||
|   explicit EigenSolver(SMatrix<double> s) { |   explicit EigenSolver(SMatrix<double> s) { | ||||||
| @ -48,7 +48,7 @@ class EigenSolver { | |||||||
|   Matrix<double> t; |   Matrix<double> t; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| }  // namespace ctain
 | }  // namespace models
 | ||||||
| 
 | 
 | ||||||
| static void Matrix_Hessenberg(double *a1, int n, double *ret) { | static void Matrix_Hessenberg(double *a1, int n, double *ret) { | ||||||
|   int MaxNumber; |   int MaxNumber; | ||||||
| @ -253,4 +253,4 @@ static bool Matrix_EigenValue(double *k1, int n, | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| MYNTEYE_END_NAMESPACE | MYNTEYE_END_NAMESPACE | ||||||
| #endif    //  SRC_MYNTEYE_API_CAMERA_MODELS_CTAIN_MATRIX_SOLVER_H_
 | #endif    //  SRC_MYNTEYE_API_CAMERA_MODELS_models_MATRIX_SOLVER_H_
 | ||||||
|  | |||||||
| @ -19,7 +19,7 @@ | |||||||
| 
 | 
 | ||||||
| MYNTEYE_BEGIN_NAMESPACE | MYNTEYE_BEGIN_NAMESPACE | ||||||
| 
 | 
 | ||||||
| namespace ctain { | namespace models { | ||||||
| #define Matrix_ Matrix<_Scalar> | #define Matrix_ Matrix<_Scalar> | ||||||
| template<typename _Scalar> | template<typename _Scalar> | ||||||
| class SMatrix: public Matrix_{ | class SMatrix: public Matrix_{ | ||||||
| @ -30,8 +30,8 @@ class SMatrix: public Matrix_{ | |||||||
|   SMatrix(_Scalar **_data, int dim) : Matrix_(_data, dim, dim) {} |   SMatrix(_Scalar **_data, int dim) : Matrix_(_data, dim, dim) {} | ||||||
|   explicit SMatrix(Matrix_ m) : Matrix_(m) {} |   explicit SMatrix(Matrix_ m) : Matrix_(m) {} | ||||||
|   _Scalar determinant(void) const; |   _Scalar determinant(void) const; | ||||||
|   _Scalar M(int m, int n); |   _Scalar M(int m, int n) const; | ||||||
|   SMatrix<_Scalar> inverse(void); |   SMatrix<_Scalar> inverse(void) const; | ||||||
|   void operator =(Matrix<_Scalar> m) { |   void operator =(Matrix<_Scalar> m) { | ||||||
|     SMatrix t(m); |     SMatrix t(m); | ||||||
|     *this = t; |     *this = t; | ||||||
| @ -39,7 +39,7 @@ class SMatrix: public Matrix_{ | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| template<typename _Scalar> | template<typename _Scalar> | ||||||
| SMatrix<_Scalar> inverse(void) const{ | SMatrix<_Scalar> SMatrix<_Scalar>::inverse(void) const{ | ||||||
|     SMatrix<_Scalar> res(Matrix_::_Rows); |     SMatrix<_Scalar> res(Matrix_::_Rows); | ||||||
|     _Scalar d = determinant(); |     _Scalar d = determinant(); | ||||||
|     for (int i = 0; i < Matrix_::_Rows; i++) { |     for (int i = 0; i < Matrix_::_Rows; i++) { | ||||||
| @ -80,7 +80,7 @@ _Scalar SMatrix<_Scalar>::determinant(void) const{ | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template<typename _Scalar> | template<typename _Scalar> | ||||||
| _Scalar SMatrix<_Scalar>::M(int m, int n) { | _Scalar SMatrix<_Scalar>::M(int m, int n) const { | ||||||
|   float mid_result = 0; |   float mid_result = 0; | ||||||
|   int sign = 1; |   int sign = 1; | ||||||
|   int k = Matrix_::_Rows; |   int k = Matrix_::_Rows; | ||||||
| @ -99,7 +99,7 @@ _Scalar SMatrix<_Scalar>::M(int m, int n) { | |||||||
| } | } | ||||||
| #undef Matrix_ | #undef Matrix_ | ||||||
| 
 | 
 | ||||||
| }   //  namespace ctain
 | }   //  namespace models
 | ||||||
| 
 | 
 | ||||||
| MYNTEYE_END_NAMESPACE | MYNTEYE_END_NAMESPACE | ||||||
| #endif  // SRC_MYNTEYE_API_CAMERA_MODELS_SQUAREMATRIX_H_
 | #endif  // SRC_MYNTEYE_API_CAMERA_MODELS_SQUAREMATRIX_H_
 | ||||||
|  | |||||||
| @ -21,7 +21,7 @@ | |||||||
| 
 | 
 | ||||||
| MYNTEYE_BEGIN_NAMESPACE | MYNTEYE_BEGIN_NAMESPACE | ||||||
| 
 | 
 | ||||||
| namespace ctain { | namespace models { | ||||||
| template<typename T> | template<typename T> | ||||||
| class Quaternion { | class Quaternion { | ||||||
|  public: |  public: | ||||||
| @ -66,7 +66,7 @@ class Quaternion { | |||||||
|   T _z; |   T _z; | ||||||
|   T _w; |   T _w; | ||||||
| }; | }; | ||||||
| }   // namespace ctain
 | }   // namespace models
 | ||||||
| 
 | 
 | ||||||
| MYNTEYE_END_NAMESPACE | MYNTEYE_END_NAMESPACE | ||||||
| #endif   // SRC_MYNTEYE_API_CAMERA_MODELS_QUATERNION_H_
 | #endif   // SRC_MYNTEYE_API_CAMERA_MODELS_QUATERNION_H_
 | ||||||
|  | |||||||
| @ -126,8 +126,8 @@ void RectifyProcessor::stereoRectify(models::CameraPtr leftOdo, | |||||||
|     CvMat pts_3 = cvMat(1, 4, CV_32FC3, _pts_3); |     CvMat pts_3 = cvMat(1, 4, CV_32FC3, _pts_3); | ||||||
|     // Eigen::Vector2d a;
 |     // Eigen::Vector2d a;
 | ||||||
|     // Eigen::Vector3d b;
 |     // Eigen::Vector3d b;
 | ||||||
|     ctain::Vector2d a(2, 1); |     models::Vector2d a(2, 1); | ||||||
|     ctain::Vector3d b(3, 1); |     models::Vector3d b(3, 1); | ||||||
|     for (i = 0; i < 4; i++) { |     for (i = 0; i < 4; i++) { | ||||||
|       int j = (i < 2) ? 0 : 1; |       int j = (i < 2) ? 0 : 1; | ||||||
|       a(0) = static_cast<float>((i % 2)*(nx)); |       a(0) = static_cast<float>((i % 2)*(nx)); | ||||||
| @ -233,8 +233,8 @@ void RectifyProcessor::stereoRectify(models::CameraPtr leftOdo, | |||||||
| 
 | 
 | ||||||
| // Eigen::Matrix4d RectifyProcessor::loadT(const mynteye::Extrinsics& in) {
 | // Eigen::Matrix4d RectifyProcessor::loadT(const mynteye::Extrinsics& in) {
 | ||||||
|   // subEigen
 |   // subEigen
 | ||||||
| ctain::Matrix4d RectifyProcessor::loadT(const mynteye::Extrinsics &in) { | models::Matrix4d RectifyProcessor::loadT(const mynteye::Extrinsics &in) { | ||||||
|   ctain::Matrix3d R(3); |   models::Matrix3d R(3); | ||||||
|   R<< |   R<< | ||||||
|   in.rotation[0][0] << in.rotation[0][1] << in.rotation[0][2] << |   in.rotation[0][0] << in.rotation[0][1] << in.rotation[0][2] << | ||||||
|   in.rotation[1][0] << in.rotation[1][1] << in.rotation[1][2] << |   in.rotation[1][0] << in.rotation[1][1] << in.rotation[1][2] << | ||||||
| @ -244,12 +244,12 @@ ctain::Matrix4d RectifyProcessor::loadT(const mynteye::Extrinsics &in) { | |||||||
|   double t_y = in.translation[1]; |   double t_y = in.translation[1]; | ||||||
|   double t_z = in.translation[2]; |   double t_z = in.translation[2]; | ||||||
| 
 | 
 | ||||||
|   ctain::Quaterniond q(R); |   models::Quaterniond q(R); | ||||||
|   q.normalize(); |   q.normalize(); | ||||||
|   ctain::Matrix4d T(4); |   models::Matrix4d T(4); | ||||||
|   T(3, 3) = 1; |   T(3, 3) = 1; | ||||||
|   T.topLeftCorner<3, 3>() = q.toRotationMatrix(); |   T.topLeftCorner<3, 3>() = q.toRotationMatrix(); | ||||||
|   ctain::Vector3d t(3, 1); |   models::Vector3d t(3, 1); | ||||||
|   t << t_x << t_y << t_z; |   t << t_x << t_y << t_z; | ||||||
|   T.topRightCorner<3, 1>() = t; |   T.topRightCorner<3, 1>() = t; | ||||||
| 
 | 
 | ||||||
| @ -293,10 +293,10 @@ std::shared_ptr<struct CameraROSMsgInfoPair> RectifyProcessor::stereoRectify( | |||||||
|   // Eigen::Matrix4d T = loadT(ex_right_to_left);
 |   // Eigen::Matrix4d T = loadT(ex_right_to_left);
 | ||||||
|   // Eigen::Matrix3d R = T.topLeftCorner<3, 3>();
 |   // Eigen::Matrix3d R = T.topLeftCorner<3, 3>();
 | ||||||
|   // Eigen::Vector3d t = T.topRightCorner<3, 1>();
 |   // Eigen::Vector3d t = T.topRightCorner<3, 1>();
 | ||||||
|   ctain::Matrix4d T = loadT(ex_right_to_left); |   models::Matrix4d T = loadT(ex_right_to_left); | ||||||
|   ctain::Matrix3d R; |   models::Matrix3d R; | ||||||
|   R = T.topLeftCorner<3, 3>(); |   R = T.topLeftCorner<3, 3>(); | ||||||
|   ctain::Vector3d t = T.topRightCorner<3, 1>(); |   models::Vector3d t = T.topRightCorner<3, 1>(); | ||||||
|   // cv::Mat cv_R, cv_t;
 |   // cv::Mat cv_R, cv_t;
 | ||||||
|   // cv::eigen2cv(R, cv_R);
 |   // cv::eigen2cv(R, cv_R);
 | ||||||
|   cv::Mat cv_R(3, 3, CV_64FC1); |   cv::Mat cv_R(3, 3, CV_64FC1); | ||||||
|  | |||||||
| @ -92,7 +92,7 @@ class RectifyProcessor : public Processor { | |||||||
| 
 | 
 | ||||||
| // Eigen::Matrix4d loadT(const mynteye::Extrinsics& in);
 | // Eigen::Matrix4d loadT(const mynteye::Extrinsics& in);
 | ||||||
| // subEigen
 | // subEigen
 | ||||||
|   ctain::Matrix4d loadT(const mynteye::Extrinsics &in); |   models::Matrix4d loadT(const mynteye::Extrinsics &in); | ||||||
| 
 | 
 | ||||||
|   void loadCameraMatrix(cv::Mat& K, cv::Mat& D,  // NOLINT
 |   void loadCameraMatrix(cv::Mat& K, cv::Mat& D,  // NOLINT
 | ||||||
|       cv::Size& image_size,  // NOLINT
 |       cv::Size& image_size,  // NOLINT
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user