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

PCA原理使用PCA拟合平面

PCA原理&使用PCA拟合平面

背景

本文参考以下两篇平面解析的论文:

《Fast Plane Extraction in Organized Point Clouds Using Agglomerative Hierarchical Clustering》

《Fast Cylinder and Plane Extraction from Depth Cameras for Visual Odometry》

知识回顾:三点确定一平面

平面方程可以由下列两种方式表示。

Ax+By+Cz+D=0 截距式

A(x-x0)+B(y-y0)+C(z-z0)=0 点法式

因为平面法向量垂直于平面任何向量,有:平面法向量点乘平面向量=0,对应着

A(x−x0)+B(y−y0)+C(z−z0)=0

故A,B,C组成的向量为平面法向量。

又因为三点可以确定一个平面。假如我们有三个空间点:

  1. P0(x0,y0,z0),P1(x1,y1,z1), P2(x2,y2,z2)

以P0为中心点得到两平面向量:

编辑搜图

请点击输入图片描述(最多18字)

平面法向量为:

 

即上面所说的(A,B,C)

多点拟合平面:基础数学知识

协方差:

编辑搜图

请点击输入图片描述(最多18字)

协方差矩阵:可描述不同变量关系的矩阵。对角元素是自身的方差,非对角元素是某变量与另一变量的协方差。

编辑搜图

请点击输入图片描述(最多18字)

其中,为协方差,当i=j时,为方差(对角)。

PCA基本思想

将坐标轴中心移到数据的中心(中心化),然后旋转坐标轴,使得数据在C1轴上的方差最大,即全部n个数据个体在该方向上的投影最为分散。意味着更多的信息被保留下来。C1成为第一主成分。

C2第二主成分:找一个C2,使得C2与C1的协方差(相关系数)为0,以免与C1信息重叠,并且使数据在该方向的方差尽量最大。

以此类推,找到第三主成分,第四主成分......第p个主成分。p个随机变量可以有p个主成分。

PCA拟合平面计算过程

编辑搜图

请点击输入图片描述(最多18字)

在三维空间中,空间点的维度为3,要确定一个平面,等同于确定其法向量(三维)。

按照上面PCA的定义,同样对三维空间点进行PCA算法操作。

假设当前点数量为N,于是我们拥有N×3个三维空间点。

1.对于三维空间点的数据,先将其均值中心化(mean centering):

(下图为一个二维中心化例子)

编辑搜图

请点击输入图片描述(最多18字)

2.然后我们计算所有点在x、y、z轴的均值、方差、协方差、协方差矩阵。

计算公式:

编辑搜图

请点击输入图片描述(最多18字)

编辑搜图

请点击输入图片描述(最多18字)

Y,Z方差同理。

编辑搜图

请点击输入图片描述(最多18字)

X、Z的协方差与Y、Z的协方差同理,最终得到的协方差矩阵为3维。

3.计算协方差矩阵特征值与特征向量。

这里就不详细说矩阵的特征值和特征向量是怎么求的了,取排名前二特征值对应的特征向量,两特征向量代表着方差较大的基,使两特征向量叉乘,即可得到我们要求的拟合好的平面法向量。

看下图,会发现最大特征值对应的特征向量方向的点和第二大特征值对应的特征向量方向的点方差较第三大特征值对应的特征向量的点方差大。

编辑搜图

请点击输入图片描述(最多18字)

从图中,我们应该很好理解,为什么要取前两大特征值的叉乘来获取拟合平面的法向量。实际上我们也可以直接拿最小特征值对应的特征向量来作为平面的法向量。

到这里,基本讲清楚PCA算法的计算步骤,但还没有讲清楚其基本原理,为什么需要中心化?为什么PCA会和协方差矩阵扯上关系?为什么最大特征值对应的特征向量就能代表方差最大的维度?

PCA理解——中心化

计算方差和协方差时,需要用到以下公式:

编辑搜图

请点击输入图片描述(最多18字)

编辑搜图

请点击输入图片描述(最多18字)

假设点集为P,中心化即:

