识别圆的强化RANSAC算法

# 识别圆的强化RANSAC算法## 什么是RANSAC算法?​ **随机抽样一致算法(RANdom SAmple Consensus,RANSAC)**,是一种采用迭代的方式从一组包含噪音的数据中找到想要的数学模型。这个算法的使用前提是给定一组数据,存在一种方法能计算出符合这些数据的模型的参数。RANSAC算法把数据分为了两类,正确数据(内点)和异常数据(噪声),并通过一个参数sigma来将数据中的点分类。**该算法的核心思想在于其随机性和假设性**,随机性指的是抽象选取数据是随机的,根据...
摘要由CSDN通过智能技术生成

识别圆的强化RANSAC算法

什么是RANSAC算法?

​    随机抽样一致算法(RANdom SAmple  Consensus,RANSAC),是一种采用迭代的方式从一组包含噪音的数据中找到想要的数学模型。这个算法的使用前提是给定一组数据,存在一种方法能计算出符合这些数据的模型的参数。RANSAC算法把数据分为了两类,正确数据(内点)和异常数据(噪声),并通过一个参数sigma来将数据中的点分类。**该算法的核心思想在于其随机性和假设性**,随机性指的是抽象选取数据是随机的,根据大数定律,当样本足够大时,随机抽样可以得出近似正确的结果,而假设性指的是随机抽样的数据都假设为正确数据,根据给的阈值(sigma)来用数据集中的其他数据对随机抽样建立的模型进行评价,在反复抽样的过程中保留最优解,即是我们寻找的模型。

​    RANSAC算法一般用于直线拟合、平面拟合等方面。但对于识别圆形,RANSAC算法有一定的缺陷。为方便读者理解,我们从一个案例出发来阐述RANSAC算法拟合圆的缺点。

案例

​    在一个主要由直线搭建的场地中,存在一个圆(半径已知),我们要用一个带有激光雷达和stm32的小车在场地中寻找到这个圆。

​    简单分析一下,这个问题从算法层面可以拆分为两个基本算法,即RANSAC算法和人工势场法,后者的意义在于小车的运动,这里不过多论述,这里只讨论RANSAC算法。

​    由于小车带有激光雷达,我们将问题抽象出来,转化为,如何在一个有大量直线和一个圆的坐标系中找出圆心坐标。

方案一

  ​直接用RANSAC算法识别圆形,判定方式为按顺序等间距取点(考虑到激光雷达成图的特点),两点确定两圆,找出圆心后,由于半径已知,所以可以确定圆的位置,取一个合适的阈值sigma,从而找到内点。通过比较内点个数找到圆的模型。
  该方案存在两个问题,即由于激光雷达的特点,导致近处点密集且数量大,远处点稀疏且数量小。所以如果sigma是一个定值的话,可能会导致近处的直线会被判定为圆,远处的圆未被发现。所以考虑将sigma设置为一个随距离变化的函数。第二个问题是,如果点的数量较少,一个直角和一个圆在判定时是等价的。所以需要一个很大的数据集。但由于stm32单片机效率有限,所以我们考虑优化算法。这里提出了方案二。
​    

方案二

  由于RANSAC识别圆的效果不佳,我们考虑从直线出发,但由于对于一个弧度较大的弧形而言,RANSAC算法可能会将其识别为直线,所以我们改进了RANSAC算法,改进如下:设置一个数组储存所有点,表示该点在直线上的概率,当某点被判定为内点时,该点在数组中对应的元素+1。在遍历所有点后,我们可以绘制一个图,将该数组的大小转变为颜色的深浅,那么由于直线上有多个点,在遍历的时候会被多次调用,且直线上的点均为内点,故颜色较深,而由于遍历到圆上的点的时候,确定的直线都在圆的切线上,故圆的颜色较浅。那么可以排除掉直线。这里运用人工势场法可以让小车避开直线,即小车逐渐往存在圆的位置前进,此时在用方案一中识别圆的算法即可识别圆形。

代码展示

强化RANSAC算法版本

import numpy as np
import matplotlib.pyplot as plt


