使用PCL从CAD模型中提取不同视角下的点云

最近在做一个关于提取不同视角下点云的算法,看了许多关于这方面的博客,也查了许多资料。
链接:https://blog.csdn.net/qq_19600917/article/details/89024858
链接:https://blog.csdn.net/A_Jia_17/article/details/82596450
链接:https://blog.csdn.net/rocachilles/article/details/89397212?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-1
根据这些博主提供的代码与注释,始终得不到我想要的结果,因为得到的点云感觉位置和方向都是不对的。有很多人出现了同样的问题,都没人帮忙解答。比如这个
链接:https://github.com/PointCloudLibrary/pcl/issues/3314
经过不断尝试,我发现提取点云的过程基本上不会出错,出错的原因应该是在变换矩阵上。
果然
将链接:link的代码中的poses[i]改成poses[i].inverse().eval(),一切就变得美好起来了。
由于得到的poses是从目标坐标变换到视点相机坐标,而我需要的是从相机坐标变换到原来的坐标。
下面是代码

// 多视角下的点云获取程序//读取CAD模型vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();reader->SetFileName("Mesh1.stl");reader->Update();vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();polydata = reader->GetOutput();polydata->GetNumberOfPoints();//***单视角点云获取//主要是renderViewTesselatedSphere的参数设定//输入float resx = 400;   //显示视点图窗的X大小  分辨率,值多大,采集的点越多float resy = resx;  //显示视点图窗的Y大小std::vector<pcl::PointCloud<pcl::PointXYZ>, Eigen::aligned_allocator<pcl::PointCloud<pcl::PointXYZ> > > views_xyz;// 各视点点云对应的XYZ信息//输出std::vector<Eigen::Matrix4f,Eigen::aligned_allocator<Eigen::Matrix4f> > poses;// 从目标坐标变换到视点相机坐标std::vector<float> entropies;//0-1之间,视点看到模型的百分比//输入int tesselation_level = 0;//对于原始二十面体三角形面的分割数,如果设为0,则是原始二十面体,设为1,每个三角形面会被分为4个三角形float view_angle = 90;//虚拟相机的视场float radius_sphere = 0.5;//radius_sphere半径bool use_vertices = true;//设为TRUE,则使用顶点,得到12个视角(tesselation_level =0)或42个视角(tesselation_level =1),设为FALSE,则使用面,得到得到20个视角(tesselation_level =0)或80个视角(tesselation_level =1)//PCLVisualizer 显示pcl::visualization::PCLVisualizer vis;vis.addModelFromPolyData(polydata, "mesh", 0);vis.setRepresentationToSurfaceForAllActors();//以面片形式显示vis.renderViewTesselatedSphere(resx, resy, views_xyz, poses, entropies, tesselation_level, view_angle, radius_sphere, use_vertices);//显示个角度点云//保存for (int i = 0; i < views_xyz.size(); i++){pcl::PointCloud<pcl::PointXYZ> views_cloud;pcl::transformPointCloud<pcl::PointXYZ>(views_xyz[i]/*输入点云*/, views_cloud/*输出点云*/, poses[i].inverse().eval()/*刚性变换*/);std::stringstream ss;ss << "./cloud_view/cloud_view_" << i << ".ply";pcl::io::savePLYFile(ss.str(), views_cloud);//保存输出的点云}//显示原STL文件while (!vis.wasStopped()){vis.spinOnce();}

