基于PCA算法的点云平面拟合

平面拟合

    • 1、平面拟合
    • 2、参考文献
    • 3、相关代码

在这里插入图片描述

1、平面拟合

  PCA 是一种数学变换的方法,利用降维的思想在变换中保持变量的总方差不变,将给定的一组变量线性变换为另一组不相关的变量,并且使变换后的第一变量的方差最大,即第一主成分,其他分量的方差依次递减。在点云数据中的变量为三维点坐标的集合,其变量为X、Y、Z 三个坐标值,则经过变换后,应有三个主成分,对于一个空间平面,在平行于平面的方向上点集分布最为离散,方差最大,在垂直于平面的方向上,点集分布最为集中,方差最小,即空间平面的第三主成分为垂直于空间平面的向量。由于平面拟合最关键的为法向量的拟合,利用PCA 得到点集的第三主成分,即能进一步拟合出平面方程,如图1 所示。

在这里插入图片描述

图1 PCA变换原理

  对于在坐标系XYZ 下的待拟合平面点云,利用主成分分析法对其进行分析,可得到三个按照从大到小排列的特征值 λ 1 、 λ 2 、 λ 3 λ_1、λ_2、λ_3 λ1λ2λ3,对应的主分量分别为 V 1 、 V 2 、 V 3 V_1、V_2、V_3 V1V2V3,其中 V 1 V_1 V1 V 2 V_2 V2组成了待拟合平面的一组基, V 3 V_3 V3 V 1 V_1 V1 V 2 V_2 V2正交,为垂直于待拟合平面的法向量。如图1,在XYZ 坐标系下的点云,经过主成分分析后,三个主成分分量 V 1 、 V 2 、 V 3 V_1、V_2、V_3 V1V2V3组成了新坐标系 X ′ Y ′ Z ′ X'Y'Z' XYZ的三个基, V 1 V_1 V1 V 2 V_2 V2为平面 X ′ O ′ Z ′ X'O'Z' XOZ的一组基, V 3 V_3 V3 O ′ Z ′ O'Z' OZ方向的基,即所拟合平面的法向量。

PCA 过程如下:
( 1) 特征中心化。即每一维的数据都减去该维的均值,变换之后每一维的均值都变成了零。特征中心化后的点集 P P P,如式( 1) ,其中, x i 、 y i 、 z i x_i、y_i、z_i xiyizi为中心化后点坐标:

P = [ x 1 y 1 z 1 x 2 y 2 z 2 ⋮ ⋮ ⋮ x n y n z n ] (1) P=\left[ \begin{matrix} x_1 & y_1 & z_1\\ x_2 & y_2 & z_2 \\ \vdots & \vdots & \vdots\\ x_n & y_n & z_n \end{matrix} \right] \tag{1} P= x1x2xny1y2ynz1z2zn (1)

(2) 计算三个坐标的协方差矩阵。协方差矩阵 C C C为:
C = [ c o v ( x , x ) c o v ( x , y ) c o v ( x , z ) c o v ( y , x ) c o v ( y , y ) c o v ( y , z ) c o v ( z , x ) c o v ( z , y ) c o v ( z , z ) ] (2) C=\left[ \begin{matrix} cov(x,x) & cov(x,y) & cov(x,z)\\ cov(y,x) & cov(y,y) & cov(y,z) \\ cov(z,x) & cov(z,y) & cov(z,z) \end{matrix} \right] \tag{2} C= cov(x,x)cov(y,x)cov(z,x)cov(x,y)cov(y,y)cov(z,y)cov(x,z)cov(y,z)cov(z,z) (2)

  其中, c o v ( x , y ) cov( x,y) cov(xy) x x x 坐标和 y y y 坐标的协方差, c o v ( x , x ) cov( x,x ) cov(xx) x x x坐标的方差,协方差计算公式如式( 3) , x i 、 y i x_i、y_i xiyi为中心化后点坐标:
c o v ( x , y ) = ∑ i = 1 n x i y i n − 1 (3) cov(x,y)=\frac{\sum_{i=1}^nx_iy_i}{n-1}\tag{3} cov(x,y)=n1i=1nxiyi(3)

  当协方差大于零时说明 x x x y y y是正相关关系,协方差小于零时 x x x y y y是负相关关系,协方差为零时 x x x y y y相互独立。

( 3) 计算协方差矩阵 C C C的特征值和特征向量。所计算出来的特征值按照从大到小排序,分别为 λ 1 、 λ 2 、 λ 3 λ_1、λ_2、λ_3 λ1λ2λ3,其所对应的特征向量分别为 ξ 1 、 ξ 2 、 ξ 3 ξ_1、ξ_2、ξ_3 ξ1ξ2ξ3。显然,两个较大 λ λ λ 所对应的特征向量 ξ 1 、 ξ 2 ξ_1、ξ_2 ξ1ξ2为待拟合平面的一组基,而 ξ 3 ξ_3 ξ3为待拟合平面的法向量,其三个分量分别为 a 、 b 、 c a、b、c abc
  若已知待拟合平面经过点 p ( x 0 , y 0 , z 0 ) p( x_0,y_0,z_0) p(x0y0z0) ,则拟合平面为式( 4) :
