Товарищи, нужна консультация по сложности работы.
Постановка задачи
Сформировать трехмерную сцену по облакам точек и соответствующим фотографиям с камеры.
Начальные условия
На мобильном роботе стоит дальномер (1 штука) и несколько камер (на текущий момент одна). Угол зрения дальномера регулируется от половины до четверти сферы, угол зрения камер меньше. Кадр охватывает порядка 70-75 градусов по горизонтали и 50-60 градусов по вертикали.
Взаимное расположение устройств известно.
C помощью dx9 запросто строю сцену по одиночному снимку дальномера и соответствующим ему снимкам камер.
Пример 1 [61 Кб]
Пример 2 [75 Кб]
Проблема
Итак, необходима сцена, склеенная из нескольких таких отдельных.
Таким образом, у меня есть N облаков точек с дальномера и k*N фотографий с камер. Перемещения робота между съемками я могу определить, надо считать их известными.
Если просто провести рендер нескольких облаков, получается сцена со множеством артефактов - одни и те же поверхности рисуются несколько раз с незначительными смещениями из-за неточности определения перемещения робота между съемками.
Вот иллюстрация того, как это выглядит:
Пример 3 [197 Кб]
В примере совмещены 12 снимков дальномера и 12 снимков камеры, на скриншот попала примерно половина снимков.
Первая проблема
Такой подход практически недопустим, необходимо преобразовывать отдельные облака точек в одно и триангулировать его как одно целое с учетом знаний о том, что одна и та же поверхность встречается в таком облаке несколько раз.
Вторая проблема
Для рендера в DX необходимо разбивать итоговую поверхность на субповерхности, каждой из этих субповерхностей должна соответствовать своя текстура. Т.о., разбивка должна производиться на основании данных об положении/ориентации камер.
Третья проблема
Произрастает из второй. Изображение одной и той же области может присутствовать на разных кадрах, при этом желательно использовать наиболее четкое изображение, находящееся под возможно более перпендикулярным углом к камере - и на возможно меньшем расстоянии.
Подытожив вышеизложенное, задаю вопросы.
1) есть ли уже готовые подобные алгоритмы?
2) какое время может занять решение проблем 1-3 с "нуля"?
Во время написания поста мне пришла простейшая мысль о том, как просто можно реализовать последние две проблемы при решенной первой.
Благодарю за внимание, слежу за ответами.