Определение того, находится ли 3D-координата в облаке точек

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

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

Есть у кого мысли как это сделать? Возможно, более простой способ, чем то, что я пытаюсь, или, возможно, какие-то программы и модули, чтобы попробовать?

Спасибо


person Nate    schedule 20.05.2020    source источник


Ответы (1)


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

ИМХО, это зависит от того, что вы подразумеваете под внутри.
То есть вам нужно (формальное) определение этой связи: a точка находится в облаке точек.


Например, вы можете определить внутри, используя выпуклую комбинацию:

Данная трехмерная точка q и облако точек Q = {q1, q2, ..., qn}, q находятся в пределах >Q тогда и только тогда, когда q является выпуклой комбинацией {q1, q2, ..., qn}.

В этом случае, учитывая точку q и облако точек Q, вы можете сначала найти выпуклая оболочка точек в Q, затем решить, находится ли q внутри выпуклой оболочки или нет. Что касается этой задачи, вы можете обратиться к convex-hull-of-a-point-cl">это ТАК вопрос.


Или вы можете определить внутри по отношению к сетке, образованной облаками точек, как вы сделали. Тогда определение может быть таким:

Данная трехмерная точка q и облако точек Q = {q1, q2, ..., qn}, a водонепроницаемая сетка S может быть сгенерирована из Q. Мы говорим, что q находится внутри Q, тогда и только тогда, когда q находится внутри S.

Это определение довольно небрежно. Из облака точек могут быть созданы все виды водонепроницаемых сеток. Например, поверхность, реконструированная с помощью реконструкции поверхности Пуассона, или с использованием некоторых методов, использующих триангуляция Делоне.
Однако для вашего приложения подойдет любая водонепроницаемая сетка из Q может быть просто нормально.

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


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

К вашему сведению, реконструкция поверхности Пуассона имеет открытый исходный код и может использоваться в CLI.

person Jing Zhao    schedule 21.05.2020