Надежный алгоритм восстановления поверхности из 3D-облака точек?

Я пытаюсь выяснить, какие алгоритмы существуют для восстановления поверхности из данных 3D-диапазона. На первый взгляд кажется, что алгоритмы шарового шарнира (BPA) и поверхностная реконструкция Пуассона являются более установленными методами?

  • Каков установленный, более надежный алгоритм в области, отличной от BPA и алгоритма реконструкции поверхности Пуассона?
  • Рекомендуемые публикации исследований?
  • Есть ли доступный исходный код?
49
задан Fredriku73 08 мая '09 в 11:17
источник поделиться

9 ответов

Я столкнулся с этой дилеммой уже несколько месяцев и сделал исчерпывающие исследования.

Алгоритмы

В основном существуют две категории алгоритмов: геометрия вычислений и неявные поверхности.

Геометрия вычислений

Они соответствуют сетке в существующих точках.

Вероятно, самый известный алгоритм этой группы powercrust, потому что он теоретически обоснован - он гарантирует водонепроницаемую сетку.

Ball Pivoting запатентован IBM. Кроме того, он не подходит для точечных облаков с различной точечной плотностью.

Неявные функции

Один помещает неявные функции в pointcloud, а затем использует алгоритм, похожий на похожий на кубик, для извлечения нулевого набора функции в сетку.

Методы в этой категории отличаются главным образом различными неявными функциями.

Пуассон, Hoppe's, и MPU - самые известные алгоритмы в этой категории. Если вы новичок в этой теме, я рекомендую прочитать тезис Хоппе, это очень объяснительно.

Алгоритмы этой категории обычно могут быть реализованы так, чтобы они могли обрабатывать огромные входы очень эффективно, и можно масштабировать их соотношение качества ↔ speed. Они не нарушаются шумом, различной точечной плотностью, дырками. Недостатком их является то, что они требуют последовательно ориентированных нормалей поверхности в входных точках.

Реализация

Вы найдете небольшое количество бесплатных реализаций. Однако это зависит от того, собираетесь ли вы интегрировать его в бесплатное программное обеспечение (в этом случае лицензия GPL приемлема для вас) или в коммерческое программное обеспечение (в этом случае вам нужна более либеральная лицензия). Последнее очень редко.

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

Взгляните на эту реализацию Poisson, и после этого поделитесь своим опытом со мной, пожалуйста.

также: здесь - это несколько высокопроизводительных алгоритмов, с поверхностной реконструкцией среди них.

CGAL - известная 3d-библиотека, но она бесплатна только для бесплатных проектов. Meshlab - известное приложение с GPL.

Также (Добавлено в августе 2013 года): В библиотеке PCL есть модуль, посвященный реконструкции поверхности, и в активной разработке (и является частью Google Summer of Code). Поверхностный модуль содержит ряд различных алгоритмов реконструкции. PCL также имеет возможность оценивать нормали поверхности, если вы не имеете их, снабженных вашими точечными данными, эту функциональность можно найти в функциях . PCL выпускается в соответствии с условиями лицензии BSD и является программным обеспечением с открытым исходным кодом, оно бесплатное для коммерческих и исследовательских целей.

76
ответ дан libeako 26 мая '09 в 23:16
источник поделиться

Если вы хотите сделать некоторые прямые эксперименты с различными алгоритмами восстановления поверхности, вы должны попробовать MeshLab, сетка -процессорная система, она является открытым исходным кодом и содержит реализации многих ранее упомянутых алгоритмов восстановления поверхности, таких как:

  • Poisson Surface Recon
  • несколько подходов, основанных на MLS,
  • реализация шарового шарнира
  • вариант подхода, основанного на кукурузном объеме
  • Методы на основе Delaunay (Альфа-формы и фильтрация Вороного)
  • инструменты для вычисления нормалей из рассеянных наборов точек
  • и многие другие инструменты для сравнения/измерения/очистки/упрощения полученных сеток.

Источники защищены GPL, поэтому вы не можете использовать их в коммерческом проекте с закрытым исходным кодом, но очень важно получить правильное представление о свойствах различных алгоритмов восстановления поверхности (насколько они чувствительны к шуму, скорость, устойчивость к выбросам, как они сохраняют мелкие детали и т.д.), прежде чем приступить к реализации одного из них.

9
ответ дан ALoopingIcon 02 янв. '10 в 5:40
источник поделиться

Вы можете начать изучать некоторые недавние работы в этой области - в настоящее время что-то вроде Быстрая низкоскоростная потоковая MLS-реконструкция точечно-выборочных поверхностей Джанмауро Куккуру, Энрико Гобетти, Фабио Мартон, Ренато Паджарола и Руджеро Пинтуса. Его цитаты помогут вам быстро пройти литературу.

5
ответ дан Paul Lalonde 11 мая '09 в 8:03
источник поделиться

Пока я не представлял собой сетку, экс-коллега рекомендовал мне эту ссылку к исходному коду для метода тонких пластин:

Ссылка

Кто-нибудь попробовал?

4
ответ дан Fredriku73 28 мая '09 в 16:49
источник поделиться

Здесь на GitHub, это открытый Mesh Processing Library в С++ Dr. Hugues Hoppe, в котором программа восстановления поверхности Recon является хорошим вариантом для вашей проблемы...

1
ответ дан user6043040 13 сент. '16 в 16:18
источник поделиться

Не уверен, что это правильно для вашего дела, так как кажется странным, что вы его пропустили, но маршевые кубы обычно упоминаются в случаях как они.

1
ответ дан unwind 08 мая '09 в 11:20
источник поделиться

Инструмент 3D Delaunay с помощью геометрических инструментов. Этот инструмент используется DirecX и OpenGL. К сожалению, вам может потребоваться купить книгу, чтобы увидеть фактический пример кода библиотеки. Вы все еще читаете код и выясняете.

Matlab также представил инструмент восстановления поверхности, используя Delaunay, класс delaunayTriangulation.

0
ответ дан Cloud Cho 19 сент. '16 в 23:44
источник поделиться

Поскольку у меня тоже была эта проблема, я разработал и реализовал свой собственный алгоритм облачной корозии облаков. Источники, а также документацию можно найти на github.com: https://github.com/ricebean-net/PointCloudCrust. Алгоритм реализован на Java.

Может быть, это может вам помочь. Вы также можете найти короткий python script на странице, который иллюстрирует, как использовать библиотеку. Получайте удовольствие!

0
ответ дан Stefan M 26 янв. '17 в 1:56
источник поделиться

Вам может быть интересно Alpha Shapes.

0
ответ дан ESRogs 08 мая '09 в 20:14
источник поделиться

Другие вопросы по меткам