Kinect + OpenCV: невозможно получить векторы вращения, используя cv2.solvePnP в python
Я работаю над проектом, в котором мне нужно отслеживать воздушные объекты и вычислять шесть степеней свободы.
В настоящее время я отслеживаю цветные шары, вычисляю их центр в rgb_frame и использую значения центров, чтобы найти глубину в глубине_фрейма.
После нахождения глубины (Z) в реальных координатах я вычисляю реальные X и Y, используя уравнения: X = (Zu) / fx и Y = (Z v) / fy, где fx,fy являются фокусным расстоянием, полученным из внутренних параметров кинекта, и в этом случае u и v являются значениями x,y центра.
Я рассматриваю (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 == std::max(ipoints.checkVector(2, CV_32F), ipoints.checkVector(2, CV_64F)) в функции solvePnP
Я также понимаю, что отправка только объекта центра и точек изображения не рекомендуется. Это мой первый шаг к реализации. Я намерен использовать детекторы функций, такие как SIFT, чтобы сделать его более интересным позже.
Может ли кто-нибудь предложить мой подход и помочь мне найти шесть степеней свободы:
forward/back, up/down, left/right, pitch, yaw, roll
,
1 ответ
Хотя мой подход был абсолютно правильным, я упустил тот факт, что для расчета ориентации трехмерного объекта в реальных координатах нам нужно как минимум 4+ соответствующих набора точек в пикселях и координатах объекта.
Мне просто нужно было проверить контуры на изображении, которое имело более 4 точек, и мой код работает как задумано, и я могу точно вычислить 6 степеней свободы, а теперь я сделал его более сложным и вскоре Я смогу поделиться ссылкой на git с моей работой.
Я все еще хотел бы услышать о том, как успешно проверить правильность ориентации, которую я могу вычислить с помощью формул Родрига.