как объединить облако точек после триангуляции - PullRequest
0 голосов
/ 27 апреля 2018

Я работаю над структурой из движения. До сих пор я делал следующие шаги.

  1. Функция соответствия
  2. Фундаментальная матрица
  3. Основная матрица
  4. Камера Matrix P
  5. Из триангуляции я получил значения типа Point3d для всех совпадающих объектов. Я сохранил это в переменной pointcloud.
  6. Настройка пучка, оптимизация позы и точечного облака.
  7. Добавить дополнительные виды для реконструкции.

Проблема возникает в 7, например, наличие 3-х изображений, то есть 1,2,3. И точка_1 соответствует точке_2. И точка_2 соответствует точке_3. точка_1, точка_2, точка_3 в изображении_1, изображении_2, изображении_3 соответственно.

После триангуляции point_1 и point_2 получают результат worldPoint_1 point_2 и point_3 получают результат worldPoint_2

wordldPoint_1 и worldPoint_2 должны совпадать, поскольку Point_1,2,3 - это одно и то же наблюдение точки реального мира. Но поскольку шум существует, worldPoint_1 и worldPoint_2 не равны.

Поэтому мой вопрос заключается в том, как объединить облако точек после добавления нового изображения для реконструкции и триангуляции.

1 Ответ

0 голосов
/ 05 мая 2018

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

`argmin_{depth} D(ray_1)+D(ray_2) //for image_1 an image_2`

, где ray_i - это обратная проекция point_i, , т.е. inverse(calibration_matrix)*point_i, а где D(.) дает вам расстояние от 3d-точки до луча.

Я думаю, тебе стоит попробовать

argmin_{depth} sum_j D(ray_j) //for all your views image_1, ... , image_N

Таким образом, вы можете попытаться добавить M-estimator, чтобы отфильтровать неверные измерения.

...