Я пытаюсь написать код, который будет вычислять фундаментальную матрицу, чтобы определить взаимосвязь между стерео изображениями. Я начал с книг Хартли и Зиссермана, которые большинство людей рекомендует, но у него не было практических примеров, а пример кода для него был в MATLAB, которого у меня нет. Затем я переключился на An introduction to 3D Computer Vision Techniques and Algorithms, что более практично и имеет в нем фактические примеры. Я реализовал рекомендуемый 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 так кажется правильным. Однако он сильно отличается от матрицы, вычисленной в книге. Я попытался перепроверить ответ, используя cv.FindFundamentalMat OpenCV() и я получил третий ответ:
[[ 22.98129082 271.46453857 853.74273682]
[-334.1673584 -4.84123087 -175.99523926]
[-809.88891602 125.99833679 1. ]]
Я не уверен, как эти две других матриц вычисляется, но я не могу найти примеры фундаментальных вычисление матрицы в сети для проверки моей реализации 8-точечного алгоритма. Тот факт, что моя реализация возвращает значение, которое удовлетворяет уравнению, дает мне уверенность, но я беспокоюсь, что я сделал что-то глупое, поэтому я не могу сопоставить результаты в книге или OpenCV.
Вы начали с нормализованных точек из вашего набора данных или с исходными точками, чтобы добраться до двух фундаментальных матриц выше? –