Как вычислить фундаментальную матрицу для стереозрения

Я пытаюсь написать код, который будет вычислять фундаментальную матрицу для определения взаимосвязи между стереоизображениями. Я начал с книги Хартли и Зиссермана, которую рекомендует большинство людей, но в ней не было практических примеров, а образец кода для нее был в MATLAB, которого у меня нет. Затем я переключился на Введение в методы и алгоритмы трехмерного компьютерного зрения , который является более практичным и содержит реальные примеры. Я реализовал рекомендуемый алгоритм из 8 пунктов с использованием Python и numpy, но у меня возникли проблемы с его проверкой.

Я использую набор данных, указанный на стр. 48 (используйте эту ссылку выше, чтобы увидеть отрывок из Google Книг) этой книги. Когда я нормализую баллы, Я получаю те же результаты, что и эта книга. Однако, когда я использую функцию SVD numpy для вычисления фундаментальной матрицы, я получаю следующее значение для F:

[[-0.01851684 -0.21631176 -0.67036356]
 [ 0.2605251  -0.01023853  0.14234079]
 [ 0.63748775 -0.09404508 -0.00220713]]

Эта матрица удовлетворяет уравнению p_R ^ * F * p_L = 0 , так что это кажется правильным. Однако она сильно отличается от рассчитанной в книге матрицы. Я попытался дважды проверить ответ с помощью OpenCV cv.FindFundamentalMat () и получил третий ответ:

[[  22.98129082  271.46453857  853.74273682]
 [-334.1673584    -4.84123087 -175.99523926]
 [-809.88891602  125.99833679    1.        ]]

Я не знаю, как рассчитываются эти две другие матрицы, но я не могу найти никаких примеров вычисления фундаментальных матриц на web, чтобы проверить мою реализацию 8-балльного алгоритма. Тот факт, что моя реализация возвращает значение, удовлетворяющее уравнению, дает мне уверенность, но меня беспокоит, что я сделал что-то глупое, поэтому я не могу сопоставить результаты в книге или OpenCV.

7
задан Smandoli 4 April 2011 в 02:54
поделиться