编辑搜图

请点击输入图片描述(最多18字)

其中P-bar为三个轴的均值组成的向量。

中心化之后,点集各个轴均值为0,则有以下:

编辑搜图

请点击输入图片描述(最多18字)

编辑搜图

请点击输入图片描述(最多18字)

方便后续计算。假设有N个三维点,将所有三维点写为3×N的矩阵,有:

编辑搜图

请点击输入图片描述(最多18字)

其协方差矩阵可简单地表示为:

编辑搜图

请点击输入图片描述(最多18字)

协方差对角化

目前采用的基底为:

编辑搜图

请点击输入图片描述(最多18字)

协方差矩阵为:

编辑搜图

请点击输入图片描述(最多18字)

协方差矩阵未必是对角阵,也就是说,在这个基下点的各个轴的分布是相关的(非对角元素不为0)。

正是由于在当前基数据的分布在各个轴(基)协方差不为0,数据的方差没有达到最大,很自然地我们会想到,需要一个新的基底,使得点在新基底的分布在各个轴的分布无关,这个时候,数据的协方差矩阵为对角阵。即各个轴对应的协方差为0。于是,我们就需要把协方差对角化。

点集为A,设新的基底为K,则点集A在新基底的坐标为:AK,于是新的协方差矩阵为:

编辑搜图

请点击输入图片描述(最多18字)

D为新的协方差矩阵,且为对角阵。其中,新的基底K其实就是特征向量,对角阵协方差矩阵D中的各个元素就是特征值。

协方差矩阵中的对角元素,意味着各个基方向数据分布的方差,特征值=方差,特征值越大=方差越大。而大的特征值对应的特征向量,对应着就是方差大的基/特征方向。

总的来说,特征向量就是新的正交坐标轴,特征值就是所有数据投影到对应特征向量的方差。

在拟合平面这个任务中,其实就是希望找到一个法向量方向,使得所有点投影到这个方向上的方差最小,我们取最小特征值对应的基向量就可以了,而PCA是最大方差理论,原则上这个不属于PCA,但从另一个角度讲,我们可以先提取特征较大的两个基向量,然后使两者叉乘得到平面的法向量,从这个角度讲,这也算是一种PCA的方法,只是需要进行后处理。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

Spring企业级程序设计 • 【第6章 深入Spring MVC开发】

全部章节 >>>> 本章目录 6.1 模型数据解析及控制器返回值 6.1.1 ModelAndView多种用法 6.1.2 Map添加模型数据和返回String类型值 6.1.3 Model添加模型数据和返回String类型值 6.1.4 返回值为String类型的重定向和转发 6.1.5 实践练习 6.2 Spring MVC表…...

CentOS安装VirtuanBox

CentOS7安装virtualbox 1.进入virtualbox官网 https://www.virtualbox.org/ 2.点击download 3.点击Linux distributions 4.向下翻至如图,并且进入同种框选页面 5.在/etc/yum.repos.d/目录下新建virtualbox.repo并写入如下内容 [virtualbox] nameOracle Linux / R…...

模拟实现堆栈将中缀算术表达式转换成后缀表达式

