PCL点云焊点提取

滚回来更新一篇文章,和各位交流一下
待处理点云:
数量级:百万
类型:零部件
描述:弯曲表面上有一些凸起在上面,需要提取凸起和平面接触的一圈点云,作为焊接的加工点

在这里插入图片描述

参考:

https://zhuanlan.zhihu.com/p/32111069

其实这篇文章也算是全面了,思路和他的差不多,只是算法不太一样,主要是前处理点云数据这里不太一样
首先是体素栅格滤波,待处理点云数据不均匀,且存在点云重影的问题,拟合算法效果不太好:

体素栅格:

	pcl::VoxelGrid<pcl::PointXYZ> sor;
	sor.setInputCloud(cloudA);
	sor.setLeafSize(1.2f, 1.2f, 1.2f);//设置滤波时创建的体素大小为1.2cm立方体
	sor.filter(*cloud_filtered);

高斯:

pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>); //kdtree搜索
	pcl::PointCloud<pcl::PointNormal> mls_points;
	pcl::MovingLeastSquares<pcl::PointXYZ, pcl::PointNormal> mls;
		mls.setComputeNormals(true);// 最小二乘计算中
	mls.setInputCloud(cloud);
	mls.setPolynomialFit(true);  //多项式拟合提高精度,
	mls.setPolynomialOrder(2);//2次多项式
	mls.setSearchMethod(tree);
	mls.setSearchRadius(0.05);//半径
	mls.setSqrGaussParam(10);

前处理最好能处理点云达到需求,保持轮廓的情况下点云数量级越小越好

正式处理:
和知乎文章一样
1.导入点云:

//导入pcd

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

	if (pcl::io::loadPCDFile<pcl::PointXYZ>("xx.pcd", *cloudA) == -1)
	{
		PCL_ERROR("未导入点云\n");

		return -1;
	}

2.法线计算:

//先计算法线


	pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;

	pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>());

	ne.setSearchMethod(tree);

	pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);

	ne.setRadiusSearch(1);//搜索半径1cm

	ne.compute(*normals);

	pcl::PointCloud<pcl::PointNormal>::Ptr cloud_with_normals(new pcl::PointCloud<pcl::PointNormal>);

	pcl::concatenateFields(*cloudA, *normals, *cloud_with_normals);

	

3.提取平面:采用RANSAC提取平面

     setOptimizeCoefficients(true);

	seg.setModelType(pcl::SACMODEL_NORMAL_PLANE); 

	seg.setNormalDistanceWeight(0.1);//法线权重系数0.1

	seg.setMethodType(pcl::SAC_RANSAC);

	seg.setMaxIterations(1000); //迭代的次数1000

	seg.setDistanceThreshold(0.5); //内点到模型的距离最大0.5

4.边界提取



	normEst.setKSearch(9);  //法向估计的点数

	normEst.compute(*normals1);

	est.setInputCloud(cloud_filtered);

	est.setInputNormals(normals1);

	est.setSearchMethod(tree1);

	est.setKSearch(20);  

	est.compute(boundaries);

到这里已经有效果了:
z在这里插入图片描述
知乎文章也是到这一步:
在这里插入图片描述
这位大神说后面需要去掉边框,和我的问题一样,大神不说那我来说拉:

直通滤波:

pcl::PassThrough<pcl::PointXYZ> pass_x;
	pass_x.setInputCloud(BoundPoints);
	pass_x.setFilterFieldName("x");
	pass_x.setFilterLimits(min.x + 10, max.x - 20);
	pass_x.filter(*cloud_filtered_x);

最终效果:
在这里插入图片描述
搞定,下次还不知道什么时候有时间来更新啊

热门文章

暂无图片
编程学习 ·

K8S-05-Jenkins部署springCloud项目-gateway

Jenkins部署springCloud项目-gateway代码结构及文件Jenkins配置 代码结构及文件application.yml文件内容server:port: 9527 spring:application:name: cloud-gatewaycloud:nacos:discovery:server-addr: 192.168.0.31:8848gateway:discovery:locator:enabled: trueroutes:- id:…
暂无图片
编程学习 ·

DAY3-JDBC+Tomcat实现简易登陆系统

目录笔记bean包下User类dao包下UserDao类service包下UserServiceImpl类和UserService接口servlet包下HelloServlet类和LoginServlet类util包下DBUtil类xml文件 笔记 jdbc: 1.加载驱动 2.创建连接 3.写sq| 4.得到statement对象 5.执行sq|得到结果集 6.处理结果集 7.关闭资源 分…
暂无图片
编程学习 ·

CnPlugin是PL/SQL Developer工具插件使用

CnPlugin是PL/SQL Developer工具插件,支持PL/SQL Developer 7.0以上版本。1、安装2、拷贝文件安装结束后,得到一个 CnPlugin.dll 和 “CnPlugin”的文件夹,把这两个拷贝到 PL/SQL Developer的安装路径下的 “PlugIns”目录下,重启PL/SQL Develop可以使用了,打开的时候 会在…
暂无图片
编程学习 ·

期末复习、化学反应工程科目(第四章)

@Author:Runsen @Date:2020/7/1人生最重要的不是所站的位置,而是内心所朝的方向。只要我在每篇博文中写得自己体会,修炼身心;在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰难,奋勇前行,不忘初心,砥砺前行,人生定会有所收获,不留遗憾 (作者:Runsen )作者介…
暂无图片
编程学习 ·

