【问题标题】:Occlusion estimation in pointcloud using pcl voxelgridOcclusionEstimation使用 pcl voxelgridOcclusionEstimation 在点云中进行遮挡估计
【发布时间】:2017-10-31 19:46:19
【问题描述】:

我需要找出点云的哪些点从位于原点 (0,0,0) 的 RGBD 传感器可见。我尝试使用 pcl 的 voxelgridOcclusionEstimation 类来确定传感器看到的云中的可见区域。它使用光线追踪技术。

作为一个实验,我试图获得一个球体中的可见区域,其中心满足以下条件之一:

  1. 中心沿 x
  2. 中心沿 y 方向
  3. 中心沿z
  4. 中心沿 xz 平面
  5. 中心沿 y z 平面
  6. 中心沿 x y 平面。

在所有情况下,传感器都位于零旋转的原点。

voxelgridOcclusionEstimation 产生奇怪的结果。绿色区域表示可见区域,而红色表示遮挡区域。

我的代码是:

int main(int argc, char * argv[])
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>);

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

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

pcl::io::loadPCDFile(argv[1],*cloud_in);

Eigen::Quaternionf quat(1,0,0,0); 
cloud_in->sensor_origin_  = Eigen::Vector4f(0,0,0,0); 

cloud_in->sensor_orientation_= quat; 
pcl::VoxelGridOcclusionEstimation<pcl::PointXYZ> voxelFilter; 
voxelFilter.setInputCloud (cloud_in); 

float leaf_size=atof(argv[2]); 
voxelFilter.setLeafSize (leaf_size, leaf_size, leaf_size); 
voxelFilter.initializeVoxelGrid(); 

std::vector<Eigen::Vector3i, 
Eigen::aligned_allocator&lt;Eigen::Vector3i> > occluded_voxels; 

for (size_t i=0;i<cloud_in->size();i++) 
{ 

    PointT pt=cloud_in->points[i]; 

    Eigen::Vector3i grid_cordinates=voxelFilter.getGridCoordinates (pt.x, pt.y, pt.z); 

    int grid_state; 

    int ret=voxelFilter.occlusionEstimation( grid_state, grid_cordinates ); 

    if (grid_state==1) 
    { 
        cloud_occluded->push_back(cloud_in->points[i]); 
    } 
    else 
    { 
    cloud_visible->push_back(cloud_in->points[i]); 
    } 

}
pcl::io::savePCDFile(argv[3],*cloud_occluded);
pcl::io::savePCDFile(argv[4],*cloud_visible);

return 0;
}

【问题讨论】:

    标签: point-cloud-library raytracing voxel occlusion


    【解决方案1】:

    除了拼写错误和缺少点类型定义外,您的代码似乎可以正常工作。尝试使用不同的点云以获得更好的视觉分析。

    编辑。另一方面,这似乎表现得很奇怪,例如牛奶车可以从这里http://pointclouds.org/documentation/tutorials/supervoxel_clustering.php#supervoxel-clustering

    【讨论】:

      【解决方案2】:

      voxelgridOcclusionEstimation 类有效,但网格宽度非常重要。如果我们把它做得非常小,那么前景中会有未被占用的体素,这将使投射的光线通过传递到背景。如果它们设置得很大,则无法正确表示曲面。如果模型没有像 RGBD 传感器捕获的数据那样具有均匀的点密度,这将更加困难

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-17
        • 1970-01-01
        • 2012-07-09
        • 1970-01-01
        相关资源
        最近更新 更多