gpt4 book ai didi

python - 圆检测的最小二乘法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:36:43 26 4
gpt4 key购买 nike

我正在尝试对数据点的一个子集使用最小二乘优化从激光扫描中执行圆检测。由于仅对圆的一部分进行测量,因此最小二乘法返回错误结果,报告圆比实际距离激光更近。

算法的结果如图所示。散点表示激光测量值,圆圈以算法返回的点为中心。灰色半透明形状表示机器人进行扫描(激光在此形状的左侧和右侧)。

我只对已知半径 RR 的圆的局部坐标感兴趣。

附言。我假设扫描被分成簇(self.clusters[i] 是一个簇),它们是 [x,y] 激光点的列表

def circle(x, scan):
xc, yc = x
f = sqrt((scan[:,0] - xc)**2 + (scan[:,1] - yc)**2) - RR
return f


def optimize_detect_circles(self):

centre = [1,1]

for i in range(0, self.number_of_clusters):
range_points = np.array(self.clusters[i])

sol = optimize.root(circle, centre, args=(range_points), method='lm')
self.circle_candidates.append(sol.x)
print sol.x

这是图片:

enter image description here

最佳答案

1,1 离正确值太远;你很可能会陷入局部最优。

尝试从离真实中心更近的点开始。您可以通过首先将一条直线拟合到您的集群来找到它;然后将点分成两半,根据它们转换到线的哪一半;接下来适合两行,每行到新的两个子集群之一;求两条垂线在中点的交点。

这是基于您的集群是跨度不大于 180 度的弧形,它们看起来确实如此。如果不是,只需重复分割,得到四个和弦而不是两个。

关于python - 圆检测的最小二乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29850157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com