python最小二乘拟合圆_点云球面最小二乘拟合的python实现

该博客介绍了如何使用Python进行点云数据的球面最小二乘拟合,通过数学推导和代码实现,详细解释了求解球心坐标和半径的过程。
摘要由CSDN通过智能技术生成

问题

现有近似分布在球面上的点云,试进行球面拟合,求出球心坐标和半径。

球面方程为:

其中 是我们要求的参数。

利用求偏导的方式求最小值

构造方程:

使方程 值最小的参数 就是我们的所求。

求偏导并使其等于0:

化简得:

整理得:

分别减去 (4) 式最终可以得到如下线性方程组:

解此线性方程组即可得到坐标 ,再代回 (4) 式求出 即可。

利用最小二乘法求解矩阵

也可以直接对球面的方程进行拟合,每一个点云坐标对应一个方程,方程数显然大于未知数,可以利用最小二乘法进行求解出一个最小值。

将方程稍微化简可得:

将每一个点坐标代入得到一个 的矩阵 A:

方程两边同时左乘以 可以得到和第一种方法一样的方程,或者直接用公式 进行求解,这两种方法在本质上是完全一样的。

python实现

针对第一种方法的具体代码import numpy as np

points = np.array(coor) # coor为点云坐标的列表

points = points.astype(np.uint64) # 防止溢出

num_points = points.shape[0]

print(num_points)

x = points[:, 0]

y = points[:, 1]

z = points[:, 2]

x_avr = sum(x) / num_points<

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值