1、随机生成100个0到200的整数 用折半查找法(二分法)查找50是初始数据的第几个数, 并输出查找过程(即和什么数进行了比较)。 public class Random0To200 {public int random;public int num;public void display(){Sy…...

自适应平台AUTOSAR(Adaptive Platform AUTOSAR)平台设计(6)——通信管理

参考: https://zhuanlan.zhihu.com/p/336833453 1.概述 通信管理负责分布式实时嵌入式环境中应用程序之间的所有通信。 背后的概念是从实际机制中抽象出来,以查找和连接通信伙伴,以便应用程序软件的实现者可以专注于其应用程序的特定目的。…...

2021-06-02

JavaScript 逆向辅助模拟的理解原文地址代码原文地址 查看地方 代码 async_playwright().start() #启动 ba.chromium.launch() #创建浏览器 cb.new_page() #创建新页面 page.route(“js1.js”,lambda route: route.fulfill(path"./js2.js) #2替换1,1是虚拟路…...

飞塔防火墙MIB-OID列表

找了很久,终于找到了官方的文档,包含了很多东西,贴个目录吧,获取资源请见最底部链接。 介绍: FortiGate是全新的下一代防火墙,在整个硬件架构和系统上面都有新的设计,在性能和功能上面都有了很大提升,具有性能高、接口丰富、功能齐全、安全路由交换一体化、性价比高等…...

中国石油大学《混凝土》第三阶段在线作业

第三阶段在线作业单选题 (共24道题) 收起1.(2.5分) 混凝土构件的平均裂缝间距与下列因素无关的是 A、混凝土强度等级 B、混凝土保护层厚度 C、纵向受拉钢筋直径 D、纵向钢筋配筋率我的答案:A 此题得分:2.5分2.(…...

CSS 透明,文字不透明处理

1.opacity:会使其所有子元素都透明 我们通常是使用 opacity来做背景的透明化处理,该属性被所有浏览器支持,可以大胆使用,透明度从0.0(完全透明)到1.0(完全不透明),但该方法会使其所有子元素都透明,此时若只…...

HTML基础知识

HTLM基础知识 语义化 每一个HTML元素都有具体的含义所有元素与展示效果无关,元素展示的效果应该由CSS决定浏览器带有默认的CSS样式,所以每个元素都有一些默认的样式选择什么元素,取决于内容的含义,而不是显示出的效果为什么需要语义化? 5.1 为了搜索引擎优化(SEO),每隔一段时…...

记录一个docker容器内网络与主机不通的问题(桥接网络不通)

https://blog.csdn.net/weixin_33102135/article/details/111946436 测试docker已经部署上的流程: 进入容器内部执行,脚本。执行成功。 外网telnet连接显示连接不到端口。 在其他机器上部署该docker服务,docker-compse方式,可…...

Hudi 系列(二)- 编译 hudi

编译 hudi 如果是第一次编译 hudi 会花很长时间,maven 本地仓库为空的情况下,我花了40分钟(视网络环境)。编译步骤如下: 下载 releace 源代码,https://hudi.apache.org/releases,现在的最新版本…...

MapReduce概述

1.MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并行运行在一个Hadoop集群上。 2.MapReduc…...

vsftpd2.3.4著名笑脸漏洞复现实战

1.vsftpd手工利用 攻击机kali:192.168.182.133 靶机metasploit:192.168.182.128 先ping一下靶机看看靶机是否存活 接着使用nmap对靶机进行信息收集 这里可以看到版本是vsftpd2.3.4 漏洞是存在的 直接ftp连接靶机 用户名:user:) 密码随意…...

赶紧收藏!javasocket聊天室和私聊

前言 这些算法,都是小编一点一点看的大佬们的方法,自己积累的. 如果有什么描述的不对的地方还望大佬赐教 多交流才能进步,加油,冲冲冲!!! RPC概述 RPC(Remote Procedure Call)即远程过程调用&a…...

python笔记--使用solve算出黄金分割比近似值

参考百度百科: 黄金分割是指将整体一分为二,较大部分与整体部分的比值等于较小部分与较大部分的比值,其比值约为0.618。 这个比例被公认为是最能引起美感的比例,因此被称为黄金分割。 因此列方程: (设x为较大部分, y为较小部分) 其中: x y …...

洛谷:P1831 杠杆数(数位dp)

文章目录描述解析代码thanks for reading!传送门描述 如果把一个数的某一位当成支点,且左边的数字到这个点的力矩和等于右边的数字到这个点的力矩和,那么这个数就可以被叫成杠杆数。 比如4139就是杠杆数,把3当成支点&#xff0c…...

<form>标签

HTML-表单 1. 在HTML标签中,<form>标签用来定义表单&#xff0c;来实现用户信息的收集和传递。 <form action"url地址" method"提交的方式" name"表单的名称"></form> 比较get和post&#xff1a; 2. 表单能够包含 input 元…...

.NET 6程序部署到Docker

使用Docker部署应用程序 首先确保已经安装Docker 桌面软件&#xff0c;如下图&#xff1a; 然后&#xff0c;把需要部署到Docker上面的项目&#xff0c;咱们先添加Docker的支持&#xff0c;启动项目右键 -> 添加 -> Docker支持&#xff0c;选择 Linux 然后会自动生成Doc…...

如何抓取modem开机log

1. adb root 2. adb shell cat /sys/bus/msm_subsys/devices/subsys*/name 3. 根据2输出的结果从上往下数&#xff0c;从0开始数&#xff0c;数到modem是数字几&#xff0c;那么*号就用几来替代&#xff0c;比如数到moddem是3&#xff0c;那么modem对应的子系统就是subsys3 4…...

HTML5详解 (前端)

什么是HTML 超文本标记语言 Hyper Text Markup Language W3C 万维网联盟 标准包括&#xff1a; 结构化标准语言&#xff08;HTML、XML&#xff09;表现标准语言&#xff08;CSS&#xff09;和行为标准&#xff08;DOM、ECMAScript&#xff09; 新建project HTML 删除SRC文件…...

三维点集拟合:平面拟合、RANSAC、ICP算法

三维点集拟合&#xff1a;平面拟合、RANSAC、ICP算法 一、拟合一个平面 空间平面方程的一般表达式为&#xff1a;AxByCzD0; 则有&#xff1a;平面法向量为n&#xff08;A,B,C&#xff09;. 第一种方法&#xff1a;对于空间中n个点&#xff08;n3&#xff09; 空间中的离散…...

Eclipse IDE 集成 WebLogic Server 14

本文介绍了如何将在 Java SE 11 上运行的 WebLogic Server 14.1.1.0.0 与 Oracle Enterprise Pack for Eclipse (OEPE) 12.2.1.0 集成到最新支持的 Eclipse IDE for Java EE Developers 版本中。 您需要从获取所有部分开始 - Java SE Development Kit、WebLogic Server、Eclips…...

每日一题:LeetCode 146 LRU缓存

运用你所掌握的数据结构&#xff0c;设计和实现一个 LRU (最近最少使用) 缓存机制 。 实现 LRUCache 类&#xff1a;LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0…...

链表 + 数组模拟链表

链表的指针实现 1.指针 #include<iostream> using namespace std; int main(){int a 5;int *p; // int 型的指针double *q; //double 型的指针p &a;// cout << p 指向 acout << *p << endl; //间接输出 areturn 0; }2.申请动态内存&#xff08…...

boost::geometry::detail::overlay::approximately_equals用法的测试程序)

boost::geometry::detail::overlay::approximately_equals用法的测试程序 实现功能C++实现代码实现功能 boost::geometry::detail::overlay::approximately_equals用法的测试程序) C++实现代码 #include <geometry_test_common.hpp> #include <boost/geometry/algo…...

