最小二乘法计算平面度

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

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

{ Δ F Δ a = Σ i = 1 n 2 x i ( a x i + b y i − z i + c ) = 0 Δ F Δ b = Σ i = 1 n 2 y i ( a x i + b y i − z i + c ) = 0 Δ F Δ c = Σ i = 1 n 2 ( a x i + b y i − z i + c ) = 0 ⇓ 将 a , b , c 写 到 方 程 的 一 边 ( 便 于 写 成 矩 阵 形 式 进 行 求 解 ) { a Σ i = 1 n x i 2 + b Σ i = 1 n x i y i + c Σ i = 1 n x i = Σ i = 1 n x i z i a Σ i = 1 n x i y i + b Σ i = 1 n y i 2 + c Σ i = 1 n y i = Σ i = 1 n y i z i a Σ i = 1 n x i + b Σ i = 1 n y i + n c = Σ i = 1 n z i ⇓ [ Σ x i 2 Σ x i y i Σ x i Σ x i y i Σ y i 2 Σ y i Σ x i Σ y i n ] [ a b c ] = [ Σ x i z i Σ y i z i Σ z i ] \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=1n2xi(axi+byizi+c)=0ΔbΔF=Σi=1n2yi(axi+byizi+c)=0ΔcΔF=Σi=1n2(axi+byizi+c)=0a,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Σyinabc=ΣxiziΣyiziΣzi

此后就是求解 A x = b Ax=b Ax=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]**2
    A[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]**2
    A[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
  • 5
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值