Нужна помощь для оценки позы объекта с использованием open cv c ++ - PullRequest
0 голосов
/ 07 января 2019

У меня есть собственная матрица искажений от калиброванной камеры. Я использую 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]? В какой-то момент поза объектов должна быть одинаковой, верно?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Я сейчас работаю над написанием программного обеспечения для оценки позы. но ваше описание проблемы мне не совсем понятно. возможно, вы можете сделать более обновленный взгляд на ваше дело.

вот мои мнения, которые могут быть полезны:

Я использую начальное вращение и перевод в rvecs и tvecs, я вводю эти начальные позиции как объекты mat, мне нужно 3 начальных вращения и 3 начальных позиции. solvePnP примет его в качестве начальной отправной точки для дальнейшего расчета. это дает мне довольно точные результаты.

для вашего кода, вы даете мне слишком мало информации, чтобы я мог прокомментировать, что происходило до / после этого кода.

0 голосов
/ 07 января 2019

solvePnP (документация для OpenCV 4.0.1, посетите https://docs.opencv.org/, чтобы просмотреть правильную документацию в соответствии с вашей версией OpenCV) необходимо не менее 4 баллов вычислить позу камеры.

Вы используете OpenCV 3.2, но в более поздней версии OpenCV был добавлен assert.

...