Я пытаюсь написать некоторый код, который будет вычислять основную матрицу для определения взаимосвязи между стереоизображениями. Я начал с книги Хартли и Циссермана, которую рекомендует большинство людей, но у нее не было практических примеров, и пример кода для нее был в MATLAB, которого у меня нет. Затем я переключился на Введение в методики и алгоритмы компьютерного зрения 3D , которое является более практичным и содержит реальные примеры. Я реализовал рекомендованный 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.