У меня есть собственная матрица искажений от калиброванной камеры. Я использую open cv 3.2 c ++. Я получаю сообщение об ошибке оценки позы объекта. Помогите разобраться с этой ошибкой. Значения и изображение ошибки прилагаются ниже.
Mat K = (Mat_<double>(3, 3) << 5489.58773029126, 0, 1167.86282865392, 0, 5481.84660546223, 1047.21450461614, 0, 0, 1);
Mat dist = (Mat_<double>(1, 5) << -0.111931171641671, 0.087488429523756156, 0.000844290429230941, 0.00204127293599477,0);
У меня уже есть точки изображения и объекта, поэтому перейдем к solvepnp для получения вектора поворота и перемещения. Итак,
Mat rvecs, tvecs;
vector<Point3f> end_point3D;
vector<Point2f> end_point2D;
end_point3D.push_back(Point3f(50, 0, 0));
end_point3D.push_back(Point3f(0, 50, 0));
end_point3D.push_back(Point3f(0, 0, 50));
solvePnP(Object_points, Image_points, K, dist, rvecs, tvecs);
projectPoints(end_point3D, rvecs, tvecs, K, dist, end_point2D, noArray(), 0.0);
cv::line(image, Image_points[0], end_point2D[0], cv::Scalar(255, 0, 0), 6);
cv::line(image, Image_points[0], end_point2D[1], cv::Scalar(0, 255, 0), 6);
cv::line(image, Image_points[0], end_point2D[2], cv::Scalar(0, 0, 255), 6);
Изображение приведено ниже. ошибка вывода оценочной позы
РЕДАКТИРОВАТЬ: Точки объекта и точки изображения упорядочены должным образом одинаково. Я уверен в заказе, я выполнил упорядочивание по ряду строк.
Size sq_size(6, 6);
int Sq_length = 30;
vector<Point3f>Object_points;
for (int r = 0; r < sq_size.height; r++)
for (int c = 0; c < sq_size.width; c++)
Object_points.push_back(Point3f(r*Sq_length, c*Sq_length, 0));
vector<Point2f>Image_points;
for (int i = 0; i < 36; i++)
Image_points.push_back((Point2f)op_cent[i]);
//row-major ordered image points
У меня есть два сомнения,
1. Хотя они правильно упорядочены, иногда поза приводит к неправильным результатам, как показано ниже. В чем может быть причина?
Ошибка представления позы
2. Если я рисую, оцениваю позу только в Image_points [0], то получается, что это правильно, но не в других точках. Может кто-нибудь объяснить, почему поза неправильна в Image_points [30]? В какой-то момент поза объектов должна быть одинаковой, верно?