a ( x - x 0 ) + b ( y - y 0 ) + c ( z - z 0 ) = 0 (4) a( x-x_0) +b( y-y_0) +c( z-z_0) = 0\tag{4} a(xx0)+b(yy0)+c(zz0)=0(4)

否则,取其均值作为平面上点 p ( x ˉ , y ˉ , z ˉ ) p(\bar{x},\bar{y},\bar{z}) p(xˉ,yˉ,zˉ) 进行拟合。
  采用主成分分析法拟合平面的方法,对于存在噪声点的情况,也能很好的拟合出结果。因为在一个平面点云中,噪声点偏离平面的距离相对于平面的范围较小,对拟合结果的影响可以忽略。

2、参考文献

[1]叶玲洁;颜远青. 基于PCA算法的机载LiDAR点云平面分割算法研究 [J]. 城市勘测, 2018, (01): 41-44+51.

3、相关代码

  • matlab 点云最小二乘拟合平面(PCA法)
  • matlab 点云最小二乘拟合平面(PCA法详细过程版)
  • matlab 最小二乘拟合平面并与XOY平面对齐
  • Open3D 最小二乘拟合平面(PCA法 python详细过程版)
  • Open3D 进阶(12)PCA拟合平面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/209023.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汇编-PROTO声明过程

64位汇编 64 模式中,PROTO 伪指令指定程序的外部过程,示例如下: ExitProcess PROTO ;指定外部过程,不需要参数.code main PROCmov ebx, 0FFFFFFFFh mov ecx,0 ;结束程序call ExitProcess ;调用外部过程main ENDP END 32位…

什么是高防IP?有什么优势?怎么选择高防IP?

在当今的互联网环境中,分布式拒绝服务(DDoS)攻击已经成为一种常见的安全威胁。这种攻击通过向目标服务器发送大量的无效流量,使其无法处理正常的请求,从而达到迫使服务中断的目的。作为一个用户,你是否曾遇…

MacOS 成为恶意软件活动的目标

Malwarebytes 警告称,一个针对 Mac 操作系统 (OS) 的数据窃取程序正在通过虚假的网络浏览器更新分发给毫无戒心的目标。 Atomic Stealer,也称为 AMOS,是 Mac OS 上流行的窃取程序。 Atomic Stealer (AMOS) 恶意软件最近被发现使用“ClearFa…

【精选】CSS入门必看知识点大合集

CSS简介 CSS概念 CSS(Cascading Style Sheets)层叠样式表,又叫级联样式表,简称样式表 CSS文件后缀名为.css CSS用于HTML文档中元素样式的定义 为什么需要CSS 使用css的唯一目的就是让网页具有美观一致的页面 语法 CSS 规则…

IDEA中 java: 警告: 源发行版 11 需要目标发行版 11 如何解决

步骤1找到项目结构,下面有两种方式 步骤2找到 模块中对应的项目,修改对应的源的语言级别和依赖的模块SDK(M) 步骤3,启动一下,看有无问题, 步骤4,去文件-->设置-->构建、执行、部署-->编译器-->…

浅谈WPF之各种Template

前几天写了一篇文章【浅谈WPF之控件模板和数据模板】,有粉丝反馈说这两种模板容易弄混,不知道什么时候该用控件模块,什么时候该用数据模板,以及template和itemtemplate之间的关系等,今天专门写一篇文章,简述…

【每日OJ —— 622. 设计循环队列】

每日OJ —— 622. 设计循环队列 1.题目:622. 设计循环队列2.解法2.1.解法讲解2.1.1.算法讲解2.1.2.代码实现2.1.3.提交通过展示 1.题目:622. 设计循环队列 2.解法 1.本题有很多解法:可以使用数组,单链表,双链表&#x…

Modbus TCP

Modbus (👆 百度百科,放心跳转) 起源 Modbus 由 Modicon 公司于 1979 年开发,是一种工业现场总线协议标准。 Modbus 通信协议具有多个变种,支持串口,以太网多个版本,其中最著名的…

【每日OJ —— 20.有效的括号(栈)】

每日OJ —— 20.有效的括号(栈) 1.题目:20.有效的括号(栈)2.方法讲解2.1.解法2.1.1.算法讲解2.1.2.代码实现2.1.3.提交通过展示 1.题目:20.有效的括号(栈) 2.方法讲解 2.1.解法 利用…

Bean基本注解开发

Commponent 使用Component注解代替<bean>标签 <!--注解扫描:扫描指定的基本包及其子包下的类&#xff0c;识别使用了Component注解的文件--><context:component-scan base-package"org.xfy"></context:component-scan> package org.xfy.Dao.…

PHP中间件实现

目录 1、简单中间实现 2、使用闭包函数实现中间件 在PHP中&#xff0c;中间件是一种常用的设计模式&#xff0c;用于处理请求和响应&#xff0c;它可以在请求到达目标处理程序之前或响应发送给客户端之前执行一些特定的逻辑。中间件提供了一种灵活的方式来修改或扩展应用程序的…