当前位置: 首页 > ds >正文

pcl案例2 叶片与根茎的分离step2

1,半径滤波,打散茎与叶片

2,聚簇按距离分离

3,按x轴外包围abb的最大值选出茎

4,旋转obb进行cropbox分离整个茎体

效果是这样的

//step2 begin//半径滤波pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_rem = radius_remove_filter < pcl::PointXYZ >(cloud_trans1, 0.002, 75);show_pointcloud<pcl::PointXYZ>(cloud_rem, 1, 0);//距离聚簇,在halcon3d里是connection_object_model_3d  别人封装好的就是好使vector < pcl::PointCloud <pcl::PointXYZ>::Ptr> cloud_ptr_vector = connection_cloud<pcl::PointXYZ>(cloud_rem, 0.001, 1000, 9999999);cout << cloud_ptr_vector.size() << endl;//根据特征 x方向的高度,选择出出茎部的位置float a = 0;int index = 0;//pcl::PointXYZ p_min, p_max;for (int i=0;i<cloud_ptr_vector.size();i++){//show_pointcloud<pcl::PointXYZ>(cloud_ptr_vector[i], 1, 0);pcl::getMinMax3D(*cloud_ptr_vector[i], p_min, p_max);if (p_max.x -p_min.x >a){a = p_max.x - p_min.x;index = i;}}//show_pointcloud < pcl::PointXYZ >(cloud_ptr_vector[index], 4, 0);//下采样,计算obb包围盒pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_down1 = down_sample<pcl::PointXYZ>(cloud_ptr_vector[index], 0.5);//show_pointcloud < pcl::PointXYZ >(cloud_down1, 4, 0);pcl::PointXYZ center;Eigen::Affine3f trans_matrix2 = get_trans_obb<pcl::PointXYZ>(cloud_down1, p_min, p_max, center);p_min.x = p_min.x - 0.2;p_min.y = p_min.y *1.2;p_min.z = p_min.z *1.2 ;p_max.x = p_max.x + 0.2;p_max.y = p_max.y * 1.2;p_max.z = p_max.z * 1.2;pcl::PointCloud<pcl::PointXYZ>::Ptr plant_stem(new pcl::PointCloud<pcl::PointXYZ>);pcl::CropBox<pcl::PointXYZ> crop_box;//crop_box.setInputCloud(cloud_trans1);crop_box.setInputCloud(cloud_trans1);crop_box.setMin(p_min.getArray4fMap());crop_box.setMax(p_max.getArray4fMap());crop_box.setTransform(trans_matrix2); //这里输入的矩阵就是将点云转正的矩阵。也可以理解为在crop时,是将点云以0bb矩阵转到00点后根军p_min和p_max进行裁剪的。crop_box.filter(*plant_stem);cout << plant_stem->points.size() << endl;show_pointcloud<pcl::PointXYZ>(plant_stem, 3, 0);//setp2 end

http://www.xdnf.cn/news/19681.html

相关文章:

  • MyBatis 性能优化最佳实践:从 SQL 到连接池的全面调优指南
  • Java网络编程基础 Socket通信入门指南
  • 机器视觉软件--VisionPro、Visual Master,Halcon 和 OpenCV 的学习路线
  • 从零开始学习n8n-定时器+HTTP+飞书多维表格(上)
  • UFUNCTION C++ 的再次理解
  • 产品月报|睿本云8月产品功能迭代
  • AWS:AssumeRole背后真正的安全哲学,不仅是迂回
  • 综合实验:DHCP、VLAN、NAT、BDF、策略路由等
  • K8S 知识框架和命令操作
  • Linux按键输入实验
  • MongoDB 内存管理:WiredTiger 引擎原理与配置优化
  • 实战练习:通过HTTP请求节点的POST方法用API创建智能体 JSON序列化节点
  • Java学习笔记-反射(二)
  • 使用ansible的playbook完成以下操作
  • Centos安装unoconv文档转换工具并在PHP中使用phpword替换word模板中的变量后,使用unoconv将word转换成pdf
  • 高效浏览器标签页管理:Chrome扩展开发完全指南
  • 三、数据结构
  • 【vue eslint】报错:VSCode自动保存格式化与ESLint规则冲突
  • Linux 正则表达式与grep命令
  • 【Excel】将一个单元格内​​的多行文本,​​拆分成多个单元格,每个单元格一行​​
  • ApiFox的使用
  • AP生物课程:全面解析与优质培训机构推荐
  • 力扣每日一刷Day 19
  • 复杂计算任务的智能轮询优化实战
  • Agentless:革命性的无代理软件工程方案
  • 本地没有公网ip?用cloudflare部署内网穿透服务器,随时随地用自定义域名访问自己应用端口资源
  • 文件上传漏洞基础及挖掘流程
  • Python 爬虫实战:爬取 B 站视频的完整教程
  • TFS-2010《Fuzzy PCA-Guided Robust k-Means Clustering》
  • 控制系统仿真之PID校正-利用PID控制器、PID调节器实现(九)