Matlab基于主成分分析(PCA)的平面拟合—点云处理及可视化第2期

10 篇文章 29 订阅
订阅专栏

目录

1 概述

2 代码实现

3 可视化验证

完整代码:


PCA平面拟合结果

特别提示:《Matlab点云处理及可视化》系列文章整理自作者博士期间的部分成果,旨在为初入点云处理领域的朋友提供一份较为权威、可直接用于论文写作的Matlab点云数据处理教程。如果觉得有用可以分享给更多的人。


1 概述

利用主成分分析(Principal Components Analysis, PCA)方法,可计算待拟合点的法向量,进而得到平面参数

原理详见参考文献

Pauly M, Keiser R, Gross M. Multi‐scale feature extraction on point‐sampled surfaces[C]//Computer graphics forum. Oxford, UK: Blackwell Publishing, Inc, 2003, 22(3): 281-289.

2 代码实现

function planes = fitPlane_PCA(data)% 功能:利用PCA拟合平面% 输入:data   - 原始数据(m*3)    % 输出:planes - 拟合所得平面参数 points = data(:,1:3);[m,~] = size(points);% 计算协方差矩阵M = points-ones(m,1)*(sum(points,1)/m);C = M.'*M./(m-1);  % 计算特征值与特征向量[V, D] = eig(C);% 最小特征值对应的特征向量为法向量s1 = D(1,1);s2 = D(2,2);s3 = D(3,3);if (s1 <= s2 && s1 <= s3)    normal(1,:) = V(:,1)/norm(V(:,1));elseif (s2 <= s1 && s2 <= s3)    normal(1,:) = V(:,2)/norm(V(:,2));elseif (s3 <= s1 && s3 <= s2)    normal(1,:) = V(:,3)/norm(V(:,3));end % 平面参数标准化dtmp = mean(points*normal');planes(1:3) = normal'*sign(dtmp);planes(4) = -dtmp*sign(dtmp);end

3 可视化验证

为了检测平面拟合的效果,采用仿真数据进行验证:

%% 数据准备% 读取数据data = load('data.txt');%% PCA平面拟合% 平面:Ax+By+Cz+D=0planes = fitPlane_PCA(data);A = planes(1);B = planes(2);C = planes(3);D = planes(4);%% 可视化验证% 窗口尺寸设置(单位:厘米)figureUnits = 'centimeters';figureWidth = 15;figureHeight = 15;figureHandle = figure;set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]);% 原始点云可视化l = scatter3(data(:,1),data(:,2),data(:,3),15);% 原始点云hold on% 拟合平面绘制xfit = min(data(:,1)):0.01:max(data(:,1));yfit = min(data(:,2)):0.01:max(data(:,2));[XFit,YFit]= meshgrid (xfit,yfit);ZFit = -(D + A * XFit + B * YFit)/C;s = surf(XFit,YFit,ZFit,'EdgeColor','none');hTitle = title('基于PCA的平面拟合');hXLabel = xlabel('XAxis');hYLabel = ylabel('YAxis');hZLabel = zlabel('ZAxis');% 细节优化colormap(map)set(l,'Marker','o','MarkerFaceColor',CR,'MarkerEdgeColor',CR)view(-27.5,46.9);% 视角set(gca, 'Box', 'on', ...                                    % 边框         'XGrid','on','YGrid','on','ZGrid','on', ...         % 网格         'TickDir', 'out', 'TickLength', [0.01 0.01], ...    % 刻度         'XMinorTick', 'off', 'YMinorTick', 'off', ...       % 小刻度         'XColor', [.1 .1 .1],  'YColor', [.1 .1 .1],...     % 坐标轴颜色         'XLim',[-1.4 0.2])        % 字体和字号set(gca, 'FontName', 'Arial', 'FontSize', 10)set([hXLabel, hYLabel, hZLabel], 'FontName', 'Arial','FontSize', 11)set(hTitle, 'FontName', '微软雅黑', 'FontSize', 12, 'FontWeight' , 'bold')% 背景颜色set(gcf,'Color',[1 1 1])% 图片输出print('test.png','-r300','-dpng')

其中,为了区分不同对象,从Matlab配色神器TheColor的XKCD和SCI颜色库中选择对比色及渐变色:

% 颜色定义CR = TheColor('xkcd',154);map = TheColor('sci',2068);

最终结果如下:

以上。

完整代码:

Matlab基于PCA的平面拟合

