本文主要是介绍RANSAC笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
刚来实验室那会儿,每周组会汇报,师兄报告时,和老板讨论,总听到“那就对数据RANSAC一下”……当时我怯生生的问了一下师兄,啥叫RANSAC?现在也不记得师兄咋解释的,后来自己也经常调用matlab里的ransac函数求解单应性矩阵,但是对其具体原理我还真没花时间去了解一下,今天就做一下笔记,理解理解什么叫RANSAC。
什么叫RANSAC?
直译过来随机采样一致性(random sample consensus)。具体什么意思,了解其算子过程和原理就很容易理解了。这里我想首先强调的一点就是,RANSAC是一种思想,一个求解已知模型的参数的框架。它不限定某一特定的问题,可以是计算机视觉的问题,同样也可以是统计数学,甚至可以是经济学领域的模型参数估计问题。
RANSAC的具体步骤?
谈算法的步骤之前,首先得说明这个算法的输入输出,然后才是是具体算法步骤。
输入:
1. 在RANSAC定义中,已经说过,它是一种求解已知模型的参数的框架。所以这个模型的形式,得给出。也就是说,你所求解的模型是一阶模型?二阶模型还是什么的…..你得给出来,这样模型需要求解的参数个数也就确定了。
2. 一堆数据。这一堆数据中是允许出现错误数据的(野点或者外点),也许你会纳闷为啥要给有错误的数据。这是因为在实际的数据采集中,难免受到噪声的污染,数据的准确性也就难以保证,所以存在错误数据是非常合理的情况。这也是RANSAC流行的原因,相比于最小二乘(线性回归),他对数据的错误的鲁棒性更好。有博文中写到,“对于包含80%误差的数据集,RANSAC的效果远优于直接的最小二乘法”,这个我没有证实,但是我相信应该是对的吧。
3. 迭代次数 k ,内外点距离阈值
算法流程
下面均已从一堆点中估计直线方程这个问题进行展开,其他比如单应性矩阵求解等问题可以类比。
- 从数据中随机选取模型参数估计的最少的数据(对于直线估计问题,两个点确定一条直线,当然就随机选取两个数据。),然后计算出直线方程。
- 然后计算数据集中其余点与已算出模型的距离 d ,当
d<t1 时就判定该点为内点(inlier),当 d>t1 就判定为外点(outlier)。然后统计内点个数 n ,当
这篇关于RANSAC笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!