设有n个数据点Pi(xi,yi,zi).
假设平面方程为:a*x+b*y+c*z+d=0,其中a、b、c、d为待定系数a、b、c不能同时为0.
显然,a*x+b*y+c*z+d=0与
k*a*x+k*b*y+k*c*z+k*d=0(k≠0)
表示同一个平面.故,如d不为0,可通过把方程两边同除以d,把常数项化为1;但d=0时,情况稍微复杂一点.
现在说明大致思路,为讨论方便,开始时暂不假设d=1或0.
设拟合平面的方程为∏:a*x+b*y+c*z+d=0.
数据点Pi到平面a*x+b*y+c*z+d=0的距离设为di,
则di^2=(a*xi+b*yi+c*zi+d)^2/(a^2+b^2+c^2),
令L=∑di^2 (i=1,...,n),为目标函数,现欲使L最小.
L可以看成是关于(a,b,c,d)的函数((xi,yi,zi)均已知),
L取最小值的一个必要(非充分)条件是:
∂L/∂a=0,∂L/∂b=0,∂L/∂c=0,∂L/∂d=0,
∂L/∂a=∑2*xi*(a*xi+b*yi+c*zi+d)/(a^2+b^2+c^2) (i=1,...,n)
=A1*a+B1*b+C1*c+D1*d,
其中,
A1=2/(a^2+b^2+c^2)*(∑xi^2)(i=1,...,n),
B1=2/(a^2+b^2+c^2)*(∑xi*yi)(i=1,...,n),
C1=2/(a^2+b^2+c^2)*(∑xi*zi)(i=1,...,n),
D1=2/(a^2+b^2+c^2)*(∑xi)(i=1,...,n),
同理,
∂L/∂b=A2*a+B2*b+C2*c+D2*d,
∂L/∂c=A3*a+B3*b+C3*c+D3*d,
其中,
A2=2/(a^2+b^2+c^2)*(∑yi*xi)(i=1,...,n),
B2=2/(a^2+b^2+c^2)*(∑yi^2)(i=1,...,n),
C2=2/(a^2+b^2+c^2)*(∑yi*zi)(i=1,...,n),
D2=2/(a^2+b^2+c^2)*(∑yi)(i=1,...,n),
A3=2/(a^2+b^2+c^2)*(∑zi*xi)(i=1,...,n),
B3=2/(a^2+b^2+c^2)*(∑zi*yi)(i=1,...,n),
C3=2/(a^2+b^2+c^2)*(∑zi^2)(i=1,...,n),
D3=2/(a^2+b^2+c^2)*(∑zi)(i=1,...,n),
∂L/∂d=∑2*(a*xi+b*yi+c*zi+d)/(a^2+b^2+c^2) (i=1,...,n)
=D1*a+D2*b+D3*c+D4*d,
其中,D4=2n/(a^2+b^2+c^2).
于是有方程组:
A1*a+B1*b+C1*c+D1*d=0,
A2*a+B2*b+C2*c+D2*d=0,
A3*a+B3*b+C3*c+D3*d=0,
D1*a+D2*b+D3*c+D4*d=0,

解此方程组即可.具体如何解,可参考计算方法的书,上面有详细说明.

千万注意:上述矩阵的秩rank<=3, 会的人立刻明白怎么结算了,不会的留言吧.

