Как избежать заполнения отверстия при реконструкции поверхности? - PullRequest
0 голосов
/ 03 июля 2018

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

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

demo

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

Может ли кто-нибудь дать мне какой-нибудь совет, как я могу сохранить эти большие дыры в реконструкции поверхности Пуассона? Или есть другие алгоритмы, которые могли бы решить эту проблему?

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

1 Ответ

0 голосов
/ 03 июля 2018

Ваши скриншоты выглядят так, как будто вы используете реализацию MeshLab, основанную на старой реализации . Эта реализация не способна обрезать поверхность.

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

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

Ниже приведен пример использования этой программы в демоверсии eagle data

./SSDRecon --in eagle.points.ply --out eagle.screened.color.ply --depth 10 --density
./SurfaceTrimmer --in eagle.screened.color.ply --out eagle.screened.color.trimmed.ply --trim 7
...