RANSAC Fitting
Posted yhl_leo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RANSAC Fitting相关的知识,希望对你有一定的参考价值。
本系列文章由 @YhL_Leo 出品,转载请注明出处。
文章链接: http://blog.csdn.net/yhl_leo/article/details/73294793
RANSAC 算法是一种常用的估计模型参数的方法,相关的算法介绍网上有很多,这里不再累述,主要介绍如何利用RANSAC 方法进行 2D 直线以及 3D 平面拟合。
Source code (python version): Github/yhlleo/RANSAC-fit
1 拟合模型
之所以要自己去实现算法,主要是由于可以直接使用的代码程序和函数库,对于直线以及平面方程一般使用:
lines
: y=ax+bplanes
: z=ax+by+c
这样不通用的表达方式,对于自然情景中的很多线性回归问题,一般没什么问题,但是对于一些简单的应用情景,比如本文提到的直线、平面拟合问题,就不具有绝对的通用性,比如斜率不存在的line
:
x=n, n∈R
,上述的直线方程就无法拟合,同理平面拟合也存在类似问题。因此,采用下面的方法更具有一般性:
lines
: ax+by+c=0planes
: ax+by+cz+d=0
对于 2D 直线采用两点式方程,给定直线上任意不同两点 p(x1,y1), q(x2,y2) ,则有:
y−y1y2−y1=x−x1x2−x1
展开为点积式:
(y−y1)(x2−x1)=(x−x1)(y2−y1)
进而可以得到:
a=y2−y1, b=x1−x2,c=x2y1−x1y2
在对直线进行归一化处理:
a=aa2+b2−−−−−−√,b=ba2+b2−−−−−−√,c=ca2+b2−−−−−−√
同时,如果 a≠0 ,令 a>0 , 否则令 b>0 。
3D 平面则采用三点式直线方程,给定平面上任意不共线的三点 pi(xi,yi), i=1,2,3. , 则有:
∣∣∣∣∣x−x1x2PCL:多直线拟合(RANSAC)