【blog算法原理】RANSAC和FitLine
如果已经有一系列图片,需要拟合出最为合适的一条直线出来,这个时候你会选择RANSAC还是FitLine。
一、算法定义;
RANSAC是实际运用非常广泛的算法,它的数学表示为
"Ransac 是解决这类问题的代表性算法。它是一种随机算法,步骤如下:
输入:k,n,t,d,model,data
BestModel = null;
迭代k次——
(1) 从data中随机取出n个点,用这n个点去拟合model和模型的model,将得到的带参数的model记为MaybeBestModel。
(2) 依次取出剩下的点,计算该点对应MaybeBestModel模型的误差,如果这个误差小于阈值t,则认为这个点是有效的,把这个点也放进MaybeBestModel中。
(3) 所有点取完了。这时,MaybeBestModel中有效点的数量是否大于或等于d,如果是,则对于MaybeBestModel,重新计算一下它的模型参数。
(4) 评估一下MaybeBestModel和BestModel哪一个好?如果MaybeBestModel更好,则将MaybeBestModel 记做新的 BestModel。"
而FitLine的官方定义为:
基本上的思路还是生成直线之后,遍历所有的点,并且采用不同的方法计算结果:
二、运用场合
在opencv中,已经实现了FitLine的算法;但是关于RANSAC还自己编写一些程序。除此之外,我认为,RANSAC的最总要特征在于“它假设了一个模型”,如果我已经知道模型就是直线,那么使用FitLine会更直接。
特别是在一些计算量不是非常大的情况下,综合考虑所有的点之间的关系肯定随机取出一些点然后判断的结果要好一些。