boost::geometry::model::multi_polygon用法的测试程序

boost::geometry::model::multi_polygon用法的测试程序 实现功能C++实现代码实现功能 boost::geometry::model::multi_polygon用法的测试程序 C++实现代码 #include <algorithms/area/test_area.hpp> #include <boost/geometry/geometries/geometries.hpp> #inc…...

boost::geometry模块使用 Karney 的直接方法

boost::geometry模块使用 Karney 的直接方法 实现功能C++实现代码实现功能 boost::geometry模块使用 Karney 的直接方法 C++实现代码 #include <boost/geometry.hpp> #include <boost/geometry/formulas/karney_direct.hpp> using namespace boost::geometry; i…...

Ways to Encrypt Password on Server

Background: the history of store password in server, starts with plain text, to MD5, SHA-1, SHA-2, to add salt/pepper/multihashing, to bcrypt/Argon2id etc. Best way so far to encrypt password on server : use bcrypt(unless have specific reasons not to do...

【社区周会】2021-06-01 内容概要

工程进展 工程周报更新时间&#xff1a;9:00AM PT (16:00UTC, 悉尼11,北京8, 希腊3, 阿姆斯特丹2, 奥尼查1, 纽约-4, 西雅图-7)&#xff0c;Zoom直播地址可在YouTube&#xff1a;Casper频道 查阅本周及过往更新。 执行 1.3.x版本周期第三周冲刺已由收尾过渡到集成测试阶段。…...

【GIT】OpenSSL SSL_read: Connection was reset, errno 10054

问题描述 从远程仓库拉取项目时报错 fatal: unable to access https://github.com/Henry-chr/godone.git/: OpenSSL SSL_read: Connection was reset, errno 10054解决方案 造成这个错误很有可能是网络不稳定&#xff0c;连接超时导致的&#xff0c; 再次尝试后成功同步远程…...

Vuex的作用、使用、核心概念(State、Mutations、Getters、Actions、Modules)、文件抽离

vue入门–基础命令axios案例练习 vue入门–vue常用属性、生命周期、计算属性、过滤器、组件、虚拟DOM、数组的响应式方法、页面闪烁、ES6简单语法增强 vue入门–js高阶函数(箭头函数)、v-model数据绑定、组件化、父子组件通信及访问 vue入门–插槽(具名、匿名、作用域插槽)E…...

Vuex入门(二)—— mutations详解

目录 知识不足的地方赶快点击学习呦~~~ Vuex入门(一)—— state,mapState,…mapState对象展开符详解 Vuex入门(二)—— mutations详解 Vuex入门(三)—— getters,getters,…getters对象展开符详解 Vuex入门(四)—— action和…mapActions详解 Vuex入门(五)—— 封装module全网最…...

mutations的类型常量

mutations的类型常量 在使用mutations属性的过程中&#xff0c;在index.js文件中定义好mutations属性后&#xff0c;需要在组件中调用&#xff0c;使用this.$store.commit函数来调用&#xff0c;这种方法容易在调用mutations的函数时写错函数名使用类型常量来进行mutations属性…...

Vuex快速上手,state、getter、Mutations、Actions

​ Vuex是应用程序的状态(state)管理器 。它采用集中式存储、管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 ​ 把vue应用的数据放在一个地方管理。 每一个vue的组件都可以有data项&#xff08;有自己的数据&#xff09;&#xff…...

clickhouse Mutations删除操作报错及解决方案

1. clickhouse 执行删除语句后查询数据仍旧存在&#xff0c;等待数分钟后依然存在 2. 查询 system.Mutations 表 sql select * from system.mutations whereis_done 0;发现任务在突变表中状态一直是未执行 3. 查阅 /var/log/clickhouse-server/clickhouse-server.err.log 日…...

clickhouse停止和避免mutations操作

问题描述 在使用clickhouse时&#xff0c;使用了alter查询的delete和update操作进行数据的删除和更新&#xff0c;当大量使用这类操作时&#xff0c;造成clickhouse服务无法连接&#xff0c;观察日志发现&#xff0c;出现了大量mutation的操作&#xff0c;严重占用clickhouse资…...

VueX的mutations、actions

一、更改Vuex的store中的状态的唯一方法是提交mutation。Vuex中的mutation非常类似于事件&#xff1a;每个mutation都有一个字符串的事件类型和一个回调函数&#xff0c;这个回调函数就是我们实际进行状态更改的地方&#xff0c;并且他会接受state作为第一个参数。 1、提交载荷…...

Vuex中的mutations

1、Mutation介绍 Vuex的store状态的更新唯一方式&#xff1a;提交Mutation 2、Mutation的使用 1、无参数的状态更新 mutation的定义方式&#xff1a; 通过mutation更新&#xff1a; 具体流程如下&#xff1a; 2、Mutation传递参数 在通过mutation更新数据的时候, 有可能我们希…...

Vuex的使用(十)——mutations和actions的返回值测试

参考文档&#xff1a;https://vuex.vuejs.org/zh/guide/ 在官方网站中有关于actions返回结果的例子&#xff0c;但却没有mutations返回结果的例子&#xff0c;经过笔者的验证发现&#xff1a; actions允许返回结果&#xff0c;但mutations不允许返回结果&#xff08;即使写了…...

mutations vuex 调用_vuex 怎么在actions中调用mutations中的函数?

1、流程顺序“相应视图—>修改State”拆分成两部分&#xff0c;视图触发Action&#xff0c;Action再触发Mutation。2、角色定位基于流程顺序&#xff0c;二者扮演不同的角色。Mutation&#xff1a;专注于修改State&#xff0c;理论上是修改State的唯一途径。Action&#xff…...

vuex mutations commit

Mutations 在 Scrimba 上尝试这节课 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件&#xff1a;每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方&…...

vuex基础mutations和actions

state数据的修改只能通过mutations&#xff0c;并且mutations必须是同步更新&#xff0c;目的是形成数据快照 数据快照&#xff1a;一次mutation的执行&#xff0c;**立刻**得到一种视图状态&#xff0c;因为是立刻&#xff0c;所以必须是同步。 **定义mutations** const st…...

【vuex状态管理案例mutations和actions区别】

目录 vuex 状态管理 传统组件传值的缺点 案例 加减 效果 现在我们希望它是两个计数器的数同时加加减~ 先来看一下减的 父组件 子组件 加的是一样的逻辑哦 虽然这样可以实现我们想要的效果但是&#xff0c;还是感觉很繁琐&#xff0c;传来传去的麻烦… 下面我们用vu…...

mutations vuex 调用_在Vuex使用 以及 dispatch和commit来调用mutations的区别

main.js中import Vuex from vuexVue.use(vuex);const store new Vuex.store({state: {nickName: "",cartCount: 0},mutations: {updateUserInfo(state,nickName) {state.nickName nickName;},updateCartCount(state,cartCount) {state.cartCount cartCount;}},act...

mutations vuex 调用_vuex的mutations与actions的使用测试

vuex的mutations与actions的使用测试这里不谈vuex如何使用等问题&#xff0c;只讨论 mutaions 中定义的方法需要在 actions 中进行转发一下吗&#xff1f;mutations: {muFn (state, data) {state.data data}}actions: {muFn ({commit}, data) {commit.muFn(data)}}现在纠结点在…...

vuex 中的mutations

在vuex中想改变state中的状态往往通过一个叫做mutations的东西进行操作 官方文档如下 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件&#xff1a;每个 mutation 都有一个字符串的事件类型 (type)和一个回调函数 (handler)。这个回…...

mutations vuex 调用_Vuex之理解Mutations的用法实例

1.什么是mutations&#xff1f;通俗的理解mutations,里面装着一些改变数据方法的集合&#xff0c;这是Veux设计很重要的一点&#xff0c;就是把处理数据逻辑方法全部放在mutations里面&#xff0c;使得数据和视图分离。2.怎么用mutations&#xff1f;mutation结构&#xff1a;每…...

vuex的mutations

vuex 的严格模式strict: true下&#xff0c;不允许组件修改state中的值&#xff0c;若需要修改&#xff0c;在vuex的mutations属性中进行修改。 注意&#xff1a;只能在mutations下的函数进行修改&#xff0c;如果mutations下的函数的函数进行修改也是会报错的 &#xff08;1…...

mutations vuex 调用_Vuex的mutations与actions使用详解 -

这次给大家带来vuex使用步骤详解&#xff0c;vuex使用的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。vuex是一个专门为vue.js设计的集中式状态管理架构。状态&#xff1f;我把它理解为在data中的属性需要共享给其他vue组件使用的部分&#xff0c;...…...

mutations vuex 调用_Vuex中的Mutations的具体使用方法

在 Vuex 中 store 数据改变的唯一方法就是提交 mutations。mutations里面装着一些改变数据方法的集合&#xff0c;这是Vuex 设计很重要的一点&#xff0c;就是把处理数据逻辑方法全部放在 mutations 里面&#xff0c;使得数据和视图分离。Mutations使用Vuex 中的 mutations 非常…...