Нахождение точек, которые находятся на расстоянии не менее 2 см от объекта

0

Изображение 174551

Здравствуйте,

Я пытаюсь найти точки сетки, которые находятся вне моих данных, и не менее 2 см близко к данным сетки. Данные сетки отображаются красным цветом, а данные отображаются синим цветом. Я могу найти точку внутри, если dist (cubeGridPoint <SampleDataPoint). Мне интересно найти точки, близкие к образцу на 2 см. Любой алгоритм или помощь помогут мне.

В общем, я хочу найти только точки сетки, которые не менее 2 см от образца и лежат вне образца.

  • 0
    точка A (x1, y1, z1) является по крайней мере L из B (x2, y2, z2), если для любого из k: x, y, z верно, что | k1-k2 |> L
  • 0
    если вы можете найти те точки, которые находятся на определенном расстоянии ... не все ли другие точки были бы за пределами этого конкретного расстояния? Просто поменяйте логику вашего сравнения ... верно? В любом случае, это просто формула расстояния ...
Показать ещё 3 комментария
Теги:
algorithm
math

1 ответ

0

данные выглядят не слишком выпуклыми для меня (более вогнутыми)

  • поэтому выпуклый корпус создаст не то, что вы хотите...

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

  1. создать пространство для вашей сетки

    • 3D-воксельная карта для каждого вокселя 2x2x2 см
    • и очистить его нулями
  2. перебирать все точки ваших данных

    • вычислить координату таблицы воксела
    • и увеличивать его значение элемента в карте вокселей
    • если у вас слишком много точек, которые также обрабатывают переполнение приращения
    • поэтому вы не пойдете на нулевые или отрицательные значения...
  3. Теперь

    • все вокселы с нулем вне вашего объекта
    • или в каком-то локальном отверстии
  4. фильтровать аномалии

    • вы можете использовать дилатацию/эрозию для этого
    • или подсчитайте вокселы соседей с нулем, а если любовник, то очистите его с помощью 1
  5. найти границу

    • обрабатывать таблицу как набор двумерных слоев
    • в каждом слое процесс или горизонтальные линии
    • обнаружить/заменить его следующим образом:

      find                  ->  replace
      ?????0000000000????? ->  ?????0111111110?????
      000000000000000????? ->  111111111111110?????
      ?????000000000000000 ->  ?????011111111111111
      
    • вы можете сделать это отдельно в 3 направлениях

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

[заметки]

  • вы можете улучшить это путем дополнительной фильтрации, как гладкой или любой другой

Ещё вопросы

Сообщество Overcoder
Наверх
Меню