PCL点云处理之基于主成分分析平面拟合[PCA](四十七)
weixin_44329757的博客
01-15 2520
点云是离散的,我们一般从中拟合平面或者拟合别的几何形状(曲面,圆柱等)来帮助我们分析点云数据。
Open3D 最小二乘拟合平面PCA
dayuhaitang1的博客
08-24 838
Open3D 最小二乘拟合平面PCA
基于主成分分析的人脸二维码识别_PCAmatlab_
09-30
记录一下自己学到的关于主成分分析的东西(转)
PCA拟合平面
03-24
平面拟合 PCA 主成分分析 可求的平面拟合参数及拟合中误差
最小二乘曲线、平面拟合matlab实现.docx
01-05
最小二乘曲线拟合平面拟合matlab实现。
PCA平面拟合.docx
05-23
PCA大作业,包括数据降维部分和点云数据的平面拟合,以及思考题。
直线、曲线、3D平面拟合matlab代码
10-01
对直线、曲线、及3维平面进行拟合,实现所需的拟合功能,仅供参考
使用PCA拟合平面
07-18 5984
背景 本文参考以下两篇平面解析的论文。 《Fast Plane Extraction in Organized Point Clouds Using Agglomerative Hierarchical Clustering》2014 ICRA 《Fast Cylinder and Plane Extraction from Depth Cameras for Visual Odometry》2018 IROS 这两篇论文在为数不多的平面解析中都取得了较好的效果,并且均开源。本文不详细解析论文本身的方,而
使用PCA拟合平面(Plane Fitting using PCA)
A_cainiao_A
08-14 8867
定义问题给定一组3D点{pi}\{p_i\},我们想找到这组3D点满足的平面参数,即平面向量nn和中心qq : n⊺(pi−q)=0,∀i(1) \begin{equation} n^\intercal (p_i-q)=0, \forall i \tag{1} \end{equation} 当然在实际数据中(1)式一般是不可能严格满足的,因此可以定义如下函数: dist(pi;n,q)≜
点云向量与点云平面拟合的关系(PCA
知识搬运工的博客
05-22 6834
点云向量估计的主要思路是对K-近邻的N个点进行平面拟合平面过N点重心),平面向量即为所求;所以求向量就是变相的求拟合平面。 下面我们用最小二乘求k近邻点云拟合平面: 当 ||x||=1时,Ax=0的最小二乘解是ATA的最小特征值对应的特征向量等同于:ATA的最小特征值所对应的特征向量可使||Ax||最小。 结论:假设k-近邻点矩阵B,B为k*3的矩阵,则根据B拟合平...
基于Matlab主成分分析(PCA)算的人脸识别系统源码+项目设计文档_人脸识别_主成分分析_PCA_matlab
05-18
【达摩老生出品,必属精品,亲测校正,质量保证】 资源名:基于Matlab主成分分析(PCA)算的人脸识别系统源码+项目设计文档_人脸识别_主成分分析_PCA_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:新手及有一定经验的开发人员
基于PCA点云位姿估计与粗拼接,matlab实现
04-04
使用主元分析PCA对两片点云数据作粗略的拼接配准,可以作为ICP算的预处理步骤。尝试规定了PCA主元向量的朝向。附带ply文件格式的bunny多视角数据。
matlab 实现主成分分析PCA
06-04
基于matlab实现PCA降维算,可用于多维数据的损失最小化压缩,内附全代码
最小二乘拟合平面.docx
02-22
最小二乘拟合平面,可用于散斑点拟合平面。 最小二乘拟合平面,可用于散斑点拟合平面。 最小二乘拟合平面,可用于散斑点拟合平面
基于主成分分析(PCA)的分类数据降维可视化matlab代码,数据特征降维
最新发布
12-25
基于主成分分析(PCA)的分类数据降维可视化matlab代码,数据特征降维。 基于主成分分析(PCA)的分类数据降维可视化matlab代码,数据特征降维。基于主成分分析(PCA)的分类数据降维可视化matlab代码,数据特征降维。基于主成分分析(PCA)的分类数据降维可视化matlab代码,数据特征降维。
PCA.zip_PCA matlab_PCA matlab_PCA主成分_PCA主成分分析_matlab PCA
07-15
PCA主成分分析matlab源码,利用matlab实现PCA
Matlab 最小二乘 拟合平面 (PCL PCA拟合平面)
weixin_39354845的博客
10-16 7105
平面方程:Ax+By+Cz+D=0;
matlab拟合平面,拟合平面,并求向量
weixin_30407563的博客
03-18 6734
最小二乘拟合平面的代码%% 最小二乘拟合平面x = rand(1,10);y = rand(1,10);z = (3-2*x-5*y)/4;Xcolv = x(:);Ycolv = y(:);Zcolv = z(:);Const = ones(size(Xcolv));Coefficients = [Xcolv Ycolv Const] \ Zcolv;XCoeff = Coefficient...
MATLAB 主成分分析PCA拟合平面点云 (42)
weixin_44329757的博客
12-19 669
主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维和特征提取技术。它的主要思想是通过线性变换将数据投影到一个新的坐标系,使得在新的坐标系中数据的方差最大化。在3D点云处理中,PCA可以用来拟合点云中的平面。该算可以通过计算点云的协方差矩阵,然后找到协方差矩阵的特征向量,从而得到点云的主方向。这些主方向即代表了点云中最显著的几何特征,可以用来拟合点云中的平面。通过对特征向量进行处理,可以得到平面向量,从而实现对点云平面拟合
主成分分析pcamatlab
05-01
Matlab中进行主成分分析PCA)的步骤如下: 1. 准备数据集:将需要进行PCA的数据存储在一个矩阵中,每一行代表一个样本,每一列代表一个变量。 2. 数据标准化:对每个变量进行标准化处理,使得所有变量的均值为0,标准差为1。 3. 计算协方差矩阵:使用Matlab中的cov函数计算标准化后的数据的协方差矩阵。 4. 计算特征值和特征向量:使用Matlab中的eig函数计算协方差矩阵的特征值和特征向量。 5. 选择主成分:将特征值从大到小排序,选择前k个特征向量作为主成分,k的选择可以根据保留的方差比例来确定。 6. 计算降维数据:将原始数据乘以选定的特征向量构成的投影矩阵,得到降维后的数据。 下面是一个简单的Matlab代码示例: ```matlab % 准备数据集 data = [1 2 3; 4 5 6; 7 8 9; 10 11 12]; % 数据标准化 data_std = zscore(data); % 计算协方差矩阵 cov_mat = cov(data_std); % 计算特征值和特征向量 [eig_vec, eig_val] = eig(cov_mat); % 选择前两个特征向量作为主成分 k = 2; proj_mat = eig_vec(:,1:k); % 计算降维数据 data_pca = data_std * proj_mat; ``` 注意,PCA的结果取决于数据的标准化和主成分的选择,因此需要根据具体问题进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Matlab三维离散点曲面拟合 20955
  • Matlab中文注释乱码问题解决方案 14550
  • Matlab去除box图框上方和右侧刻度线的两种方法 12765
  • Matlab渐变颜色图(colormap)生成/编辑器—ColorMap 11999
  • Matlab绘制双坐标轴柱状/条形图 11809

