Merge branch 'rmEigen' of http://gitlab.mynt.com/mynteye/mynt-eye-s-sdk into rmEigen

This commit is contained in:
TinyO 2019-09-05 16:27:01 +08:00
commit 789a6f4a0e
12 changed files with 85 additions and 84 deletions

View File

@ -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

View File

@ -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)));

View File

@ -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,

View File

@ -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;

View File

@ -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;

View File

@ -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_

View File

@ -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_

View File

@ -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_

View File

@ -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_

View File

@ -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_

View File

@ -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);

View File

@ -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