Как убрать точки выброса в PCL для обнаружения поверхности на основе роста региона - PullRequest
0 голосов
/ 18 мая 2019

Я использую 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?Потратив некоторое время на документацию и откорректировав значения для настройки по регионам, я все еще не мог понять, как это сделать.

outlier point

1 Ответ

2 голосов
/ 19 мая 2019

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

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

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

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

...