使用PCL从CAD模型中提取不同视角下的点云相关推荐

  1. 从CAD模型中提取单视角点云

    现在需要从CAD模型中提取单视角点云.pcl提取单视角点云的函数名是renderViewTesselatedSphere,属于pcl::visualization::PCLVisualizer中的成员 ...

  2. PCL 三维 CAD 模型 (obj、ply) 转点云 pcd 文件格式

    PCL 三维 CAD 模型 (obj.ply) 转点云 pcd 文件格式 利用 PCL 自带的程序可以将三维 CAD 模型 (obj.ply) 文件转为点云 pcd 文件格式. 打开安装的 PCL 安 ...

  3. 如何在CAD图纸中提取各点的坐标?

    日常CAD制图的工作中,我们会遇到许多问题,其中就有需要提取CAD中各点坐标的问题.如何在CAD图纸中提取各点的坐标?如果是手动一个一个提取的话,就很消耗时间,效率慢的同时可能还会有遗漏,没有办法把C ...

  4. R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、使用residuls函数从模型中提取每个样本点的残差值、可视化残差与拟合值之间的散点图来看残差的分布模式

    R语言使用lm函数构建简单线性回归模型(建立线性回归模型).拟合回归直线.使用residuls函数从模型中提取每个样本点的残差值.可视化残差与拟合值之间的散点图来看残差的分布模式 目录

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

    利用PCL点云库从CAD模型(stl,obj格式)采样得到点云(pcd,ply格式)有两种方式: 1. 整体点云采样,包括原来CAD模型各个面(可能会包含从外面看不到的内部结构),用的是 pcl_me ...

  6. R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、使用residuls函数从模型中提取每个样本点的残差值、计算残差和和残差平方和

    R语言使用lm函数构建简单线性回归模型(建立线性回归模型).拟合回归直线.使用residuls函数从模型中提取每个样本点的残差值.计算残差和和残差平方和 目录

  7. 中俄博览会谈下大单 云从科技“展”露头角

    文章来源:ATYUN AI平台 这个夏天俄罗斯有掌声.足球.世界杯 迎接来自五洲四海的朋友 也有合作.交流.博览会 迎接来自中国186家企业的伙伴 7月9日至12日,第五届中国-俄罗斯博览会在俄罗斯叶 ...

  8. cad高程如何提取到cass软件_从CAD平面图中提取坐标生成数据表

    功能:在CAD中提取点的三维坐标(提取当前坐标系中坐标)直接生成Excel表,并在CAD图中生成坐标数据表,加了标点号和输出的选项.   如何安装: 1,在CAD平面图中→工具→宏→加载工程→加载下载 ...

  9. cad模型轻量化_CAD环境下一种支持大装配的产品模型轻量化技术

    CAD环境下一种支持大装配的产品模型轻量化技术 针对CAD环境下操作复杂大装配常出现加载和显示困难的问题,提出了一种CAD环境下的轻量化解决方案,将参数化表达和多细节层次(LOD)轻量表达共同定义于产 ...

最新文章

  1. 遇事不责怪别人,换位思考能成全更好的自己
  2. 写到usaco上的一题可能题解是凸包所以转来这篇文章看看
  3. flask 的 request
  4. COCOA的UIVIEW动画护展
  5. 递归-递归的特点及基本代码演练
  6. Python3 sorted() 与sort()函数
  7. CCF201412-3 集合竞价(100分)
  8. python生成随机整数
  9. Adobe Flash runtimes路线图
  10. Pycharm菜单栏消失,(File 、view消失)快速调出来的方法。(Professional Edition 2022版)
  11. vscode设置默认浏览器
  12. 三菱Q系列PLC通过QD75P2N控制三菱MR-JEA伺服
  13. to be filed by oem
  14. 基于润和大禹开发板的导购系统项目方案
  15. 样式集(14)填写信息弹窗
  16. 闪光网彭亮《我死,我想留下什么》
  17. JDK的最新版的下载与安装
  18. 纯净版 Win7(非 Ghost 版)的配置
  19. 涨姿势了,蜻蜓FM源码剖析
  20. 解决win10无法搜索本地应用

热门文章

  1. 使用zabbix-agent2自定义插件获取https证书过期时间
  2. Windows电脑无法上网排错思路
  3. 一次Mysql服务不断重启排查,原因竟然是它
  4. Zabbix---2 监控主机CPU使用率
  5. 在线 SQL 数据库环境
  6. Ubuntu赋予普通用户特定目录权限
  7. org.apache.hadoop.hbase.TableNotDisabledException 解决方法
  8. vue init失败解决方案-终极版
  9. “Emgu.CV.CvInvoke”的类型初始值设定项引发异常 解决办法
  10. 解决MySQL workbench的Can‘t connect to MySQL server on ‘127.0.0.1‘(10061)问题