6个流行的直线提取算法——基于2D测距数据(摘自自主移动机器人导论)

来源:互联网 发布:一夫多妻 知乎 编辑:程序博客网 时间:2024/06/16 13:58

算法1:分裂——合并法
1.初始化:集合s_1由N个点组成。将s_1放入列表L
2.将一条直线拟合到L中的下一个集合s_i
3.检测距直线最远距离d_P的点P
4.果d_P小于一个阈值,继续(转到步骤2)
5.否则,将在P的s_i分裂为s_i1和s_i2,并以s_i1和s_i2取代L中的s_i,继续(转到步骤2)
6.当L中所有集合(直线段)都被检出,合并共线段

可在第3行对该算法稍作修改,以使它对噪声更鲁棒。确实,某些时候,分裂的位置是由一个点造成的,该点虽然仍属同一条直线,但由于噪声而出现在离这条直线太远的地方。这种情形下,我们扫描分裂的位置,在该位置,两个邻的点P_1和P_2处于直线的同侧,并且二者距直线距离都大于阈值。如果仅找到一个这样的点,那么我们将它作为一个噪声点,自动丢弃。
注意到,在第2行中,我们利用最小二乘法作直线拟合。换一种方法,也可简单地连接第一个和最后一个点来构建直线,在这种情形下,该算法成为迭代适应点算法,是实现分裂-合并法的一个良好的综合方法。


算法2:直线回归法
1.初始化大小为N_f滑动窗
2.每N_f个相继的点,拟合成一条直线
3.计算一个直线保真度阵列。阵列中每个元素含有每三个邻近窗口间的马氏距离和
4.扫描保真度阵列,寻找小于阈值的相继的元素以构建直线段
5.将重叠的直线段合并,并对各线段重新计算直线参数
马氏距离:有印度统计学家马哈拉诺比斯提出,表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧氏距离不同的是它考虑到各种特性之间的联系。马氏距离功能强大,甚至连欧氏距离都是马氏距离的特殊情形。
马氏距离定义:设总体G为m维总体(考察m个指标),均值向量为μ=(μ_1,μ_2,…μ_m )^',协方差矩阵为Σ=(σ_ij),则样品X=(x_1,x_2,…x_m)'与总体G的马氏距离定义为d^2 (X,G)=(X-μ)'Σ^(-1) (X-μ)。当m=1时,d^2 (x,G)=((x-μ)'(x-μ))/σ^2 =〖(x-μ)〗^2/σ^2

算法3:增量法
1.以最前面两个点开始,构建一条直线
2.在当前直线模型中,加入下一个点
3.用直线拟合,重新计算直线参数
4.如果满足预定义直线条件,继续(转到步骤2)
5.否则,放回最后的点;重新计算直线参数,返回直线
6.用接着的两点,继续转到步骤2




算法4 RANSAC(随机抽样一致性)
1.初始化:令A是N个点的集合
2.重复
3.从A中随机选择2点的样本
4.通过这2个点,拟合一条直线
5.计算所有其他的点到该直线的距离
6.构建有效数据集(即,总计到直线距离小于d的点的个数)
7.存储这些有效数据点
8.直到到达最大的迭代次数k
9.具有最大数目的有效数据的集合,被选为问题的一个解、
RANSAC是一个算法,在给定的数据出现异常值时,它鲁棒地估计模型参数。异常值都是不适配模型的数据。这种异常值可能是 由于数据中高噪声、错误测量,或者它们可能更简单地来自我们数学模型不用的物体。例如,室内环境中典型的激光扫描也许会含有从围墙来的特殊线条,也可含有来自其他静态和动态物体(譬如椅子,或人等)的点。在这个情况下,异常值是一个不属于直线的任意实体。

RANSAC是一个迭代的,不确定性的方法,其不确定性在于:当使用更多的迭代时,发现无异常值直线的概率随之增加。RANSAC并不局限于从激光数据中提取直线,它可以被广泛地应用于任何问题。这里,其目标是辨识出满足预定的数学模型的有效数据。在机器人学中的典型应用是:从2D距离数据中提取直线;从3D激光点云中提取平面;以及运动结构,运动结构的目标是辨识满足刚体变换的图像对应。

在2D激光扫描点中抽取直线:算法从数据集随机选择2个点样本开始。然后,由这2个点构成一条直线,并计算其他所有点到该直线的距离。有效数据集包括了到直线的距离在阈值d之内的所有点。然后,算法存储有效数据集,并通过随机选择另外一个2点最小集,再次启动。过程迭代,直至找到具有最大数目的有效数据集合。它被选择作为问题的解。

至此,就提出一个问题:我们是否真的必须检查所有的可能性,或者,我们是否可以在k次迭代后停止RANSAC?答案是,如果在我们的数据集中,对有效点百分比有一个粗略的估计,则并不需检查所有的组合,而只需检查它们的一个子集。以概率的方式思考一下,这就可以解决了。
令p是发现一个无异常值的点集的概率,令ω是我们从N点数据集合中选择一个有效点的概率。因而,ω表达了数据中有效点的份额,即ω=有效点数目/N 。如果我们假定,估计直线所需的两个点随机选择,则这两个点都是有效点的概率是ω^2,这两个点至少有其中之一是异常点的概率是1-ω^2。现在,令k为RANSAC至今已经执行的迭代次数,那么,〖(1-ω^2)〗^k将是RANSAC从未选择同为有效点的两个点的概率。这个概率等于1-p,即:1-p=〖(1-ω^2)〗^k
因而,k=(log⁡(1-p))/(log⁡(1-ω^2))
这个表达式告诉我们,知道有效点的份额ω,在k次RANSAC迭代之后,我们会有一个概率p,找到无异常的点集合。例如,如果我们要求成功的概率是99%,并且知道在数据集中,有效点的百分比为50%,那么根据上面的式子,我们可以在16次迭代之后停止RANSAC。它比前面的例子中,我们必须检查的所有可能的组合少得多。

RANSAC的主要优点是,它是一个通用的提取算法,一旦我们有了特征的模型,该方法可以用于多种类型的特征。因此RANSAC在计算机视觉中十分普及。它的不足是,当达到最大迭代次数k时,所获得的解可能不是最优的,而且这个解也不是以最佳方式拟合数据。

算法5:霍夫变换
初始化:令A是N点的集合
将所有元素置为0,初始化累计器阵列
对阵列置值
选择具有最大票数的元素V_max
如果V_max小于阈值,终止
否则,确定有效点
通过有效点拟合直线,并存储线
从集合中移去有效点,转到步骤2
霍夫变换的典型缺点是,通常不容易选择合适的栅格大小,且事实是,当估计直线参数时,变换不把噪声和不确定性考虑在内。

算法6:期望最大化
初始化:令A是N点的集合
重复
随机产生一条直线的参数
初始化其余点的权重
重复
E-步骤:从直线模型计算点的权重
M-步骤:再次计算直线模型参数
直到到达最大迭代步骤数,或收敛
直到到达最大测试次数,或找到一条直线
如果找到,则存储该直线,并移去有效点,然后转到步骤2
否则,终止



0 0
原创粉丝点击