У меня есть два набора соответствующих точек изображения и проекционных матриц.
Я использую функцию OpenCVs triangulatePoints () (API | код Src) и результаты для однородных трехмерных точек:
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]
Должен ли я нормализовать все рассчитанные баллы по отдельности? их последняя запись является единицей, чтобы получить метрическую реконструкцию точек?
Если вы используете OpenCV, как вы говорите, вы можете использовать convertPointsFromHomogeneous
,