机器人学在Python中的实现(7):圆拟合方法物体形状识别

大家好,我是MPIG2018级研究生刘飞亚,在上一次的讲解中,我们讨论了光线投射栅格地图的相关内容;机器人在认识环境的过程需要地图的构建来感知周围环境。今天再来给大家介绍圆拟合,圆拟合的也是地图构建的一部分,通过圆拟合可以让机器人在环境中标记类圆物体,准确地识别物体能让机器人更好地描述环境,下面来看一下吧。

主要内容:

1、拟合圆的算法

2、Python中的实现

1、拟合圆的算法

大家都知道利用最小二乘法有中学时代学过的线性回归模型:线性回归利用一组散点数据,对整体趋势用一条拟合度很高的直线直观的表示了数据的走势,从而可以很好的认识观测数据。与线性回归模型类似,圆拟合简单来说就是用一组近似圆的观测值,对之进行耦合为圆。讲圆拟合之前,可以先了解这一段历史:

1801年,意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星。经过40天的跟踪观测后,由于谷神星运行至太阳背后,使得皮亚齐失去了谷神星的位置。随后全世界的科学家利用皮亚齐的观测数据开始寻找谷神星,但是根据大多数人计算的结果来寻找谷神星都没有结果。时年24岁的高斯也计算了谷神星的轨道。奥地利天文学家海因里希·奥尔伯斯根据高斯计算出来的轨道重新发现了谷神星。高斯使用的最小二乘法的方法发表于1809年他的著作《天体运动论》中。(来源:百科)

因为研究物体及其运动过程中,记录其所有的信息进行需要大量数据,如果只有部分的观测数据,但想对整体进行描述和预测,这就需要好的算法,本节中就用最小二乘法通过模拟数据集来估计类圆整体。

我们看一下具体算法思想:

我们假设通过传感器测出的类圆的数据,用坐标表示为xi,yi,(i=1,2,...),下图所示的散点:

蓝色圆:假设的实际的圆

红色圆:拟合的圆

怎么样才能找到最适合最符合实际圆的拟合圆呢?直观看肯定③图更合适,其实得到③图就是使这些数据集点与某个圆的边缘距离之和最小:(A,B)为拟合圆圆心,R为半径。

但是这样由于带根号后续不易计算。所以我们用到平方的差的再次平方作为函数求其中的变量A,B,R,使f取得最小。(因为平方的差也有正负,再次平方防止抵消

具体算法:

化简得:

解出a,b,c即可得到拟合圆的信息:A=,B=,R=

2、python实现圆拟合:

关键代码。T中的元素就是求得的参数a,b,c的值。error:准确误差函数

两个函数:用来取一组圆附近样点。相当于用传感器测一个物体的数据。

main函数用来生成初始圆、模拟的样点数据集和拟合圆。

拟合效果:

蓝色圆:实际圆

红色圆:拟合圆

红色x:模拟样点

想了解更详细内容,来看看我的Presantation吧:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181210G1HMQI00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券