在多边形的正常空间内的 pcl 点云中查找点

Posted

技术标签:

【中文标题】在多边形的正常空间内的 pcl 点云中查找点【英文标题】:Find points in pcl pointcloud inside normal space of polygon 【发布时间】:2021-06-16 16:05:06 【问题描述】:

如果我正确理解文档,则可以使用 pcl::ExtractPolygonalPrismData 在垂直于已定义多边形的空间内的云中找到点。

我不使用 pcl::isPointIn2DPolygon 因为我的多边形在 x-z 平面上。所以我想沿y轴测试。 绿色:点云;红色:多边形顶点

测试代码:

//create pointcloud on y=1 plane
std::vector<pcl::PointXYZ, Eigen::aligned_allocator<pcl::PointXYZ> > testpoints;
for(int i=0;i<5;i++)
    float x=i+0.5;
    for(int j=0;j<5;j++)
        float z=j+0.5;
        testpoints.push_back(pcl::PointXYZ(x,1.0,z));
    


pcl::PointCloud<pcl::PointXYZ>::Ptr pointCloud (new pcl::PointCloud<pcl::PointXYZ> ());

pointCloud->points=testpoints;
pointCloud->width=testpoints.size();
pointCloud->height=1;
//create polygon points on y=0 plane
std::vector<pcl::PointXYZ, Eigen::aligned_allocator<pcl::PointXYZ> > pcl_polygon;
pcl_polygon.push_back(pcl::PointXYZ(0 , 0 , 0));
pcl_polygon.push_back(pcl::PointXYZ(2 , 0 , 0));
pcl_polygon.push_back(pcl::PointXYZ(2 , 0 , 2));
pcl_polygon.push_back(pcl::PointXYZ(0 , 0 , 2));

pcl::PointCloud<pcl::PointXYZ>::Ptr hullCloud (new pcl::PointCloud<pcl::PointXYZ> ());
hullCloud->points=pcl_polygon;
hullCloud->width=4;
hullCloud->height=1;

pcl::ConvexHull<pcl::PointXYZ> pclHull;
pclHull.setInputCloud (hullCloud);

pcl::PointCloud<pcl::PointXYZ>::Ptr output_hull (new pcl::PointCloud<pcl::PointXYZ>);
pclHull.reconstruct (*output_hull);

if (pclHull.getDimension () != 2)
    PCL_ERROR ("The input cloud does not represent a planar surface.\n");
    return;


pcl::PointIndices::Ptr inPrism (new pcl::PointIndices);

pcl::ExtractPolygonalPrismData<pcl::PointXYZ> searchPrism;
searchPrism.setInputCloud (pointCloud);
searchPrism.setInputPlanarHull (output_hull);
searchPrism.setHeightLimits (0, 10);
searchPrism.segment (*inPrism);

qDebug() << inPrism->indices.size() + " this is empty";

不幸的是 inPrism->indices 是空的,但我希望左上角的点。(0.5,0.5)(1.5,0.5)(0.5,1.5)(1.5,1.5)

【问题讨论】:

【参考方案1】:

我必须换行:

searchPrism.setHeightLimits (0, -10);

searchPrism.setHeightLimits (-10, 0);

谁能解释一下?

【讨论】:

以上是关于在多边形的正常空间内的 pcl 点云中查找点的主要内容,如果未能解决你的问题,请参考以下文章

PCL实现选框裁剪点云

PCL实现选框裁剪点云

PCL实现选框裁剪点云

基于周界点的多边形 - oracle 空间

如何从实际上在 Postgis 中的多边形内的多边形中获取最近点

查找给定多边形 w.r.t 的两个“边界”顶点。已知(光源)点