RANSAC笔记
2015-11-01 19:16
288 查看
刚来实验室那会儿,每周组会汇报,师兄报告时,和老板讨论,总听到“那就对数据RANSAC一下”……当时我怯生生的问了一下师兄,啥叫RANSAC?现在也不记得师兄咋解释的,后来自己也经常调用matlab里的ransac函数求解单应性矩阵,但是对其具体原理我还真没花时间去了解一下,今天就做一下笔记,理解理解什么叫RANSAC。
输入:
1. 在RANSAC定义中,已经说过,它是一种求解已知模型的参数的框架。所以这个模型的形式,得给出。也就是说,你所求解的模型是一阶模型?二阶模型还是什么的…..你得给出来,这样模型需要求解的参数个数也就确定了。
2. 一堆数据。这一堆数据中是允许出现错误数据的(野点或者外点),也许你会纳闷为啥要给有错误的数据。这是因为在实际的数据采集中,难免受到噪声的污染,数据的准确性也就难以保证,所以存在错误数据是非常合理的情况。这也是RANSAC流行的原因,相比于最小二乘(线性回归),他对数据的错误的鲁棒性更好。有博文中写到,“对于包含80%误差的数据集,RANSAC的效果远优于直接的最小二乘法”,这个我没有证实,但是我相信应该是对的吧。
3. 迭代次数kk,内外点距离阈值t1t_1,一致性集合大小阈值t2t_2。这三个参数根据不同的问题,会有不同的值。现在也不介绍他们到底是什么意思,等算法步骤流程说完了再介绍他们,那样应该更加清晰明了。
算法流程
下面均已从一堆点中估计直线方程这个问题进行展开,其他比如单应性矩阵求解等问题可以类比。
从数据中随机选取模型参数估计的最少的数据(对于直线估计问题,两个点确定一条直线,当然就随机选取两个数据。),然后计算出直线方程。
然后计算数据集中其余点与已算出模型的距离dd,当d<t1d时就判定该点为内点(inlier),当d>t1d>t_1就判定为外点(outlier)。然后统计内点个数nn,当n>t2n>t_2时就判定该模型为最优模型mbestm_{best},并记录该模型下的统计误差errorminerror_{min}(即每个内点与模型的距离误差)。
然后重复上面的过程,当计算得到新的模型,比较其统计误差errorerror与errorminerror_{min}大小,如果errorerror更小,就可以更新mbestm_{best}和errorminerror_{min}。
最后输出mbestm_{best}
所以不同的问题,主要区别就在第一步,利用最少的数据求解模型参数的方法上,这个涉及到不同问题的求解原理。
参数的选择:
内外点距离阈值t1t_1,这个阈值是用来判定数据点是内点还是外点,一般没有一个统一的方法,只能通过实验得到。
迭代次数kk一致性集合大小阈值t2t_2,当我们估计模型参数时,用pp表示一些迭代过程中从数据集内随机选取出的点均为inlier的概率;用ww表示每次从数据集中选取一个inlier的概率,w=inlier的数目数据集的数目w=\frac{ inlier的数目}{数据集的数目},通常情况下,我们事先并不知道ww的值,但是可以给出一些鲁棒的值。假设估计模型需要选定nn个点,wnw^n是所有nn个点均为局内点的概率;1−wn1-w^n是nn个点中至少有一个点为局外点的概率,此时表明我们从数据集中估计出了一个不好的模型。 (1−wn)k(1-w^n)^k表示算法永远都不会选择到nn个点均为局内点的概率,它和1−p1-p相同。因此,1−p=(1−wn)k1-p=(1-w^n)^k,通过此式就可以计算kk的最小值了,当然kk越大越可能得到准确的模型,但是需要考虑时间效率。RANSAC只有一定的概率得到可信的模型,概率与迭代次数成正比。
一致性集合大小阈值t2t_2,这个是判定一个模型是否合理的阈值。
下面这张图是我用RANSAC求取单应性矩阵后,进行的图像拼接,由于自己匆匆忙忙写的,效果确实不咋好,就是意思意思一下。
什么叫RANSAC?
直译过来随机采样一致性(random sample consensus)。具体什么意思,了解其算子过程和原理就很容易理解了。这里我想首先强调的一点就是,RANSAC是一种思想,一个求解已知模型的参数的框架。它不限定某一特定的问题,可以是计算机视觉的问题,同样也可以是统计数学,甚至可以是经济学领域的模型参数估计问题。RANSAC的具体步骤?
谈算法的步骤之前,首先得说明这个算法的输入输出,然后才是是具体算法步骤。输入:
1. 在RANSAC定义中,已经说过,它是一种求解已知模型的参数的框架。所以这个模型的形式,得给出。也就是说,你所求解的模型是一阶模型?二阶模型还是什么的…..你得给出来,这样模型需要求解的参数个数也就确定了。
2. 一堆数据。这一堆数据中是允许出现错误数据的(野点或者外点),也许你会纳闷为啥要给有错误的数据。这是因为在实际的数据采集中,难免受到噪声的污染,数据的准确性也就难以保证,所以存在错误数据是非常合理的情况。这也是RANSAC流行的原因,相比于最小二乘(线性回归),他对数据的错误的鲁棒性更好。有博文中写到,“对于包含80%误差的数据集,RANSAC的效果远优于直接的最小二乘法”,这个我没有证实,但是我相信应该是对的吧。
3. 迭代次数kk,内外点距离阈值t1t_1,一致性集合大小阈值t2t_2。这三个参数根据不同的问题,会有不同的值。现在也不介绍他们到底是什么意思,等算法步骤流程说完了再介绍他们,那样应该更加清晰明了。
算法流程
下面均已从一堆点中估计直线方程这个问题进行展开,其他比如单应性矩阵求解等问题可以类比。
从数据中随机选取模型参数估计的最少的数据(对于直线估计问题,两个点确定一条直线,当然就随机选取两个数据。),然后计算出直线方程。
然后计算数据集中其余点与已算出模型的距离dd,当d<t1d时就判定该点为内点(inlier),当d>t1d>t_1就判定为外点(outlier)。然后统计内点个数nn,当n>t2n>t_2时就判定该模型为最优模型mbestm_{best},并记录该模型下的统计误差errorminerror_{min}(即每个内点与模型的距离误差)。
然后重复上面的过程,当计算得到新的模型,比较其统计误差errorerror与errorminerror_{min}大小,如果errorerror更小,就可以更新mbestm_{best}和errorminerror_{min}。
最后输出mbestm_{best}
所以不同的问题,主要区别就在第一步,利用最少的数据求解模型参数的方法上,这个涉及到不同问题的求解原理。
参数的选择:
内外点距离阈值t1t_1,这个阈值是用来判定数据点是内点还是外点,一般没有一个统一的方法,只能通过实验得到。
迭代次数kk一致性集合大小阈值t2t_2,当我们估计模型参数时,用pp表示一些迭代过程中从数据集内随机选取出的点均为inlier的概率;用ww表示每次从数据集中选取一个inlier的概率,w=inlier的数目数据集的数目w=\frac{ inlier的数目}{数据集的数目},通常情况下,我们事先并不知道ww的值,但是可以给出一些鲁棒的值。假设估计模型需要选定nn个点,wnw^n是所有nn个点均为局内点的概率;1−wn1-w^n是nn个点中至少有一个点为局外点的概率,此时表明我们从数据集中估计出了一个不好的模型。 (1−wn)k(1-w^n)^k表示算法永远都不会选择到nn个点均为局内点的概率,它和1−p1-p相同。因此,1−p=(1−wn)k1-p=(1-w^n)^k,通过此式就可以计算kk的最小值了,当然kk越大越可能得到准确的模型,但是需要考虑时间效率。RANSAC只有一定的概率得到可信的模型,概率与迭代次数成正比。
一致性集合大小阈值t2t_2,这个是判定一个模型是否合理的阈值。
下面这张图是我用RANSAC求取单应性矩阵后,进行的图像拼接,由于自己匆匆忙忙写的,效果确实不咋好,就是意思意思一下。
相关文章推荐
- Set Up Apache2 With mod_fcgid And PHP5 On CentOS
- UML之对象图
- 浅识排序----桶排序
- Java四种读取和创建XML文档的例子教程
- hdu3646 Fate Stay Night(dp,读题障碍)
- centos安装时各个版本的含义
- 大数相加
- C++primer 17.4 随机数
- 第九周--项目三--稀疏矩阵的三元组表示的实现及应用(1)
- Java os.name
- 在Ubuntu下手动安装配置Mongodb
- UINavigationController
- Python yield 使用浅析
- UDP穿越NAT原理(p2p)
- Hadoop之HDFS架构(NameNode和DataNode)
- ios学习之苹果官方文档的学习(EKCalendarChooser)
- ubuntu下neural-style-master的demo
- jfinal spring 整合 集成 事物 spring-jfinal
- fl2440开发板上用其他文件系统格式化除根分区以外的分区————例ubifs文件系统格式化apps分区2、
- java中的垃圾收集算法