PCL :: CropBox не работает, значит, он не фильтрует точки, которые я хочу - PullRequest
0 голосов
/ 01 марта 2020

Я хотел бы узнать, что я делаю неправильно.

Шаги

  1. Загрузить входной файл .pcd
  2. Ограничить этот входной файл как follow

    typename pcl::PointCloud<PointT>::Ptr cloudROI (new pcl::PointCloud<PointT>); 
    pcl::CropBox<PointT> region(true);
    region.setMin(Eigen::Vector4f (-10, -5, -2, 1));
    region.setMax(Eigen::Vector4f (30, 6.5, 1, 1));
    region.setInputCloud(cloud_filtered);
    region.filter(*cloudROI);
    

У меня отлично работает.

Но знайте, что следующий шаг не работает

  1. Теперь я хочу отфильтровать некоторые точки вокруг моего лидарного источника
  2. Поэтому я создаю вторую обрезку с InputCloud из моей первой сегментации
std::vector<int> indices;
pcl::CropBox<PointT> roof(true);
roof.setMin(Eigen::Vector4f (-1.5, -1.7, -1, 1));
roof.setMax(Eigen::Vector4f (2.6, 1.7, -0.4, 1));
roof.setInputCloud(cloudROI);
region.filter(indices);

pcl::PointIndices::Ptr inliers {new pcl::PointIndices};
for (int point : indices)
{
 inliers->indices.push_back(point);
  std::cout << "Found inliers" << std::endl;
}

pcl::ExtractIndices<PointT> extract;
extract.setInputCloud(cloudROI);
extract.setIndices(inliers);
extract.setNegative(true);
extract.filter(*cloudROI);  

Если я симулирую свой код, я получаю следующий результат.

First picture is without filtering the roof points around my Lidar

Result, with second cropbox

Как видно, фильтр обрезает точки с плоскости на правой стороне хотя моя коробка никогда не бывает такой большой. Также держит тот в середине.

1 Ответ

0 голосов
/ 03 марта 2020

Похоже на простую ошибку, просто замените код region.filter(indices) с на roof.filter(indices), другая часть выглядит хорошо

pcl::CropBox<PointT> roof(true);
roof.setMin(Eigen::Vector4f (-1.5, -1.7, -1, 1));
roof.setMax(Eigen::Vector4f (2.6, 1.7, -0.4, 1));
roof.setInputCloud(cloudROI);
region.filter(indices);

У вас возникла проблема, потому что inliers является результатом region кадрирование относительно cloud_filtered. Тем не менее, вы извлекаете отрицательные индексы inliers по отношению к индексам cloudROI, поэтому вы получили точку, которую вы не ожидаете

...