使用PCL从CAD模型中提取不同视角下的点云
使用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模型中提取不同视角下的点云相关推荐
- 从CAD模型中提取单视角点云
现在需要从CAD模型中提取单视角点云.pcl提取单视角点云的函数名是renderViewTesselatedSphere,属于pcl::visualization::PCLVisualizer中的成员 ...
- PCL 三维 CAD 模型 (obj、ply) 转点云 pcd 文件格式
PCL 三维 CAD 模型 (obj.ply) 转点云 pcd 文件格式 利用 PCL 自带的程序可以将三维 CAD 模型 (obj.ply) 文件转为点云 pcd 文件格式. 打开安装的 PCL 安 ...
- 如何在CAD图纸中提取各点的坐标?
日常CAD制图的工作中,我们会遇到许多问题,其中就有需要提取CAD中各点坐标的问题.如何在CAD图纸中提取各点的坐标?如果是手动一个一个提取的话,就很消耗时间,效率慢的同时可能还会有遗漏,没有办法把C ...
- R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、使用residuls函数从模型中提取每个样本点的残差值、可视化残差与拟合值之间的散点图来看残差的分布模式
R语言使用lm函数构建简单线性回归模型(建立线性回归模型).拟合回归直线.使用residuls函数从模型中提取每个样本点的残差值.可视化残差与拟合值之间的散点图来看残差的分布模式 目录
- PCL 从 CAD模型(STL,OBJ) 采样得到点云 (renderViewTesselatedSphere 函数详解)
利用PCL点云库从CAD模型(stl,obj格式)采样得到点云(pcd,ply格式)有两种方式: 1. 整体点云采样,包括原来CAD模型各个面(可能会包含从外面看不到的内部结构),用的是 pcl_me ...
- R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、使用residuls函数从模型中提取每个样本点的残差值、计算残差和和残差平方和
R语言使用lm函数构建简单线性回归模型(建立线性回归模型).拟合回归直线.使用residuls函数从模型中提取每个样本点的残差值.计算残差和和残差平方和 目录
- 中俄博览会谈下大单 云从科技“展”露头角
文章来源:ATYUN AI平台 这个夏天俄罗斯有掌声.足球.世界杯 迎接来自五洲四海的朋友 也有合作.交流.博览会 迎接来自中国186家企业的伙伴 7月9日至12日,第五届中国-俄罗斯博览会在俄罗斯叶 ...
- cad高程如何提取到cass软件_从CAD平面图中提取坐标生成数据表
功能:在CAD中提取点的三维坐标(提取当前坐标系中坐标)直接生成Excel表,并在CAD图中生成坐标数据表,加了标点号和输出的选项. 如何安装: 1,在CAD平面图中→工具→宏→加载工程→加载下载 ...
- cad模型轻量化_CAD环境下一种支持大装配的产品模型轻量化技术
CAD环境下一种支持大装配的产品模型轻量化技术 针对CAD环境下操作复杂大装配常出现加载和显示困难的问题,提出了一种CAD环境下的轻量化解决方案,将参数化表达和多细节层次(LOD)轻量表达共同定义于产 ...
最新文章
- 遇事不责怪别人,换位思考能成全更好的自己
- 写到usaco上的一题可能题解是凸包所以转来这篇文章看看
- flask 的 request
- COCOA的UIVIEW动画护展
- 递归-递归的特点及基本代码演练
- Python3 sorted() 与sort()函数
- CCF201412-3 集合竞价(100分)
- python生成随机整数
- Adobe Flash runtimes路线图
- Pycharm菜单栏消失,(File 、view消失)快速调出来的方法。(Professional Edition 2022版)
- vscode设置默认浏览器
- 三菱Q系列PLC通过QD75P2N控制三菱MR-JEA伺服
- to be filed by oem
- 基于润和大禹开发板的导购系统项目方案
- 样式集(14)填写信息弹窗
- 闪光网彭亮《我死,我想留下什么》
- JDK的最新版的下载与安装
- 纯净版 Win7(非 Ghost 版)的配置
- 涨姿势了,蜻蜓FM源码剖析
- 解决win10无法搜索本地应用
热门文章
- 使用zabbix-agent2自定义插件获取https证书过期时间
- Windows电脑无法上网排错思路
- 一次Mysql服务不断重启排查,原因竟然是它
- Zabbix---2 监控主机CPU使用率
- 在线 SQL 数据库环境
- Ubuntu赋予普通用户特定目录权限
- org.apache.hadoop.hbase.TableNotDisabledException 解决方法
- vue init失败解决方案-终极版
- “Emgu.CV.CvInvoke”的类型初始值设定项引发异常 解决办法
- 解决MySQL workbench的Can‘t connect to MySQL server on ‘127.0.0.1‘(10061)问题