Я хотел бы узнать, что я делаю неправильно.
Шаги
- Загрузить входной файл .pcd
Ограничить этот входной файл как 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);
У меня отлично работает.
Но знайте, что следующий шаг не работает
- Теперь я хочу отфильтровать некоторые точки вокруг моего лидарного источника
- Поэтому я создаю вторую обрезку с 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);
Если я симулирую свой код, я получаю следующий результат.
Как видно, фильтр обрезает точки с плоскости на правой стороне хотя моя коробка никогда не бывает такой большой. Также держит тот в середине.