Это довольно простой вопрос (я надеюсь). Следующий от 3D reconstruction from Multiple Images, Спутников и др (рис 2-13, р 348.):3D-реконструкция: решение уравнений для 3D-точек из некалиброванных изображений
Проекционных 3D реконструкции от двух некалиброванных изображений
Учитывая: Набор точечных соответствий
m1
вI1
иm2
вI2
между двумя некалиброванными изображениямиI1
иI2
статической сцены.Цель: Проективная 3D реконструкция
^M
сцены.Алгоритм:
- Вычислить оценку
^F
для фундаментальной матрицы- вычислить epipole
e2
из^F
- вычислить 3x3-матрицы
^A = −(1/||e2||2) [e2]x ^F
- Для каждой пары соответствующих точек изображенияи
m2
, решить следующую систему линейных уравнений для^M
:
^p1 m1 = ^M
и^p2 m2 = ^A ^M + e2
(^p1
и^p2
ненулевые скаляры)[Извиняюсь за форматирование. Я не знаю, как поставить шляпы над символами.]
Я довольно много ОК вплоть до шага 4. Но это было более 30 лет с момента моего последнего класса линейной алгебры, и даже тогда я не уверен, что я знал, как решить что-то подобное. Любая помощь или ссылки были бы весьма признательны.
Кстати, это своего рода продолжением на другой пост шахты:
Detecting/correcting Photo Warping via Point Correspondences
Это просто еще один способ, чтобы попытаться решить эту проблему.
Спасибо! То, что я промахнулся, очень похоже на ваше первое решение. К сожалению, примеры, которые я пробовал с моим решением, не сработали. Мне нужно будет сравнить его с вашим. Ваше второе решение также выглядит интересным. – Jabberwock
Извините, если я плотный, но я все еще не уверен, как действовать дальше. Я вижу, как вы получили 'C',' x' & 'd'. Я знаю, как решить что-то вроде 'Cx = d', если' C' является квадратным и обратимым., Но я потерялся на чем-то вроде 'argmin_x | Cx-d |^2'. Конечно, немного, но с кодом Matlab или ссылкой на хорошую ссылку. – Jabberwock
Решатель обычно полагается на QR или SVD-разложение матрицы C (см. Статью [Wikipedia] о линейных наименьших квадратах] (https://en.wikipedia.org/wiki/Linear_least_squares_ (математика)) для деталей). NumPy предоставляет функцию 'linalg.lstsq'. Я не знаком с MATLAB, но кажется, что 'x = C \ d' должен работать. – user3146587