Алгоритм упрощения 3d поверхности? - PullRequest
15 голосов
/ 26 июля 2010

У меня есть набор 3d точек, которые приближаются к поверхности. Каждый пункт, однако, подвержен некоторой ошибке. Кроме того, набор точек содержит гораздо больше точек, чем необходимо для представления базовой поверхности.

То, что я ищу, - это алгоритм для создания нового (гораздо меньшего) набора точек, представляющих упрощенную, более гладкую версию поверхности (простите за отсутствие лучшего определения, чем «упрощенный, более плавный»). Подстилающая поверхность не является математической, поэтому я не надеюсь, что набор данных будет соответствовать какой-либо математической функции.

Ответы [ 7 ]

8 голосов
/ 26 июля 2010

Вместо того, чтобы рассматривать его как облако точек, я бы порекомендовал триангуляцию сетки с использованием триангуляции Делоне: http://en.wikipedia.org/wiki/Delaunay_triangulation

Затем прорежьте сетку.Вы можете исследовать алгоритмы прореживания, но вы можете получить довольно хорошие быстрые и грязные результаты с помощью алгоритма, который просто объединяет смежные трис, которые имеют похожие нормали.

2 голосов
/ 08 декабря 2014

Существует несколько различных методов упрощения точечной модели поверхности, в том числе:

  • кластеризация;
  • моделирование частиц;
  • итерационное упрощение.

См. Опрос:

М.Поли, М. Гросс и Л.П. Коббелт.Эффективное упрощение точечных выборок поверхностей.В Слушаниях конференции по Визуализации'02, страницы 163–170, Вашингтон, округ Колумбия, 2002. IEEE.

2 голосов
/ 27 июля 2010

Google для Hugues Hoppe и его работы по "реконструкции поверхности".

Реконструкция поверхности используется, чтобы найти сетчатую поверхность, подходящую для облака точек;однако этот метод дает лотов треугольников.Затем вы можете применить метод уменьшения сетки для уменьшения количества полигонов таким образом, чтобы минимизировать ошибку.В качестве примера вы можете посмотреть методы децимации OpenMesh.

OpenMesh

Hugues Hoppe

2 голосов
/ 26 июля 2010

Я подхожу к этому, ища вершины (точки), которые мало влияют на кривизну поверхности.Найдите все стороны, выходящие из каждой вершины, и возьмите точечные произведения пар (?) Из них.Точки, представляющие очень мелкие «холмы», будут составлять огромные углы (около 180 градусов) и будут иметь маленькие точечные произведения.

Эти вершины с наименьшими числами будут кандидатами на удаление.Вершины вокруг них образуют плоскость.

Или что-то в этом роде.

2 голосов
/ 26 июля 2010

Я думаю, что вы ищете алгоритмы «уровня детализации».

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

Вы можете настроить количество дополнительных томов для увеличения / уменьшения детализации на лету.

1 голос
/ 01 февраля 2017

Проще упростить облако точек без ограничений на треугольники и индексы сетки.

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

вот документ о 5-6 упрощениях с использованием математики Делонея, Вороного и k ближайших соседей:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.10.9640&rep=rep1&type=pdf

Более поздняя версия с 2008 года: http://www.wseas.us/e-library/transactions/research/2008/30-705.pdf

вот последняя версия c ++: https://github.com/tudelft3d/masbcpp/blob/master/src/simplify.cpp

1 голос
/ 26 июля 2010

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

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

может быть точки рядом друг с другом (для некоторого определения«рядом») может считаться содержащим аналогичную информацию, и поэтому сводится к отдельным представителям для каждой такой группы.

Не могли бы вы дать более подробную информацию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...