Удаление точек С++

У меня есть N точек (x_N, y_N, z_N) в облаке точек. Облако точек образует форму объекта сферической формы. Моя проблема в том, что у меня есть точки в моем облаке, которые заметно выступают вдоль оси z (это связано с тем, что во время сканирования в мой объект был вставлен объект-булавка). Я хотел бы удалить эти пункты.

Один из подходов, который я использовал, заключается в нахождении изменения наклона для набора точек в моем облаке по сравнению с ближайшим следующим набором точек. (например, я беру свои первые 10 точек, вычисляю изменение наклона и сравниваю его с изменением наклона для следующих десяти точек). Но это не работает так хорошо. Какие-либо предложения?

Любая помощь будет принята с благодарностью. Любая путаница в отношении моей проблемы, просто дайте мне знать.


person DashControl    schedule 10.04.2013    source источник


Ответы (3)


Если это точно сферический объект, а точки распределены одинаково (ни одна сторона не имеет больше точек, чем другая сторона), возьмите среднее значение X, Y и Z всех точек. Это будет рядом с center сферы. Если этот штифт не очень толстый или очень длинный (если на нем мало точек по сравнению с общим количеством), вы можете принять это как center.

Затем измерьте расстояние от каждой точки до center. Снимайте тех, у кого расстояния выше среднего расстояния.


Если вы знаете радиусы сферы и ее центра, просто рассчитайте расстояние от каждой точки до центра и сравните с радиусами.

person Daniel Möller    schedule 10.04.2013
comment
Затем вы можете добавить значение Tolerance, которое будет выбирать пользователь, поэтому код допускает некоторые несовершенства ниже этого допуска. - person Daniel Möller; 11.04.2013

У меня есть наблюдение и соответствующее предложение:

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

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

Конечно, если вы умеете писать код для решения этой проблемы, то это бесполезно.

person Rahul Banerjee    schedule 10.04.2013
comment
Я умею писать код для решения этой проблемы. Таких объектов будет несколько, поэтому лучше иметь алгоритм, чем тратить время на то, что вы предложили. Спасибо, что нашли время прочитать и ответить на мой вопрос! - person DashControl; 11.04.2013

  • Найдите самую высокую точку в z, которая со 100% вероятностью будет булавкой или частью булавки.
  • Установите точку в центр сферы и удалите все точки в пределах выбранного радиуса
  • Повторите еще дважды для других выводов
person DashControl    schedule 10.05.2013