latex小技巧

latex小技巧 大学写论文需要用到的latex编辑工具,当初从0开始学习着实走了很多弯路,现在大学毕业了,估计这个东西很长一段时间不会用到了,做个笔记以后遗忘了可以来回看一看。 在已经具有完整latex模板的前提下,使用下面的内容将帮助你快速完成Latex的编写。 工具栏实用工…
暂无图片
中恒嘉业 ·

Heap Sort 讲解

Heap Sort sorts a group of unordered elements using the Heap data structure. The sorting algorithm using a Min Heap is as follows: Heapify all elements into a Min HeapRecord and delete the top elementPut to top element into an array T that stores all so
暂无图片
cgfy ·

8. 源码分析之ConsumeQueue

源码分析之ConsumeQueue 消息发送时数据在ConsumeQueue的落地 ​ 连续发送5条消息&#xff0c;消息是不定长&#xff0c;首先所有信息先放入 Commitlog中&#xff0c;每一条消息放入Commitlog的时候都需要上锁&#xff0c;确保顺序的写入。 ​ 当Commitlog写成功了之后。数据…
暂无图片
coreui ·

Heap Sort 讲解

Heap Sort sorts a group of unordered elements using the Heap data structure. The sorting algorithm using a Min Heap is as follows: Heapify all elements into a Min HeapRecord and delete the top elementPut to top element into an array T that stores all so
暂无图片
coreui ·

[react] 你觉得react上手快不快?它有哪些限制?

[react] 你觉得react上手快不快&#xff1f;它有哪些限制&#xff1f; 相对vue来说不快。 限制 需要学习JSX需要工程化的配置需要对原生JavaScript有相当的掌握react只是一个UI层面的库&#xff0c;像vue内置了动画处理、keep-alive等功能&#xff0c;react则需要去找第三方库…
暂无图片
未来博客 ·

Heap Sort 讲解

Heap Sort sorts a group of unordered elements using the Heap data structure. The sorting algorithm using a Min Heap is as follows: Heapify all elements into a Min HeapRecord and delete the top elementPut to top element into an array T that stores all so
暂无图片
未来博客 ·

[react] 你觉得react上手快不快?它有哪些限制?

[react] 你觉得react上手快不快&#xff1f;它有哪些限制&#xff1f; 相对vue来说不快。 限制 需要学习JSX需要工程化的配置需要对原生JavaScript有相当的掌握react只是一个UI层面的库&#xff0c;像vue内置了动画处理、keep-alive等功能&#xff0c;react则需要去找第三方库…
暂无图片
建站日记 ·

[react] 你觉得react上手快不快?它有哪些限制?

[react] 你觉得react上手快不快&#xff1f;它有哪些限制&#xff1f; 相对vue来说不快。 限制 需要学习JSX需要工程化的配置需要对原生JavaScript有相当的掌握react只是一个UI层面的库&#xff0c;像vue内置了动画处理、keep-alive等功能&#xff0c;react则需要去找第三方库…
暂无图片
建站日记 ·

STL Practice —— 【map (1)】

Description 给出学生姓名和分数&#xff0c;要求你输入姓名查询分数。 Input 输入包含T组测试数据。 开头是一个正整数T (0<T<10)&#xff0c;为测试数据数量。 对于每组测试数据&#xff0c;第一行是一个正整数N (0<N<100000)。 接下来有N行&#xff0c;每行包…
暂无图片
mfbz ·

AOV网是否存在回路-拓扑排序-C++

拓扑排序是对测试AOV网是否存在回路的方法&#xff01; 拓扑排序的过程中&#xff0c;由于需要查找所有以某顶点为尾的弧&#xff0c;即找到该顶点的所有出边&#xff0c;故图要采用邻接表的存储方式。但拓扑排序较邻接表的存储方式有一点不同&#xff0c;由于要查找入度为0的点…
暂无图片
mfbz ·

[react] 你觉得react上手快不快?它有哪些限制?

[react] 你觉得react上手快不快&#xff1f;它有哪些限制&#xff1f; 相对vue来说不快。 限制 需要学习JSX需要工程化的配置需要对原生JavaScript有相当的掌握react只是一个UI层面的库&#xff0c;像vue内置了动画处理、keep-alive等功能&#xff0c;react则需要去找第三方库…
暂无图片
珊珊日记 ·

AOV网是否存在回路-拓扑排序-C++

拓扑排序是对测试AOV网是否存在回路的方法&#xff01; 拓扑排序的过程中&#xff0c;由于需要查找所有以某顶点为尾的弧&#xff0c;即找到该顶点的所有出边&#xff0c;故图要采用邻接表的存储方式。但拓扑排序较邻接表的存储方式有一点不同&#xff0c;由于要查找入度为0的点…
暂无图片
珊珊日记 ·

8. 源码分析之ConsumeQueue

源码分析之ConsumeQueue 消息发送时数据在ConsumeQueue的落地 ​ 连续发送5条消息&#xff0c;消息是不定长&#xff0c;首先所有信息先放入 Commitlog中&#xff0c;每一条消息放入Commitlog的时候都需要上锁&#xff0c;确保顺序的写入。 ​ 当Commitlog写成功了之后。数据…