Различные фундаментальные матрицы из одинаковых проекционных матриц
Я использую две матрицы проекций P1 и P2 (например, я использую набор данных динозавров), и мне нужно вычислить фундаментальную матрицу F. Поэтому я использую две функции Matlab:
- Функция Питера Ковеси: www.csse.uwa.edu.au/~pk/Research/MatlabFns/Projective/fundfromcameras.m
- Зиссерман: www.robots.ox.ac.uk/~vgg/hzbook/code/vgg_multiview/vgg_F_from_P.m
Эти функции должны делать то же самое, но у меня другое значение F! Как это возможно? Какие правильные функции?
Если две точки X1 и X2 "одинаковы" на двух разных изображениях, X2^T*F*X1 = 0 ... Таким образом, я нашел две соответствующие точки на двух повернутых изображениях (5 градусов) с использованием SURF, но X2 ^ T * F * X1 никогда не равен нулю с этими двумя функциями. Есть идеи?
Вместо этого, если я использую эту функцию, которая вычисляет F из точек совпадения:
- ransac fit фундаментальная матрица Питера Ковеси: ransacfitfundmatrix.m
У меня есть, что X2^T*F*X1 = 0 .... Очевидно, F отличается от двух FI с двумя другими функциями...
2 ответа
Ну, во-первых, в подавляющем большинстве случаев вероятность того, что точки не являются идеально повернутыми версиями друг друга. SURF использует множество аппроксимаций, билинейную интерполяцию и целый ряд вещей, которые нарушают истинную вращательную инвариантность. Таким образом, может не существовать такой фундаментальной матрицы (если между двумя наборами точек нет линейных отношений). Да, это верно даже после того, как вы выполните сопоставление точек.
Тем не менее, ваш X2^T*F*X1
вероятно, должно быть небольшим, если сопоставление действительно хорошее, но я был бы удивлен, если бы оно было точно нулевым для любого реального изображения.
Фундаментальная матрица уникальна только в масштабе.
Таким образом, даже если у вас разные фундаментальные матрицы, обе могут быть правильными для ваших изображений.