Как убрать точки выброса в PCL для обнаружения поверхности на основе роста региона

Я использую PCL для обнаружения поверхности в моем облаке точек лидара, и у меня есть конфигурация, как показано ниже:

pcl::RegionGrowing<pcl::PointXYZ, pcl::Normal> reg;
reg.setMinClusterSize(static_cast<int>(100));
reg.setMaxClusterSize(static_cast<int>(1000));
reg.setSearchMethod(new pcl::search::KdTree<pcl::PointXYZ>);
reg.setNumberOfNeighbours(30);
reg.setInputCloud(point_cloud);
reg.setInputNormals(normals);
reg.setSmoothnessThreshold(6_deg);
reg.setCurvatureThreshold(1.0);

Он работает нормально, за исключением того, что я обнаружил, что он обнаруживает некоторые выбросы, как показано на рисунке ниже.

Я пытался обнаружить самолет, который идет с ногой, и кажется, что метод поднимает некоторую точку на ноге. Можно ли избежать такой точки, используя, например, порог плотности в методе выращивания областей в PCL? Потратив некоторое время на документацию и откорректировав значения для настройки по регионам, я все еще не мог понять, как это сделать.

1 ответ

Решение

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

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

Лучшее решение - использовать удаление радиусов в качестве шага постобработки, чтобы отфильтровать все области, которые вы получили из RegionGrowing.

http://pointclouds.org/documentation/tutorials/remove_outliers.php

Другие вопросы по тегам