Я пытаюсь сегментировать плоскость из облака точек с помощью библиотеки Point Cloud, и у меня есть некоторая предварительная информация о модели плоскости (т.е. нормаль должна быть похожа на ось z, а высота (d) должна быть около 0) .
Есть ли способ заставить алгоритм RANSAC предпочитать коэффициенты, аналогичные моей предыдущей модели? Я думаю, что это можно сделать либо путем включения ограничений в модель, либо путем изменения рейтинга выбранных самолетов.
Я попытался отфильтровать данные с помощью сквозного фильтра, который сохраняет только точки, которые находятся вокруг предыдущей плоскости. Затем я использовал объект SACSegmentation, чтобы найти плоскость на отфильтрованных данных с моделью нормальной плоскости и допуском на нормальный угол.
Я также пробовал использовать модель параллельной плоскости.
pcl::PointIndices::Ptr indices_for_segmentation(new pcl::PointIndices);
pcl::PassThrough<pcl::PointXYZL> pass_through;
pass_through.setInputCloud(cloud_);
pass_through.setIndices(clean_indices);
pass_through.setFilterFieldName("z");
pass_through.setFilterLimits(z_min_lim, z_max_lim);
pass_through.filter(indices_for_segmentation->indices);
pcl::PointIndices::Ptr inliers(new pcl::PointIndices);
pcl::SACSegmentation<pcl::PointXYZL> ransac;
ransac.setOptimizeCoefficients(true);
ransac.setIndices(indices_for_segmentation);
ransac.setModelType(pcl::SACMODEL_PERPENDICULAR_PLANE);
ransac.setMethodType(pcl::SAC_RANSAC);
ransac.setDistanceThreshold(plane_thresh);
ransac.setInputCloud(cloud_);
ransac.setAxis(Eigen::Vector3f(0, 0, 1)); // search around the z axis
ransac.setEpsAngle(pcl::deg2rad(5));
ransac.segment(*inliers, *coefficients_);
Проблемы с текущим решением заключаются в том, что
- в обоих случаях (параллельная и нормальная плоскости) алгоритм, похоже, не использует жестко ограничение epsAngle (похоже, это используется как своего рода рекомендация)
- при этом не учитываются требования к высоте самолета.
- сквозной фильтр иногда оставляет только несколько точек, что делает оценку плоскости нестабильной (в каждом кадре оценивается другая плоскость)