Векторы преобразования и поворота решения executePnP точны, но положение камеры менее точно - PullRequest
0 голосов
/ 06 марта 2019

Я использую solvePnPRansac, чтобы найти текстурированный объект и получить позу камеры.Я ссылался на следующие посты ( вопрос Амартина вопрос b_m и в первую очередь вопрос nkint , который объясняет код, который я использую для преобразования r и t в позу камеры/ вращение.

Мои векторы t и r, полученные с помощью solvePnP, являются правильными и возвращают хорошее совпадение пикселей, когда я использую cv.projectPoints для визуализации проецируемых обратно входов. Они отключены на 10-15 пикселей. Однако камераПоза в основном правильная, но на расстоянии 50-100 пикселей, что наводит меня на мысль, что с моим кодом что-то систематическое не так.

rot_matrix = cv2.Rodrigues(r)[0]
pose = -np.matrix(rot_matrix).T * np.matrix(t)

Rt = np.c_[rot_matrix, t]
euler = cv2.decomposeProjectionMatrix(Rt)[-1]

При выводе позы и эйлера приблизительно правильные (модель отображается навид с камеры), но все смещено. Пример вывода (исходный вид, наложенный на новый вид) показан ниже. Как можно отладить это более эффективно? Большое спасибо!

picture of original and new view

...