分类专栏

  • Matlab插图 219篇
  • 科研效率UpUp 8篇
  • 日常问题解决 3篇
  • 线与面拟合 1篇
  • 优化算法 1篇
  • 最小二乘 1篇
  • 点云数据处理 10篇

最新评论

  • Matlab进阶绘图第23期—密度散点图

    木叶823: 请问为什么报错‘density2D_KD’无法识别呢表情包

  • Matlab论文插图绘制模板—三维柱状图

    m0_73939410: 请问这个数据集的格式是怎样的?

  • Matlab论文插图绘制模板第90期—带权重的有向图/图论图/网络图

    2301_79364669: 你好请问您知道其中一条线的边的结点怎么改颜色嘛?

  • Matlab论文插图绘制模板第96期—分组箱线图

    chi_ecnu: 绘制boxplot 时position 的p1 p2 什么意思啊

  • Matlab论文插图绘制模板第42期—气泡矩阵图(相关系数矩阵图)

    G_137: bubblechart函数的内容后面一直报错为啥啊

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • Matlab进阶绘图第57期—带填充纹理的横向柱状图
  • Matlab进阶绘图第56期—带填充纹理的横向单组多色柱状图
  • Matlab进阶绘图第55期—带填充纹理的横向单组柱状图
2024年38篇
2023年106篇
2022年96篇
2020年3篇
2019年2篇
2018年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

两个鬼故事金友热水器王氏起名大全2020卢嘉起名免费起名测名程序流程图用什么符界定研究过程f1中国大奖赛双十二出生的宝宝起名石姓起名木字旁的字男孩起名字诗词起名女孩名字起名 男诗经 女与楚辞武汉南京路起个网名吧起名金水金汉口菱角湖万达广场诚实守信的故事男孩瑞字起名字大全马荣成小说起名字姓施男夏令时什么时候开始余姓女孩起名字100分龙凤双胞胎起名字大全2019莫名其妙起痘痘痒我是杀毒软件女乘客发文感谢国航空姐的小纸条陈长生适合公司起名的三千鸦杀txt百度云盘做完核酸检测多久出结果爱得太迟少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化