最小二乘法平面方程拟合计算, 点云法向量估算相关推荐

  1. 多点平面方程拟合c语言,多点最小二乘法平面方程拟合计算

    <多点最小二乘法平面方程拟合计算>由会员分享,可在线阅读,更多相关<多点最小二乘法平面方程拟合计算(5页珍藏版)>请在人人文库网上搜索. 1.平面方程拟合计算平面方程的一般表达 ...

  2. Open3d系列 | 1. Open3d实现点云数据读写、点云配准、点云法向量计算

    如有错误,恳请指出. 从这一篇博客开始,开始利用Open3d来处理点云数据.之后将围绕点云数据的多种处理方式来记录笔记.本篇博客的内容包括点云的文件格式介绍,点云数据的读取,以及点云的配准与点云的法向 ...

  3. matlab 点云法向量计算和用箭头显示

    matlab 点云法向量计算和用箭头显示 点云法向量估计的方法有很多,应用最广泛和普遍的是,基于平面拟合的法向量计算,也就是基于PCA的法向量计算.当计算某个点的法向量时,首先,找到最近的K个点,然后 ...

  4. 点云法向量与点云平面拟合的关系(PCA)

    点云法向量估计的主要思路是对K-近邻的N个点进行平面拟合(平面过N点重心),平面法向量即为所求:所以求法向量就是变相的求拟合平面. 下面我们用最小二乘法求k近邻点云的拟合平面: 当 ||x||=1时, ...

  5. 基于ENVI/IDL 的一键化实现LST-NDVI的干湿边方程拟合,并得到TVDI计算结果图

    ENVI/IDL (5.3版本)一键化实现LST-NDVI的干湿边方程拟合,并得到TVDI计算结果图 0 原理介绍 利用IDL将NDVI异常值进行剔除,NDVI取值范围为0.2~1(植被覆盖区),对反 ...

  6. Meshlab读取三维点云、三维点云重建以及三维点云法向量计算

    Meshlab是一个强大的三维模型处理的软件,在三维点云的处理方面也十分强大,不仅仅可以用三维点云重构出三维模型,还可以计算出三维点云每个点的法向量,这在逆向工程和基于三维点云的隐式曲面重建中非常有用 ...

  7. MeshLab学习笔记——三维点云重建以及三维点云法向量计算

    Meshlab是一个强大的三维模型处理的软件,在三维点云的处理方面也十分强大,不仅仅可以用三维点云重构出三维模型,还可以计算出三维点云每个点的法向量,这在逆向工程和基于三维点云的隐式曲面重建中非常有用 ...

  8. pcl计算点云法向量

    最近因为项目,需要计算点云的法向量,所以在网上看了一些资料,然后知道pcl库里面有这些功能,pcl的法向量计算的原理: pcl里面计算点云(自己的理解) 根据顶点采样最近的局部点云(k个),根据自己的 ...

  9. OpenCV 最小二乘+距离最小拟合圆

    OpenCV 最小二乘+距离最小拟合圆 一. 最小二乘算法 二. 距离最小算法 三. 还可以优化吗 我们经常需要由给定的点精确地拟合出一个圆, 下面讲解从 最小二乘算法 到 距离最小算法 的实现过程, ...

  10. PCL教程指南-估计点云法向量

    PCL教程指南-Estimating Surface Normals in a PointCloud(估计点云法向量) 官方原文档 点云法向指每个点的法向量,它是基于各点所在邻域范围内估计而出,常用方 ...

最新文章

  1. 大厂面试通关图鉴:骚话走一走,百万薪到手!
  2. Hibernate 的getHibernateTemplate()方法使用
  3. JS一起学04:函数返回值、定时器、随机数、自动播放的幻灯片
  4. linux 终端报错 Out of memory: Kill process[PID] [process name] score问题分析
  5. WPF制作子窗体的弹出动画效果
  6. javascript --- 异步工作流的动态排队技术
  7. python stringstrip方法详解_Python 基础知识全篇-字符串(Strings)
  8. Python_迭代器和生成器的复习_38
  9. git进入项目目录 windows_Windows下Git 怎么整个文件夹目录上传到代码仓库(不论GitHub、GitLab、Gitee、DevCloud)...
  10. python `__format__`
  11. 【每日算法Day 71】面试官想考我这道位运算题,结果我给出了三种解法
  12. JSP — 知识总结篇《I》【基础语法】
  13. 苹果电脑如何查看本机IP地址和DNS?
  14. 数字信号处理实验集合
  15. 三、unaipp小程序二维码生成
  16. jsoncpp操作类
  17. [概率练习] n个小球放入m个盒子(8大类)
  18. Visual Studio 2022自定义(透明)主题和壁纸完整版
  19. 把QUERY的输出结果作为数据源_小七_新浪博客
  20. Python 唤起QQ对话框 QQ客服效果

热门文章

  1. 万娟 白话大数据和机械学习_白话大数据与机器学习 (高扬著) 带书签目录 完整pdf扫描版[71MB]...
  2. 物理不好适合学计算机,理科女物理不好、数学一般,能不能学计算机、经济学专业?...
  3. PNAS | 富含亮氨酸重复序列延伸蛋白调节拟南芥耐盐性
  4. 法律养成——刑法(一)
  5. iOS - 毛玻璃效果
  6. Android10.0应用图标隐藏方案(7.0-10.0)
  7. inno setup制作的安装包,安装后以管理员身份启动
  8. 面向对象的系统分析(一)-系统分析方法
  9. 乔布斯斯坦福大学演讲
  10. TensorFlow 2 实现线性回归和非线性回归