#数据接收和预处理
a = [0,1648,0,1650,0,1648,0,1650,0,1648,0,1650,2,1653,2,1653,4,1656,4,1656,4,1658,4,1656,4,1658,8,1480,8,1480,8,1480,10,1486,10,1486,18,1515,18,1515,36,873,36,871,36,870,38,848,38,818,38,820,40,799,40,796,40,796,42,777,42,757,42,775,42,756,42,775,44,742,44,739,44,756,46,731,46,720,48,703,48,688,50,675,52,663,52,650,54,640,56,632,58,627,114,596,114,598,116,604,118,613,118,622,120,631,120,624,120,632,122,641,122,651,122,642,122,652,124,661,124,664,126,674,126,676,128,688,128,701,128,689,128,704,130,715,130,717,130,733,132,730,132,747,132,751,134,764,134,785,134,768,134,787,136,805,136,809,138,824,138,848,138,830,140,873,140,852,140,879,142,905,144,937,144,938,146,920,146,919,148,905,148,889,148,903,148,887,150,877,150,876,152,867,152,865,160,243,160,239,162,243,162,239,164,238,164,239,164,237,166,240,166,243,166,237,166,239,168,241,174,770,174,769,174,770,174,770,176,769,176,769,178,769,178,770,178,769,180,771,180,770,180,771,182,772,182,774,182,772,184,777,184,775,184,777,186,782,186,782,194,385,194,385,194,382,196,373,196,375,198,371,198,373,200,373,200,378,204,918,204,920,206,933,206,935,208,947,208,963,208,950,208,966,210,980,210,981,212,998,212,1020,212,1001,212,1023,214,1042,214,1044,216,1065,216,1092,218,1114,226,239,226,235,228,235,230,234,230,234,232,222,232,220,234,217,234,216,238,1652,242,400,242,399,244,399,244,398,246,395,246,391,246,396,246,392,248,388,248,386,250,386,250,383,250,384,252,382,252,383,252,380,254,380,254,379,256,378,256,376,256,379,256,378,260,44,260,373,260,373,260,373,260,373,260,372,262,373,262,373,262,372,264,372,264,373,264,372,264,372,264,372,266,372,266,372,266,372,266,372,268,372,268,372,268,372,268,371,270,372,270,372,270,372,270,372,270,372,272,373,272,373,272,373,272,373,274,374,274,373,274,374,274,373,274,374,276,375,276,375,276,375,278,377,278,378,278,376,278,378,278,377,278,380,280,380,280,380,280,382,282,382,282,384,282,382,282,384,282,383,282,385,284,385,284,385,284,388,284,388,286,388,286,392,286,392,286,391,286,395,288,396,288,395,288,401,288,398,290,401,290,402,302,1496,304,1501,304,1474,304,1476,304,1495,304,1472,306,1466,306,1461,306,1458,308,1458,308,1452,308,1454,308,1453,308,1454,308,1453,312,925,312,924,312,924,314,905,314,889,314,904,314,885,314,904,314,888,316,872,316,867,316,872,318,854,318,839,318,853,318,842,318,853,318,839,320,826,320,823,322,808,322,806,324,791,324,777,324,792,324,774,324,785,324,775,326,763,326,765,328,763,328,762,328,765,340,1732,340,1731,342,1714,342,1696,342,1713,342,1696,342,1711,342,1694,344,1684,344,1684,344,1683,346,1674,346,1668,346,1674,346,1668,346,1674,346,1668,348,1666,348,1665,348,1665,350,1663,350,1662,350,1663,352,1651,352,1652,352,1651,354,1647,354,1647,354,1646,356,1644,356,1643,356,1643,356,1643,356,1644,356,1643,358,1645,358,1645,358,1645,0,1648,0,1650,0,1648]
b = [0,700,0,700,2,701,2,701,4,704,4,708,4,704,4,707,6,712,6,719,6,712,6,719,8,731,8,731,10,94,10,757,10,745,10,760,10,744,10,760,12,780,12,779,16,1574,18,1578,18,1586,82,1833,84,1816,84,1812,84,1823,84,1814,84,1828,84,1813,86,1809,86,1810,86,1811,88,1806,88,1804,88,1806,88,1804,88,1808,88,1804,90,1803,90,1803,90,1803,94,577,94,576,96,580,96,582,96,579,96,580,98,583,98,582,100,584,100,588,100,583,100,586,102,590,102,589,104,592,104,595,104,591,104,593,106,599,106,596,106,601,108,602,108,606,108,605,110,612,110,610,110,614,112,616,112,620,112,621,114,627,114,628,114,633,116,634,116,639,118,647,118,655,118,644,118,653,120,663,120,662,122,672,122,668,126,1616,126,1622,128,1573,130,1524,130,1487,130,1526,130,1486,132,1454,132,1454,134,1423,134,1397,134,1424,134,1398,136,1374,136,1374,138,1351,138,1331,138,1351,138,1330,140,1310,140,1310,142,1290,142,1271,142,1290,142,1271,144,1252,144,1234,144,1252,146,1214,146,1233,146,1213,148,1198,148,1187,148,1198,148,1186,150,1178,150,1176,152,1
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JY_JOKE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值