在已知平面内数据点的三维坐标的情况下,求解平面方程的参数。已知平面的方程式为:
z=ax+by+cz=ax+by+c z=ax+by+c
通过深度相机检测到平面上的nnn个点云数据p(xi,yi,zi)p(x_{i},y_{i},z_{i})p(xi​,yi​,zi​)。通过最小二乘法,可以求解平面的参数:a,b,ca,b,ca,b,c,进而求解平面度。

  1. 定义单个数据点的误差项:δi=axi+byi−zi+c\delta_{i}=ax_{i}+by_{i}-z_{i}+cδi​=axi​+byi​−zi​+c
  2. 对于nnn组数据,定义所有数据的最小二乘问题:F(a,b,c)=Σi=1nδi2=Σi=1n(axi+byi−zi+c)2F(a,b,c)=\Sigma_{i=1}^{n}{\delta_{i}^2}=\Sigma_{i=1}^{n}(ax_{i}+by_{i}-z_{i}+c)^2F(a,b,c)=Σi=1n​δi2​=Σi=1n​(axi​+byi​−zi​+c)2
  3. 平面方程的自变量为a,b,ca,b,ca,b,c且不相关,让F(a,b,c)F(a,b,c)F(a,b,c)分别对a,b,ca,b,ca,b,c求导,并使其为0。

