RANSAC算法介绍与总结

RANSAC算法

  • 简介
  • RANSAC地面分割

简介

粒子分割主要使用RANSAC算法. RANSAC全称Random Sample Consensus, 即随机样本一致性, 是一种检测数据中异常值的方法. RANSAC通过多次迭代, 返回最佳的模型. 每次迭代随机选取数据的一个子集, 并生成一个模型拟合这个子样本, 例如一条直线或一个平面. 然后具有最多inliers(内联点)或最低噪声的拟合模型被作为最佳模型.

  • 一种RANSAC 算法使用数据的最小可能子集作为拟合对象. 对于直线来说是两点, 对于平面来说是三点. 然后通过迭代每个剩余点并计算其到模型的距离来计算 inliers 的个数. 与模型在一定距离内的点被计算为inliers. 具有最高 inliers 数的迭代模型就是最佳模型. 也就是说RANSAC算法通过不断迭代, 找到拟合最多inliers的模型, 而outliers被排除在外.
  • RANSAC 的另一种方法对模型点的某个百分比进行采样, 例如20% 的总点, 然后将其拟合成一条直线. 然后计算该直线的误差, 以误差最小的迭代法为最佳模型. 这种方法的优点在于不需要考虑每次迭代每一点. 真实激光数据下是对一个平面进行拟合, 从而分离物体和路面.

RANSAC算法介绍与总结_第1张图片
RANSAC算法介绍与总结_第2张图片

RANSAC算法介绍与总结_第3张图片

RANSAC地面分割

  • 基于ransac算法平面检测:

    1. 确定迭代次数;
    2. 在迭代次数内:
      • 随机选择三个点组成平面(判断三个点是否共线);
      • 构造坐标矩阵;
      • 求平面方程;
      • 求所有点到平面的距离;
      • 统计inlier个数(距离小于阈值);
    3. 迭代选择inlier个数最多的平面。
  • 地面分割,只使用inlier作为判断条件是不足的,会导致某个点数较多的非地面平面占据inlier个数;为了避免将平直墙面检测为地面,必须将夹角加入判断条件;(夹角就是法向量与Z轴(0,0,1)的夹角。

  • 判断三个点是否共线的两种方法:

    1. 满足满秩矩阵(利用满秩行列式不等于0)用三点其中任意两点组成向量,求这样两个不同向量是否平行就行了.也就是说三个点的坐标组成一个三阶行列式,只要三阶行列式为0,且该矩阵秩为1,则必定是共线的。
    2. 利用比例关系(就是两两向量成比例)为了方便,我数字设简单一点比如(0,0,0),(1,2,3),(4,5,6)三点先任取两个相减得到(1-0,2-0,3-0)和(4-1,5-2,6-3)两个向量即(1,2,3)和(3,3,3)这两个向量然后设一个比例常数t使1t=3解得t=3带入2t得6与对应的y=3不等所以不共线。(即设三点为A、B、C .利用向量证明:λAB=AC(其中λ为非零实数))
    3. 利用点差法求出ab斜率和ac斜率 相等即三点共线
    4. 取两点确立一条直线,计算该直线的解析式,代入第三点坐标 看是否满足该解析式。
    5. 证明平角即可,例如,三点ABC,有任意一点D,若角DBA+角DBC=180度,即角ABC=180度,则点ABC三点共线几何表达:因为角ABC=180度所以点ABC三点共线
  • 向量法求点到平面的距离
    在这里插入图片描述

RANSAC算法介绍与总结_第4张图片

你可能感兴趣的:(机器学习)