При применении обрезки на трехмерном вогнутом корпусе я получаю пропущенные точки и дополнительные точки в отфильтрованном результате.
Контекст Я использую оболочку сферы и облако точек рука в качестве входа алгоритма. setCropOutside имеет значение true, так как я хочу получить точки облака, которые находятся внутри корпуса.
Текущее поведение Полученное отфильтрованное облако имеет недостающие точки и дополнительные точки. На рисунке ниже изображен корпус из облака точек сферы и облака точек руки с точками снаружи корпуса зеленого цвета и точками внутри корпуса красным цветом.
Вот ссылка на файлы, используемые для воспроизведения проблемы:
- polygon.ply содержит информацию об оболочке
- test_hand_downsampled_1000_2.obj - это облако входных точек, которое мы хотим протестировать
- Ожидаемый_фильтрованный_результат.obj - это результат, который мы получим sh (полученный путем ручной обрезки с помощью Blender).
- Filter_result.ply содержит результат алгоритма
Я сравнил полученный результат с желаемым результатом, полученным при обрезке облака точек манипуляции с помощью Blender. Как видно на изображении выше, некоторые точки, которые не должны быть частью пересечения, все еще считаются находящимися внутри корпуса. Численно:
- 237 точек ожидаются на пересечении (см. Ожидаемый_фильтрованный_результат.obj)
- 236 точек являются общими
- 1 точка отсутствует (237-236)
- есть 42 дополнительных балла
- , следовательно, 278 баллов находятся в результирующем облаке точек (см. Filter_result.ply
Примечание: обратите внимание, что есть одно незначительное различие между ожидаемым и заданные точки облаков после 3 десятичных знаков. Например, точка с координатой (-118.585701, -163.048050, 138.409943) в ожидаемом результате равна (-118.5857, -163.04803, 138.40997) в полученном результате.