line feature

激光数据直线特征有两个问题:

浙江大学熊蓉教授内容
. 哪些点属于这条直线 (分类)
. 已知一条直线的点拟合直线参数(拟合)

直线聚类分割方法

.  incremental line fitting
.  hough transform
.  split and merge

直线特征拟合方法

. LS
. TLS (total least  square)
. ransac

直线模型

直线模型psu

  • 常规-点斜式
  • 这种模型的问题在无法描述斜率无穷大, 即与x轴夹角90°的情况, 如x = 5;
    k反应直线与x轴夹角,范围是[-90,+90], 符合atan(y/x)函数
    点截距直线模型有这个缺陷, 一般式Ax + By +C = 0 更通用

	y = kx + b

LS误差拟合方法, 该方法实际仅仅权衡y方向的误差

	yi = kxi + b + e;

line feature_第1张图片
最小二乘求解
line feature_第2张图片

线性最小二乘问题,分别对k 和 b 求偏导求解;

  • 变形(一般式)
   Ax + By + C = 0 

一般式某点到直线的最短距离为
line feature_第3张图片
有时候我们可以加入约束A2 + B2 = 0;

  • 极坐标, 或者这也不能叫极坐标

这个公式也比较好理解, 可以用辅助线法, 随便在直线取一点p, 假想过p点(x, y) 做垂线rp, 然后做该直线的平行线, 这样两条平行直线 + r + rp 组成一个平行四边形, 求解rp 即是下面公式;

该方法仅适用与没有噪点outlier 的直线, 噪点会增大误差

   xcos + ysin = r

line feature_第4张图片
line feature_第5张图片
OLS or TLS 一般式模型参数拟合解法
最小二乘法直线拟合:Ax+By+C=0
Ax+By+C=0 直线一般式拟合 c++/python
使用计算拟合代码

技巧:

  1. 建立如上图的最小误差公式(带拉格朗日乘子)
  2. 分别对ABClamda 求导, 求导技巧先根据对C求导得到均值的关系, 再对A, B求导;
  3. 求导出来后获取sXX 是否为0, 排除垂直与x轴的情况
  4. A, B也可用求特征值的方法求,再求C; 寻找最小特征值的特征向量, 特征值离0越近, 拟合越好;
  5. 为啥找最小特征值呢, 因为这个矩阵是代表误差的协方差矩阵

一般式拟合code

三种模型互相转换

三种模型其实是可以互相转换的, 对于一般式Ax + By + C = 0 (s.t. A2 + B2 = 1) 和 极坐标式 xcos + ysin = r 其实也一定程度上是等效的,

https://www.有管/watch?v=LxNB7iSaaco
  • ransac 随机一致性采样

对于直线,两点确定一条直线, 采样样本只需要2个点, (样本增加反而需要更多采样次数K)
内点比例w通常是未知的, 有自适应比例w方法
inliers 正确数据
outliers 错误数据
p 采样样本在正确数据的概率(K次采样获得正确样本的概率), 0.99? 0.999
S* 采样样本所求模型M, 得到满足误差内consensus set 一致集

w表示每次从数据集中选取一个点属于局内点的概率,如下式所示:
w = 局内点的数目 / 数据集的数目
通常情况下,我们事先并不知道w的值,但是可以给出一些鲁棒的值。假设估计模型需要选定n个点作为样本,wn(n次方)是所有n个点均为局内点的概率;1 − wn是n个点中至少有一个点为局外点的概率,此时表明我们从数据集中估计出了一个不好的模型。 (1 − wn)k表示算法永远都不会选择到n个点均为局内点的概率,它和1-p相同。因此,
1 − p = (1 − wn)k
自适应内点比例w的计算方法

line feature_第6张图片

你可能感兴趣的:(定位与导航,数据结构与算法)