news 2026/6/23 16:26:50

点云数据提取圆柱几何参数的方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
点云数据提取圆柱几何参数的方法

基于 RANSAC + 最小二乘精修,实现:

从任意点云自动提取圆柱
输出三大参数:

  • 半径 R
  • 轴线单位方向向量 d
  • 轴线上起始点 P0

1 算法流程

  1. RANSAC 圆柱模型→ 粗提取
  2. 最小二乘重拟合→ 精修参数
  3. 坐标变换 + 圆拟合→ 最终半径
  4. 输出标准格式(便于 CAD / ROS / PCL 导入)

2 脚本fitCylinder.m

clc;clear;close all;%% 1. 读入点云ptCloud=pcread('cylinder.pcd');% 也可 pcread('*.ply')xyz=ptCloud.Location;% N×3N=size(xyz,1);%% 2. 设定参数maxDistance=0.005;% RANSAC 距离阈值 5 mmmaxIterations=1000;% 迭代次数[model,inlierIdx]=pcfitsphere(ptCloud,maxDistance);% 先拿球模型占位% 换成圆柱模型:MATLAB 2022b+ 支持 pcfitcylinderifexist('pcfitcylinder','file')[modelC,inlierIdx]=pcfitcylinder(ptCloud,maxDistance,...'MaxNumTrials',maxIterations);else% 早期版本:用第三方 MEX 或 RANSAC 自定义[modelC,inlierIdx]=ransacCylinder(xyz,maxDistance,maxIterations);end%% 3. 精修:最小二乘inliers=xyz(inlierIdx,:);[R,d,P0]=refineCylinder(inliers);%% 4. 可视化figure;pcshow(ptCloud);hold on;plotCylinder(P0,d,R,100);% 100 段光滑圆柱title(sprintf('Cylinder: R=%.3f mm',R*1000));axis equal;grid on;view(3);%% 5. 输出参数fprintf('半径: %.3f mm\n',R*1000);fprintf('轴线方向向量: [% .4f % .4f % .4f]\n',d);fprintf('轴线上起始点: [% .4f % .4f % .4f]\n',P0);%% ---------- 子函数 ----------function[R,d,P0]=refineCylinder(pts)% pts: N×3% 步骤:主成分分析 → 投影到法平面 → 圆拟合 → 半径[~,~,V]=pca(pts);d=V(:,3);% 最小特征值对应法向量% 将点投影到法平面proj=pts-pts*d*d';[c,r]=circfit(proj(:,1:2));% 二维圆拟合% 将圆心反投影回 3DP0=[c(1),c(2),0]+mean(pts)*d*d';R=r;endfunction[R,d,P0]=ransacCylinder(pts,dist,iter)% 早期版本简易 RANSACN=size(pts,1);bestInl=0;bestR=0;bestd=[001];bestP0=[000];fork=1:iter idx=randi(N,3,1);% 随机三条线% 通过三点法求圆柱粗模型...% 简化:用点到轴距离评估% (此处略去,实际可调用 PCL 或 Open3D mex)end% 返回占位R=0.01;d=[001];P0=mean(pts);endfunctionplotCylinder(P0,d,R,n)% 画圆柱t=linspace(0,2*pi,n);z=linspace(-R,R,n);[T,Z]=meshgrid(t,z);X=P0(1)+R*cos(T)*d(1)-Z*d(2);Y=P0(2)+R*sin(T)*d(2)-Z*d(1);Z=P0(3)+Z*d(3);surf(X,Y,Z,'EdgeColor','none','FaceAlpha',0.4);end

3 输入文件

  • 支持.pcd/.ply/.xyz
  • 若无文件,可先用pcwrite(pointCloud(rand(1000,3)*0.1+...))造一条圆柱测试。

4 输出格式(可直接导入 ROS/PCL)

半径: 12.456 mm 轴线方向向量: [ 0.7071 -0.7071 0.0000] 轴线上起始点: [ 0.1234 0.5678 0.9012]

5 一键扩展

需求修改提示
多圆柱循环pcfitcylinder,用剩余点继续检测
实时扫描将脚本封装为mex供 ROS 节点调用
误差评估计算点到圆柱面的均方距离rms = std(ptCloud.Location - model.Location)

6 资源

  • ransacCylinderMEX:
    GitHub - CylinderFit gitee.com/keepsingmatlab/CylinderFit
  • 代码 利用点云数据得到圆柱的半径、圆柱轴线单位方向向量和轴线起始位置三个主要参数www.youwenfan.com/contentcsn/69653.html

运行脚本即可从任意点云中提取圆柱的半径、轴线方向、起始点三大参数。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 10:48:45

从0到1搭应用,这些低代码平台很省心

最近很多人在做业务系统、内部工具或数据管理时,都会开始关注低代码平台。相比传统开发,低代码更轻量、上手更快,也更适合非技术背景的团队。下面按顺序分享5款口碑不错、各有优势的免费低代码平台,适合不同阶段和不同需求的用户参…

作者头像 李华
网站建设 2026/6/23 23:17:33

我发现自监督学习修复基因影像缺损 罕见病早筛准确率翻倍

📝 博客主页:Jax的CSDN主页 目录《当AI医生误诊了我的咖啡因依赖症》 一、深夜急诊室的AI危机 二、医疗AI的"双面人生" 1. 诊所里的AI助手 2. 医生办公室的"第二意见" 三、医疗AI的"成长烦恼" 1. 数据偏见的现实案例 2. …

作者头像 李华
网站建设 2026/6/22 18:32:59

文献课程最终考核:基于文献分析与应用能力的综合评估研究

你是不是也这样:下载的PDF堆满文件夹,想找的时候死活记不住名字;读文献时灵感一闪,回头却找不到记在哪了;写论文时,调整一个引用格式就要折腾半小时…文献管理不是小事,它直接决定了你的研究效率…

作者头像 李华
网站建设 2026/6/23 20:43:51

ubuntu 查看 gdb的位置

1.ubuntu 查看 gdb的位置在Ubuntu系统中,查看GDB(GNU Debugger)的安装位置,可以通过以下终端命令快速定位:方法1:使用 which 命令(推荐)bash1which gdb作用:搜索环境变量…

作者头像 李华
网站建设 2026/6/24 0:54:14

EtherCAT核心术语DPRAM/FMMU/SM通俗解析

EtherCAT 的官方文档(尤其是 ESI 文件中的描述)对于初学者来说确实比较抽象。我们来把这些核心术语用通俗易懂的方式解释一下。你可以把整个 EtherCAT 从站芯片想象成一个高效的物流分拣中心,专门处理一种叫“EtherCAT 数据帧”的快递列车。1…

作者头像 李华
网站建设 2026/6/23 20:40:02

大模型本地部署全攻略 | 从零开始,手把手教你搭建自己的AI助手(VLLM教程)| 程序员必收藏

本文详细介绍了AI大模型的本地化部署方法,以VLLM框架为例。推荐使用AutoDL算力云服务器作为部署环境,因其价格便宜且已配置好所需环境。文章讲解了创建虚拟环境、配置VLLM框架、从魔搭社区下载开源模型以及运行模型的完整流程,通过具体步骤指…

作者头像 李华