#python #opencv #fundamental-matrix
Вопрос:
У меня есть два изображения одного и того же объекта, снятые с разных позиций, и некалиброванная камера. Я хочу рассматривать эти пары изображений как стереопары. Тогда я смогу оценить фундаментальную матрицу, ничего не зная о сцене. Я хочу знать угол поворота между двумя камерами относительно первой.
- pts1 и pts2-это массив совпадающих ключевых точек, полученных с помощью одного из известных методов описания характеристик. ВЫКУП используется для исключения выбросов.
F, маска = cv2.findFundamentalMat(pts1,pts2,v2.FM_RANSAC, 3,0.99 )
- p1fNew и p2fNew — входы ключевых точек С помощью метода стереоректификации, я могу получить две матрицы для исправления изображений в одной плоскости. retBool, H1, H2 = cv2.Стереоректифицирован(p1fNew,p2fNew, F, размер изображения)
Умножая эти матрицы, я могу оценить преобразование одной плоскости изображения в другую: T = np.linalg.inv(np.mat(H1)) * np.mat(H2)
Как разложить эту матрицу T и извлечь из нее информацию о вращении и направлении вектора от первого центра изображения к другому?
Комментарии:
1. Вы могли бы попробовать версию перегруженной
cv::recoverPose
и использовать, напримерcv.recoverPose( E, points1, points2, cameraMatrix[, R[, t[, mask]]]
. Вместо откалиброванной Основной матрицы E вы вставляете свою расчетную Фундаментальную матрицу и проверяете результат R и t. Использование Фундаментальной матрицы позволяет определить перевод t только в масштабе. Для точного решения вам необходимо откалибровать камеру.2. Спасибо Гриллтеллеру. Однако у меня нет информации о месте происшествия, поэтому необходимый мат оценить невозможно. Вот почему я пытаюсь использовать фундаментальную матрицу для исправления некалиброванных камер с помощью cv2.stereoRectifyUncalibrated(p1fNew,p2fNew, F, imsize). Как я понял, я могу использовать две матрицы гомографии и перевести перспективу в ортогональные проекции (что является моей целью). однако я хочу оценить относительный угол между этими камерами.
3. Я думаю, что это теоретически возможно (Хартли, Зиссерман, стр. 253), но я никогда не находил ни кода, ни реализаций для этого. Я взял только приблизительную оценку матриц камеры (fx, fy = 1,25*макс(img_width, img_height), ppx, ppy = центр изображения, а затем использовал
recoverPose()
. Может быть, это сработает для вашего дела.