1

У меня есть два набора соответствующих точек изображения и проекционных матриц. я использую OpenCVs triangulatePoints() функцию (API | src code) и результаты для однородных 3D точек:Однородная нормализация 4D-вектора после OpenCVs triangulatePoints()

points4D = 
    [-0.25643614, -0.28791642, 0.55905539, 0.73403114; 
    -0.1565057, -0.31044999, -0.93213254, 0.10127056; 
    -0.059627295, -0.031433985, -0.93772811, 0.34076744; 
    -0.29897481, -0.35055584, -0.88075489, 0.10952386; 
     0.34366035, 0.22131357, -0.66281128, -0.62737477; 
    -0.3073515, 0.079058781, -0.87456447, 0.36663577; 
     0.18399428, -0.46038184, -0.85980427, -0.12219366; 
     0.059319936, -0.27747059, -0.95542425, 0.081582561; 
    -0.096490026, -0.21752475, 0.38856983, 0.89016074; 
    -0.22918785, -0.27198601, 0.54019034, 0.76268667] 

Поскольку триангуляции использует SVD композицию для вычисления решения, точки (каждую строку выше матрица представляет собой 4D-точку) нормированы на единичные векторы. Поскольку однородная точка определена как

P_homogeneous = [X Y Z 1] 

Должен ли я нормализовать все рассчитанные точки отдельно s.t. их последняя запись - это единица, чтобы получить метрическую реконструкцию очков?

+0

Я этого не делал раньше, но из того, что я знаю об однородных координатах, я так предполагаю. Помогает ли вам ваша модельная реконструкция? Я думаю, что для вас значительно меньше работы, чтобы попробовать с собственным кодом, чем попросить кого-то другого сделать это. Когда вы найдете ответ, напишите, что вы нашли по этому вопросу. –

+0

Я надеялся на получение научного ответа/деривации, а не просто попытку и не понимание глубины материала. Однако, используя мой код, нормализуя каждую точку независимо, так что их последняя запись - единица, получилась в порядке. Реконструкция сцены правильная (последовательно до масштабов). – takahashi

ответ

1

Если вы используете OpenCV, как вы говорите, вы можете использовать convertPointsFromHomogeneous.