Нормализация однородного 4D-вектора после OpenCVs triangulatePoints()

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

  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 для вычисления решения, точки (каждая строка в приведенной выше матрице представляет собой четырехмерную точку) нормализуются к единичным векторам. Поскольку однородная точка определяется как

P_homogeneous = [X Y Z 1]

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


person takahashi    schedule 10.07.2015    source источник
comment
Я не делал этого раньше, но, исходя из того, что я знаю об однородных координатах, я так предполагаю. Помогает ли это реконструкции вашей модели? Я думаю, что для вас гораздо меньше работы попробовать со своим собственным кодом, чем попросить кого-то другого сделать это. Когда вы найдете свой ответ, опубликуйте то, что вы нашли по этому вопросу.   -  person Mark Miller    schedule 10.07.2015
comment
Я надеялся на научный ответ / вывод, а не просто пытался и не понимал материала глубоко. Однако, используя мой код, нормализуя каждую точку независимо, чтобы их последняя запись была единицей, получилось нормально. Реконструкция сцены правильная (постоянно в масштабе).   -  person takahashi    schedule 13.07.2015


Ответы (1)


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

person ancajic    schedule 09.10.2015