From 418047acedf17dba2e78072620c6b02a16f18143 Mon Sep 17 00:00:00 2001 From: libing64 <756445922@qq.com> Date: Sun, 2 Jun 2013 21:47:38 +0800 Subject: [PATCH] readme --- README.md | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1e6a985..e1b0415 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,56 @@ -RansacLine +Ransac算法 ========== + +#1、算法简介 + +随机抽样一致算法(RANdom SAmple Consensus,RANSAC)。它是一种迭代的方法,用来在一组包含离群的被观测数据中估算出数学模型的参数。 RANSAC是一个非确定性算法,在某种意义上说,它会产生一个在一定概率下合理的结果,其允许使用更多次的迭代来使其概率增加。此RANSAC算法在1981年由Fischler和Bolles首次提出。 + +RANSAC的基本假设是 +“内群”数据可以通过几组模型参数来叙述其数据分布,而“离群”数据则是不适合模型化的数据。 +数据会受噪声影响,噪声指的是离群,例如从极端的噪声或错误解释有关数据的测量或不正确的假设。 +RANSAC假定,给定一组(通常很小)的内群,存在一个程序,这个程序可以估算最佳解释或最适用于这一数据模型的参数。 + +#2、范例 +这里用一个简单的例子来说明,在一组数据点中找到一条最适合的线。 假设,此有一组集合包含了内群以及离群,其中内群为可以被拟合到线段上的点,而离群则是无法被拟合的点。如果我们用简单的最小平方法来找此线,我们将无法得到一条适合于内群的线,因为最小平方法会受离群影响而影响其结果。而RANSAC,可以只由内群来计算出模型,而且概率还够高。 然而,RANSAC无法保证结果一定最好,所以必须小心选择参数,使其能有足够的概率。 + +#3、概述# + +1. 在数据中随机选择几个点设定为内群 +2. 计算适合内群的模型 +3. 把其它刚才没选到的点带入刚才建立的模型中,计算是否为内群 +4. 记下内群数量 +5. 重复以上步骤多做几次 +6. 比较哪次计算中内群数量最多,内群最多的那次所建的模型就是我们所要求的解 +7. +这里有几个问题 + + * 一开始的时候我们要随机选择多少点(n) + * 以及要重复做多少次(k) + +#4、参数确定 +假设每个点时真正内群的概率为 w + + w = 内群的数目/(内群数目+外群数目) + +通常我们不知道 w 是多少, w^n是所选择的n个点都是内群的机率, 1-w^n 是所选择的n个点至少有一个不是内群的机率, (1 − w^n)^k 是表示重复 k 次都没有全部的n个点都是内群的机率, 这边定算法跑 k 次以后成功的机率是p,那么, + + 1 − p = (1 − w^n)^k + p = 1 − (1 − w^n)^k + +所以如果希望成功机率高,p = 0.99, 当n不变时,k越大,p越大, 当w不变时,n越大,所需的k就越大, 通常w未知,所以n 选小一点比较好。 + +#5、应用# + +RANSAC常被用在电脑视觉 ,例如,对应点问题 和 估算立体摄影机双眼相对点的基本矩阵。 + +#6、C实现源码# + + +#7、优缺点 + +RANSAC的优点是它能鲁棒的估计模型参数。例如,它能从包含大量局外点的数据集中估计出高精度的参数。RANSAC的缺点是它计算参数的迭代次数没有上限;如果设置迭代次数的上限,得到的结果可能不是最优的结果,甚至可能得到错误的结果。RANSAC只有一定的概率得到可信的模型,概率与迭代次数成正比。RANSAC的另一个缺点是它要求设置跟问题相关的阀值。 + +RANSAC只能从特定的数据集中估计出一个模型,如果存在两个(或多个)模型,RANSAC不能找到别的模型。 + + +