5

я использую две матрицы проекции P1 и P2 (например, я использую dinosaur dataset) и мне нужно вычислить фундаментальную матрицу F. Таким образом, я использую две функции Matlab:Различные фундаментальная матрица из одних и тех же матриц проекции

    функция
  • Питера Kovesi в: 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

Эти функции должны выполнять sam e вещь, но У меня другое значение F! Как это возможно? Каковы правильные функции?

Если две точки X1 и X2 являются «одинаковыми» в двух разных изображениях, X2^T * F * X1 = 0 ... Итак, я нашел две соответствующие точки из двух повернутых изображений (5 градусов) с использованием SURF , но X2^T * F * X1 никогда не будет равным нулю при этих двух функциях. Любые идеи?

Вместо если я использую эту функцию, которая вычисляет F из матчей пунктов:

  • RANSAC соответствует фундаментальной матрице Питера Kovesi: ransacfitfundmatrix.m

У меня есть, что X2^T * F * X1 = 0 .... Очевидно, что F отличается от двух FI с двумя другими функциями ...

+0

Я уверен, что функция Петра Ковеши правильная, она функционирует правильно! –

ответ

2

Ну, во-первых, в большинстве случаев вероятность того, что точки не будут полностью повернуты друг к другу, будет в значительной степени поворотным. SURF использует множество приближений, билинейную интерполяцию и целый ряд вещей, которые нарушают истинную вращательную инвариантность. Таким образом, не может существовать такая фундаментальная матрица (если нет линейной зависимости между двумя наборами точек.) Да, это верно даже после того, как вы набираете точки.

Тем не менее, ваш X2^T*F*X1 должен быть небольшим, если сопоставление действительно хорошее, но я был бы удивлен, если бы он был абсолютно нулевым для любого реального изображения.

2

Фундаментальная матрица уникальна только до шкалы.

Итак, даже если у вас разные фундаментальные матрицы, оба изображения могут быть правильными для ваших изображений.