rambo

RANSAC

例子:在一组数据点中找到一条最适合的线。 假设,此有一组集合包含了内群(inliers)以及离群(outliers),其中内群为可以被拟合到线段上的点,而离群则是无法被拟合的点。

传统的统计方法都会隐含假设:超过一半的数据点满足参数模型。而实际数据点,很小一部分的outliers就会导致糟糕的性能。如果inliers占大多数,outliers只是很少量时,我们可以通过最小二乘法或类似的方法来确定模型的参数和误差。如果无效数据很多(比如,超过了50%的数据是无效数据)。

QQ截图20150908103916

给定两个点X_{1}X_{2}的坐标,确定这两点所构成的直线。对于输入的任意点X_{3},判断它是否在该直线上。X_{i}=(x_{i},y_{i})\Theta=(a,b,c)。直线表达式为ax_{i}+by_{i}+c=0。我们想确定参数ab的具体值,c可以通过ab算得。通过实验,可以得到一组X_{i}的测试值。虽然理论上两个未知数的方程只需要两组值即可确认,但由于系统误差的原因,任意取两点算出的a与b的值都不尽相同。我们希望的是,最后计算得出的理论模型与测试值的误差最小。最小二乘法的思想即通过计算最小均方差关于参数a、b的偏导数为零时的值。

在2维情况下,概率分布形式如下:

p(X_{i}|\Theta)\propto exp\{-\frac{(ax_{i}+by_{i}+c)^{2}}{2\sigma^{2}}\}

L(X|\Theta)=logP(X_{i}|\Theta)=log(\prod_{i}p(X_{i}|\Theta))\propto\sum_{i}\frac{(ax_{i}+by_{i}+c)^{2}}{2\sigma^{2}}

最小二乘法以估计值与观测值的差的平方和作为损失函数,极大似然法则是以最大化目标值的似然概率函数为目标函数,从概率统计的角度处理线性回归并在似然概率函数为高斯函数的假设下同最小二乘建立了的联系。定义d(X_{i}|\Theta)=|ax_{i}+by_{i}+c|,那么L(X|\Theta)=\sum_{i}\frac{d^{2}(X_{i}|\Theta)}{2\sigma^{2}}

假设所有数据满足高斯分布,然而计算机视觉领域的特征/数据一般不遵循这个假设。残差的二次性增长很快,离群点和内群点对于似然概率有相同的贡献。试想一下这种情况,假使需要从一个噪音较大的数据集中提取模型(比方说只有20%的数据时符合模型的)时,最小二乘法就显得力不从心了。

cc926872-b5fe-3831-b5ca-f590d1b3e300 (1)

RANSAC是“Random Sample Consensus(随机抽样一致)”的缩写。它可以从一组包含“离群点”的观测数据集中,通过迭代方式估计数学模型的参数。它是一种不确定的算法——在某种意义上说,它会产生一个在一定概率下合理的结果,而更多次的迭代会使这一概率增加。

RANSAC的基本假设是

  1. “内群”数据可以通过几组模型的参数来叙述其分布,而“离群”数据则是不适合模型化的数据。
  2. 数据会受噪声影响,噪声指的是离群,例如从极端的噪声或错误解释有关数据的测量或不正确的假设。
  3. RANSAC假定,给定一组(通常很小)的内群,存在一个程序,这个程序可以估算最佳解释或最适用于这一数据模型的参数。

RANSAC通过反复选择数据中的一组随机子集(从数据中随机选择m个点)来达成目标。被选取的子集被假设为内群点,并用下述方法进行验证:

  • 有一个模型适应于假设的内群点,即所有的未知参数都能从假设的内群点计算得出。
  • 用得到的模型去测试所有的其它数据,如果某个点适用于估计的模型(误差小于t),认为它也是内群点。
  • 如果有足够多的点被归类为假设的内群点,那么估计的模型就足够合理。
  • 然后,用所有假设的内群点去重新估计模型(譬如使用最小二乘法),因为它仅仅被初始的假设内群点估计过。
  • 最后,通过估计内群点与模型的错误率来评估模型。
  • 上述过程被重复执行固定的次数,每次产生的模型要么因为内群点太少而被舍弃,要么因为比现有的模型更好而被选用。

伪代码

919d805f-83e8-3bcd-bb1a-4051d7f55649

例子:求取Homography单应矩阵

在计算机视觉的背景下,2d affine是2D homography的子集。
从几何意义上讲,2D homography是用来计算一堆在同一个三维平面上的点在不同的二维图像中的投影位置的,是一个一对一的映射。2D affine是2D homography的一个特例,它对应着的情况是这个三维平面在无穷远。从代数特性上讲,2D homography是一个rank=3或者说可逆的矩阵,一般可以表示为:

Affine是它的简化形式,不但可逆而且第三行没有未知数:

计算homography(线性解)需要4对不共线的点(8个点),计算affine只需要3对不共线的点。一般要用RANSAC这个方法来得到精确、鲁棒的结果。affine一般比homography更稳定一些,所以可以先计算affine,然后再用affine作为homography的初始值,进行非线性优化(比如Levenberg Marquardt)。homography可以用来计算一幅图像中的不同平面的变换,也可以是不同图像中的同一个平面的变换。affine是它的特殊情况。

QQ截图20150908214222

QQ截图20150908220311

QQ截图20150908220427

定义最小二乘问题:minimize \lVert Ah-0\rVert^{2}

  • Since h is only defined up to scale, solve for unit vector \hat{h}
  • Solution: \hat{h}= eigenvector ofA^{T}Awith smallest eigenvalue
  • Works with 4 or more points(4对点)

参考资料:

1)http://dichild.com/?cat=1

2)https://en.wikipedia.org/wiki/RANSAC

3)百度文库“计算机视觉中的几何学”

4)http://blog.sina.com.cn/s/blog_49babfed0100pq7y.html

5)http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/features2d/feature_homography/feature_homography.html   opencv 源码  待研究