PCL 从 CAD模型(STL,OBJ) 采样得到点云 (renderViewTesselatedSphere 函数详解)

利用PCL点云库从CAD模型(stl,obj格式)采样得到点云(pcd,ply格式)有两种方式:

1. 整体点云采样,包括原来CAD模型各个面(可能会包含从外面看不到的内部结构),用的是 pcl_mesh_sampling,可以直接运行exe文件,也可以把里面的代码粘出来放到自己程序里面结合使用

exe运行方法可以参考:http://www.pianshen.com/article/486229813/
如果想用代码见 Github:https://github.com/PointCloudLibrary/pcl/blob/master/tools/mesh_sampling.cpp

2. 从多个视角采样,仅包括原来CAD模型某个视角下的一面,这种在做配准(registration)的时候更方便应用,因为我们使用的深度相机一般就是从一个视角拍摄,这时比较好用的是PCL自带函数:renderViewTesselatedSphere,当然也会有一些局限下面细说

实现代码可以参考:https://blog.csdn.net/A_Jia_17/article/details/82596450

这里解释一下这个函数:(参考PCL官方文档)

void pcl::visualization::PCLVisualizer::renderViewTesselatedSphere  ( int  xres,  
  int  yres,  
  pcl::PointCloud< pcl::PointXYZ >::CloudVectorType &  cloud,  
  std::vector< Eigen::Matrix4f, Eigen::aligned_allocator< Eigen::Matrix4f > > &  poses, 
  std::vector< float > &  enthropies,  
  int  tesselation_level,  
  float  view_angle = 45,  
  float  radius_sphere = 1,  
  bool  use_vertices = true  
 )   

这个函数是从不同视角得到CAD模型的部分视图。这里设定的视角是一个包在CAD模型外面的,由正三角形组成的二十面体,虚拟的相机从二十面体的每个顶点(或者每个面)拍摄CAD模型,然后得到对应视角下的点云。这个函数如果不改内部的代码,是不能指定视角的,每次运行,虚拟的相机会在每个顶点(或者面)都拍一遍,得到12个(或者20个,对应面的数量)视角下的点云,之后可以挑选自己需要的点云来进行之后的操作。

参数如下:

[in] xres       窗口x方向大小(即分辨率),分辨率越大,采样点云包含点的数目越多
[in] yres        窗口y方向大小(即分辨率),分辨率越大,采样点云包含点的数目越多  
[in] cloud       有XYZ信息的点云向量代表各视角下的模型
[out] poses      从物体坐标系到各视角相机坐标系的位姿转换
[out] enthropies      在0-1之间,各视角看到模型的比率
[in] tesselation_level     对于原始二十面体三角形面的分割数,如果设为0,则是原始二十面体,设为1,每个三角形面会被分为4个三角形
[in] view_angle       相机的视场角FOV,默认为45  
[in] radius_sphere   半径,默认为1
[in] use_vertices    设为TRUE,则使用顶点,得到12个视角(tesselation_level =0)或42个视角(tesselation_level =1),设为FALSE,则使用面,得到得到20个视角(tesselation_level =0)或80个视角(tesselation_level =1)

根据我尝试的,主要设置xres,yres,tesselation_level,view_angle,use_vertices 这几个参数即可,其他参数有什么trick欢迎大家补充

 

  • 6
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值