Результат OpenCv SolvePnp, в Eigen Quaternion

Я запускаю opencv solvePnP, используя 3d-точки, которые я передаю вручную, и 2D-точки изображения из угла маркера aruco.

(Я знаю, что в opencv :: aruco есть функция для этого, но я использую точки мирового пространства вместо точек пространства объектов, как обычно)

мои 4 x 2d и 4 x 3d очки следующие:

2d: [631.811, 359.303]
2d: [750.397, 364.894]
2d: [761.65, 448.106]
2d: [621.837, 440.352]

3d: [2.73788, -2.19532, 119.784]
3d: [-18.8274, -3.25251, 119.167]
3d: [-17.7176, -15.5556, 101.448]
3d: [3.84767, -14.4984, 102.065]

матрица моей камеры:

[657.0030186215286, 0, 646.6970647943629;
0, 657.0030186215286, 347.1175117491306;
0, 0, 1]

Когда я запускаю это, я получаю rvec и tvec:

rot: [3.542907682527767e-08;
9.321253763995684e-10;
3.141592612624269]

tran: [-2.599387317758439e-06;
7.428777431217353e-07;
-1.306287668720693e-06]

Уже это выглядит странно. Пожалуйста, смотрите прикрепленное изображение для примера расположения маркера по отношению к камере. Затем я запускаю rvec и tvec через функцию, чтобы получить положение камеры относительно маркера как Eigen :: quaterniond

void GetCameraPoseEigen(cv::Vec3d tvecV, cv::Vec3d rvecV, Eigen::Vector3d &Translate, Eigen::Quaterniond &quats)
{
Mat R;
Mat tvec, rvec;

tvec = DoubleMatFromVec3b(tvecV);
rvec = DoubleMatFromVec3b(rvecV);

cv::Rodrigues(rvec, R); // R is 3x3
R = R.t();                 // rotation of inverse
tvec = -R*tvec;           // translation of inverse

Eigen::Matrix3d mat;
cv2eigen(R, mat);

Eigen::Quaterniond EigenQuat(mat);

quats = EigenQuat;double x_t = tvec.at<double>(0, 0);
double y_t = tvec.at<double>(1, 0);
double z_t = tvec.at<double>(2, 0);

Translate.x() = x_t * 10;
Translate.y() = y_t * 10;
Translate.z() = z_t * 10;

}

Полученный кватернион:

1.12774e-08 2.96705e-10 1 -2.04828e-08

Что явно не так. Но где моя ошибка? Мои 2d — 3d соответствия выглядят правильно? Или это мое собственное преобразование?

Спасибо.

введите описание изображения здесь

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]