2015-11-26 8 views
3

Я работаю над проектом, где мне требуется отслеживать воздушные объекты и вычислять шесть степеней свободы.Kinect + OpenCV: невозможно получить ротационные векторы с использованием cv2.solvePnP в python

  1. я в настоящее время отслеживать цветные шары, и вычисляя их центр в rgb_frame, и используя значения центра, чтобы найти глубину в depth_frame.

  2. После нахождения глубины (Z) в реальном мире со-ords, я расчета реального мира X и Y с помощью уравнений: X = (Z и)/FX и Y = (Z v)/fy, где fx, fy - фокусное расстояние, полученное из внутренних параметров kinect, а u и v в этом случае являются значениями x, y центра.

  3. Я лечения (U, V) в качестве точки изображения и (X, Y, Z) в качестве точки изображения и подачи в этот метод: solvePnP

    obj_pts = np.array([[X,Y,Z]],np.float64) img_pts = np.array([[u,v]],np.float64)

    ret,rvecs,tvecs = cv2.solvePnP(obj_pts,img_pts,camera_matrix2,np_dist_coefs)

Я ожидаю найти rvecs, которые я буду использовать в качестве входных данных для:

cv2.Rodrigues(rvecs) 

, чтобы получить углы эйлера, а именно, шаг, рыскание, рулон.

я в настоящее время возникают проблемы с solvePnP вызова, который дает мне следующую ошибку:

/opencv-3.0.0/modules/calib3d/src/solvepnp.cpp:61: ошибка: (-215) NPOINTS> = 0 & & NPOINTS == станд :: макс (ipoints.checkVector (2, CV_32F), ipoints.checkVector (2, CV_64F)) в функции solvePnP

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

Может кто-нибудь пожалуйста, предложите на мой подход и помочь мне достигнуть найти шесть степеней свободы:

forward/back, up/down, left/right, pitch, yaw, roll.

ответ

1

Хотя мой подход был точно верен, я пропустил тот факт, что для вычисления ориентации 3D-объекта в реальных координатах нам нужно как минимум 4+ соответствующих набора точек в координатах пикселей и объектов.

Мне просто нужно было проверить контуры изображения, имеющего более 4 баллов, и мой код работает по назначению, и я могу с высокой точностью вычислить 6 степеней свободы, а также я сделал это более сложный и скоро я смогу поделиться ссылкой git с моей работой.

Мне бы хотелось услышать о том, как успешно проверить правильность ориентации, которую я могу вычислить, используя формулы rodrigues.