RANSAC算法思想与实现点云粗配准

一 RANSAC算法思想与基本流程

1.1 算法思想

RANSAC(RAndom SAmple Consensus,随机采样一致)是一种随机参数估计算法。RANSAC从样本中随机抽选出一个样本子集,使用最小方差估计算法对这个子集计算模型参数,然后计算所有样本与该模型的偏差,再使用设定好的阈值与偏差进行比较,当偏差小于阈值,该样本点属于模型内样本点,称为内点,否则为外点,每次迭代都记录当前内点个数,根据期望的误差率、内点数、总样本数、当前迭代次数设置一个迭代结束判断条件。迭代结束后,最佳模型就是内点个数最多的点云估计的模型(即共识集最大的那个内点数,拿来作为输入,求咱们的参数模型)。

1.RANSAC使用的前提是待估计模型已知,经常用于二维图像中直线、圆的拟合等等,只要。所以在点云处理中也经常被用于三维平面、球的估计,因为这些几何物体是可以用数学模型描述的。
2.即使一个点云中包含了多个平面或球等几何物体,那么可以使用RANSAC将各个集合物体逐个求出,每求得一个几何物体可以将其点云删除,再进行下一次的求解。


换个角度来理解:
RANSAC算法是从一组含有“外点”(outliers)的数据中正确估计数学模型参数的迭代算法。“外点”一般指的的数据中的噪声,比如说匹配中的误匹配和估计曲线中的离群点。所以,RANSAC也是一种“外点”检测算法。RANSAC算法是一种不确定算法,它只能在一种概率下产生结果,并且这个概率会随着迭代次数的增加而加大(之后会解释为什么这个算法是这样的)。RANSAC算最早是由Fischler和Bolles在SRI上提出用来解决LDP(Location Determination Proble)问题的。

对于RANSAC算法来说一个基本的假设就是数据是由“内点”和“外点”组成的。“内点”就是组成模型参数的数据,“外点”就是不适合模型的数据。同时RANSAC假设:在给定一组含有少部分“内点”的数据,存在一个程序可以估计出符合“内点”的模型。

1.2 算法基本思想和流程

RANSAC是通过反复选择数据集去估计出模型,一直迭代到估计出认为比较好的模型。
具体的实现步骤可以分为以下几步:

1.选择出可以估计出模型的最小数据集;(对于直线拟合来说就是两个点,对于计算Homography矩阵就是4个点,点云配准就是需要三个对应点)
2.使用这个数据集来计算出数据模型;
3.将所有数据带入这个模型,计算出“内点”的数目(小于自己设定的误差阈值,则认为是内点)。
4.比较当前模型和之前推出的最好的模型的“内点“的数量,记录最大“内点”数的模型参数和“内点”数;
重复1-4步,直到迭代结束或者当前模型已经足够好了(设定一个自己看重的迭代结束判断条件,比如说:内点数目大于一定数量或就指定迭代多少次)。

这个误差阈值的设定很有讲究,根据模型的不同,设定都不太一样(但基本都是拿距离来衡量把),打几个比方:
1.我要做直线拟合,那么随机找了两个点来拟合求出参数以后,然后计算所有点到这条直线的距离,满足自己设定的阈值就可以称为内点。
2.我要做圆的拟合,那么随机找了三个点来拟合求出参数以后,然后把所有点都带到这个拟合的方程里面去,与求出的圆的半径r比较(比如作差的绝对值),满足自己设定的阈值就可以称为内点。

二 RANSAC实现点云粗配准算法流程(RANSAC具体到点云配准了)

  1. 在对应点集中随机选取3个对应点对,并求解刚体变换矩阵。
  2. 计算对应点中剩余点对,在上一步所求的刚体变换矩阵的作用下点对的距离误差,若其中一点对的距离误差小于设定的阅值误差,则该点为样本内点,否则为样本外点,并统计前者数目。
  3. 重复以上步骤直至抵达选代次数的上限。统计不同刚体变换模型下的样本内点数量,样本内点数量最多的作为最佳数学模型输入,然后进行计算点云配准操作(比如同svd求解变换矩阵T)。

优点

  1. RANSAC通常产生更好的结果,即使在无噪声的情况下
  2. RANSAC不需要两个数据集之间的变换的良好初始估计
  3. RANSAC可用于不具有那么多局部特征的数据集

参考文章:
1.RANSAC实现点云粗配准:https://blog.csdn.net/qq_40301351/article/details/124400499
2.RANSAC算法详解(附Python拟合直线模型代码):https://zhuanlan.zhihu.com/p/62238520
3.点云模型估计(RANSAC):https://zhuanlan.zhihu.com/p/357970385

你可能感兴趣的:(算法,机器学习,人工智能)