В настоящее время я сталкиваюсь с проблемой, чтобы показать вам, что моя программа делает и должна делать, вот копия / вставка начала предыдущего поста, который я сделал.
Эта программа основана на классическом методе «структура из движения».
Основная идея состоит в том, чтобы взять пару изображений, определить их ключевые точки и вычислить дескрипторы этих ключевых точек. Затем выполняется сопоставление ключевых точек с определенным количеством тестов, чтобы убедиться, что результат хороший. Эта часть работает отлично.
После того, как это сделано, выполняются следующие вычисления: фундаментальная матрица, существенная матрица, SVD-разложение существенной матрицы, вычисление матриц проекции камеры и, наконец, триангуляция.
Результатом для пары изображений является набор трехмерных координат, дающий нам точки, которые нужно нарисовать в 3D-вьюере. Это отлично работает для пары.
Однако я должен выполнить шаг вручную, и это неприемлемо, если я хочу, чтобы моя программа эффективно работала с более чем двумя изображениями.
Действительно, я вычисляю свои матрицы проекций в соответствии с классическим методом следующим образом в параграфе «Определение R и t из E»: https://en.wikipedia.org/wiki/Essential_matrix
Тогда у меня есть 4 возможных решения для моей проекционной матрицы.
Я думаю, что понял геометрическую точку зрения на проблему, представленную в этом отрывке из бумаги Хартли и Циссермана (главы 9.6.3 и 9.7.1): http://www.robots.ox.ac.uk/~vgg/hzbook/hzbook2/HZepipolar.pdf
Тем не менее, мой вопрос: Учитывая четыре возможных матрицы проекций и вычисленные трехмерные точки с помощью функции OpenCV triangulatePoints () (для каждой матрицы проекций), как я могу автоматически выбрать «истинную» матрицу проекций? (без необходимости рисовать 4 раза мои точки в моем 3D-средстве просмотра, чтобы увидеть, соответствуют ли они)
Спасибо за прочтение.
Задача ещё не решена.
Других решений пока нет …