{ΔFΔa=Σi=1n2xi(axi+byi−zi+c)=0ΔFΔb=Σi=1n2yi(axi+byi−zi+c)=0ΔFΔc=Σi=1n2(axi+byi−zi+c)=0⇓将a,b,c写到方程的一边(便于写成矩阵形式进行求解){aΣi=1nxi2+bΣi=1nxiyi+cΣi=1nxi=Σi=1nxiziaΣi=1nxiyi+bΣi=1nyi2+cΣi=1nyi=Σi=1nyiziaΣi=1nxi+bΣi=1nyi+nc=Σi=1nzi⇓[Σxi2ΣxiyiΣxiΣxiyiΣyi2ΣyiΣxiΣyin][abc]=[ΣxiziΣyiziΣzi]\left \{ \begin{aligned} &\frac{\Delta F}{\Delta a}=\Sigma_{i=1}^{n}2x_{i}(ax_{i}+by_{i}-z_{i}+c)=0 \\ &\frac{\Delta F}{\Delta b}=\Sigma_{i=1}^{n}2y_{i}(ax_{i}+by_{i}-z_{i}+c)=0 \\ &\frac{\Delta F}{\Delta c}=\Sigma_{i=1}^{n}2(ax_{i}+by_{i}-z_{i}+c)=0\\ \end{aligned} \right .\\ \Downarrow \\ 将a,b,c写到方程的一边(便于写成矩阵形式进行求解) \\ \left \{ \begin{aligned} &a\Sigma_{i=1}^{n}{x_{i}^2}+b\Sigma_{i=1}^{n}{x_iy_i}+c\Sigma_{i=1}^{n}{x_i}=\Sigma_{i=1}^{n}{x_iz_i} \\ &a\Sigma_{i=1}^{n}{x_{i}y_{i}}+b\Sigma_{i=1}^{n}{y_{i}^{2}}+c\Sigma_{i=1}^{n}{y_i}=\Sigma_{i=1}^{n}{y_iz_i} \\ &a\Sigma_{i=1}^{n}{x_{i}}+b\Sigma_{i=1}^{n}{y_{i}}+nc=\Sigma_{i=1}^{n}{z_i}\\ \end{aligned} \right .\\ \Downarrow \\ \begin{bmatrix} \Sigma{x_{i}^2}&\Sigma{x_iy_i}&\Sigma{x_i}\\ \Sigma{x_{i}y_{i}}&\Sigma{y_{i}^{2}}&\Sigma{y_i}\\ \Sigma{x_{i}}&\Sigma{y_{i}}&n\\ \end{bmatrix} \begin{bmatrix} a\\b\\c \end{bmatrix}=\begin{bmatrix} \Sigma{x_iz_i}\\ \Sigma{y_iz_i}\\ \Sigma{z_i}\\ \end{bmatrix} ⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧​​ΔaΔF​=Σi=1n​2xi​(axi​+byi​−zi​+c)=0ΔbΔF​=Σi=1n​2yi​(axi​+byi​−zi​+c)=0ΔcΔF​=Σi=1n​2(axi​+byi​−zi​+c)=0​⇓将a,b,c写到方程的一边(便于写成矩阵形式进行求解)⎩⎪⎨⎪⎧​​aΣi=1n​xi2​+bΣi=1n​xi​yi​+cΣi=1n​xi​=Σi=1n​xi​zi​aΣi=1n​xi​yi​+bΣi=1n​yi2​+cΣi=1n​yi​=Σi=1n​yi​zi​aΣi=1n​xi​+bΣi=1n​yi​+nc=Σi=1n​zi​​⇓⎣⎡​Σxi2​Σxi​yi​Σxi​​Σxi​yi​Σyi2​Σyi​​Σxi​Σyi​n​⎦⎤​⎣⎡​abc​⎦⎤​=⎣⎡​Σxi​zi​Σyi​zi​Σzi​​⎦⎤​

此后就是求解Ax=bAx=bAx=b的问题。

#-- coding:UTF-8 --
#空间平面的方程:z = ax + by + c
#目标:求解a,b,c的值
#已知条件:12个被测点的三维坐标
import numpy as np
p=[[0,0,3.52],[1,0,2.3],[2,0,-2.69],[0,1,-2.65],[1,1,3.25],[2,1,4.36],[0,2,-2.36],[1,2,4.56],[2,2,-3.54],[0,3,2.36],[1,3,-5.65],[2,3,2.59]]
n = len(p)
B=[0,0,0]
A = np.zeros((3,3),np.float32)
for i in range(n):B[0] = B[0] + p[i][0]*p[i][2]B[1] = B[1] + p[i][1]*p[i][2]B[2] = B[2] + p[i][2]A[0][0] = A[0][0] + p[i][0]**2A[0][1] = A[0][1] + p[i][0]*p[i][1]A[0][2] = A[0][2] + p[i][0]A[1][0] = A[0][1]A[1][1] = A[1][1] + p[i][1]**2A[1][2] = A[1][2] + p[i][1]A[2][0] = A[0][2]A[2][1] = A[1][2]A[2][2] = n
# 【1】计算拟合平面的系数a,b,c
x = np.matmul(np.linalg.inv(A),B)
print(B)
print(A)
print(x)# 【2】计算平面度
# 计算被一个被测点的实际高度Z与理想高度Zs之间的差值
# 平面度的值即为被测点最大差值与最小差值的差
delta = np.zeros((n,),np.float32)
for i in range(n):delta[i] = p[i][2] - (x[0]*p[i][0]+x[1]*p[i][1]+x[2])
print(delta)
flatness = max(delta) - min(delta)
print(flatness)
[5.899999999999999, 0.17999999999999616, 6.049999999999999]
[[20. 18. 12.][18. 42. 18.][12. 18. 12.]]
[-0.01875    -0.59300001  1.41241658]
[ 2.1075835   0.90633345 -4.0649166  -3.4694166   2.4493334   3.5780835-2.5864165   4.3523335  -3.7289166   2.7265835  -5.2646666   2.9940834 ]
9.617001

最小二乘法计算平面度相关推荐

  1. 点云数据Halcon生成3D,计算平面度,且可以计算特定区域平面度(纯C#)

    一.平面度算法思路 通过离散点拟合平面,也就是说,要找到一个平面z=ax+by+c,使这平面到各个点的"距离"最近,根据最小二乘法,,也就是说我们要求得一组a,b,c,使得对于已有 ...

  2. java计算平面度,关于平板平面度的计算方法?

    查看: 18220|回复: 71 [角度] 关于平板平面度的计算方法? 电梯直达 发表于 2014-2-18 14:16:41 | 只看该作者 |只看大图 |倒序浏览 |阅读模式 立刻注册计量论坛 交 ...

  3. java计算平面度,计算产品面的平面度和平行度(C#代码)

    和以前的同事聊了一下他最近的项目,需要求产品的平面度.也就是产品本身是否面不平整,对于在这个平面上安装摄像头之类的元件来说,这个平面度是受工艺管控的. 这个同事学校刚毕业没多久,学习得蛮快的,一年左右 ...

  4. 帮我写一个计算平面度的C#程序

    语言程序 #include <stdio.h> int main(){ int a,b,c; printf("请输入三个整数:"); scanf("%d %d ...

  5. 两平面平行方向向量关系_一文读懂 GDT 中的平面度

    本文从以下方面介绍平面度: 1. 数学定义(文末附带向量基础知识) 2. 接触模拟方法 3. 图纸标注 4. 应用场合 5. 取值方法 6 加工方法 7. 测量方法 一.数学定义 马克思有句名言:一门 ...

  6. PCL最小二乘法进行平面拟合原理

    最小二乘法进行平面拟合原理 1 最小二乘原理 2 最小二乘拟合平面 1 最小二乘原理 最小二乘法(又称最小平方法)是一种数学优化技术.它通过最小化误差的平方和寻找数据的最佳函数匹配.利用最小二乘法可以 ...

  7. Matlab 最小二乘法 拟合平面

    一.原理推导 最小二乘法 拟合平面是我们最常用的拟合平面的方法,但是有特殊的情况是用这种方法是不能拟合的,后续会加上这种拟合方法(RANSAC). matlab 最小二乘拟合平面(方法一) - 灰信网 ...

  8. 3D点云处理:平面度|平行度(增加精度的平行度优化)|平面之间的夹角|点到平面的投影点

    文章目录 1. 平面度 2. 平行度 3. 两平面之间的夹角 4. 点到平面的投影 5. 代码实现--平面度|平行度(增加精度的平行度优化)|平面之间的夹角|点到平面的投影点 1. 平面度 根据最新I ...

  9. 平板 matlab,MATLAB实现平板平面度数据处理

    计算机光盘软件与应用 2011年第16期 工程技术 Computer CD Software and Applications MATLAB实现平板平而度数据处理 李明贵 (贵州省机械电子产品质量监督 ...

  10. RationalDMIS2023平面度评价算法选择2023

    平面度公差界面增加算法设置:least square / Min plane separation / Tangent plane: 默认设置为是"Min plane separation& ...

最新文章

  1. We PE U盘安装win7系统
  2. docker基础 (狂神说)
  3. html自动兼容像素密度,解决 HTML Canvas 元素在高像素密度/高分辨率屏幕上显示模糊的问题...
  4. 以58帮帮为例看58同城典型技术架构演变
  5. [kuangbin带你飞]专题四 最短路练习 B( POJ 2253) Frogger(spfa)
  6. poj2823 线段树模板题 点修改(也可以用单调队列)
  7. Chrome DevTools:在 Profile 性能分析中显示原生 javascript 函数
  8. 从人人网抓取高校数据信息,包括,省份 - 高校 - 院系 (提供最终SQL文件下载)...
  9. C++开发中的pImpl方法
  10. 余敖的实验整理(还没完成)
  11. python3连接mysql使用mysqldb_Python3 连接Mysql数据库
  12. anaconda环境中使用sudo python报错
  13. 爱上MVC系列~过滤器实现对响应流的处理
  14. java计算机毕业设计西藏民族大学论文管理系统源程序+mysql+系统+lw文档+远程调试
  15. 超大附件上传、下载特别慢,怎么破?
  16. 申请高德地图开发key
  17. Spring Data -Specification用法和常用查询方法(in,join,equal等)
  18. python处理txt文件的常用操作
  19. Node Sass could not find a binding for your current environment
  20. 网络编程学习笔记-套接字编程-socket

热门文章

  1. Matlab PCA+SVM人脸识别(二)——GUI界面设计
  2. 网络调试助手连接mysql_网络调试助手模拟MQTT协议连接百度物联网并操作时序数据库...
  3. (原创)AP6212蓝牙模块在am335x控制板上的应用
  4. [设计素材]你也在找CTBiaoSongSJ吗?我这里有耶!
  5. 23种设计模式之软件设计模式的概念与意义
  6. 微信公众号开发支付功能调用
  7. java工程师优秀简历模板,这原因我服了
  8. 最大流最小割经典例题_最大流最小割基本
  9. CentOS7.5.1804 Minimal 静默安装oracle 12c R1企业版
  10. 计算机硬盘扇区修复,一文教你搞定硬盘上的坏扇区要怎么修复,如果从坏扇区修复数据!...