激光数据直线特征有两个问题:
浙江大学熊蓉教授内容
. 哪些点属于这条直线 (分类)
. 已知一条直线的点拟合直线参数(拟合)
直线聚类分割方法
. incremental line fitting
. hough transform
. split and merge
直线特征拟合方法
. LS
. TLS (total least square)
. ransac
直线模型
- 常规-点斜式
-
这种模型的问题在无法描述斜率无穷大, 即与x轴夹角90°的情况, 如x = 5;
k反应直线与x轴夹角,范围是[-90,+90], 符合atan(y/x)函数
点截距直线模型有这个缺陷, 一般式Ax + By +C = 0 更通用
y = kx + b
LS误差拟合方法, 该方法实际仅仅权衡y方向的误差
yi = kxi + b + e;
线性最小二乘问题,分别对k 和 b 求偏导求解;
- 变形(一般式)
Ax + By + C = 0
一般式某点到直线的最短距离为
有时候我们可以加入约束A2 + B2 = 0;
- 极坐标, 或者这也不能叫极坐标
这个公式也比较好理解, 可以用辅助线法, 随便在直线取一点p, 假想过p点(x, y) 做垂线rp, 然后做该直线的平行线, 这样两条平行直线 + r + rp 组成一个平行四边形, 求解rp 即是下面公式;
该方法仅适用与没有噪点outlier 的直线, 噪点会增大误差
xcos + ysin = r
OLS or TLS 一般式模型参数拟合解法
最小二乘法直线拟合:Ax+By+C=0
Ax+By+C=0 直线一般式拟合 c++/python
使用计算拟合代码
技巧:
- 建立如上图的最小误差公式(带拉格朗日乘子)
- 分别对ABClamda 求导, 求导技巧先根据对C求导得到均值的关系, 再对A, B求导;
- 求导出来后获取sXX 是否为0, 排除垂直与x轴的情况
- A, B也可用求特征值的方法求,再求C; 寻找最小特征值的特征向量, 特征值离0越近, 拟合越好;
- 为啥找最小特征值呢, 因为这个矩阵是代表误差的协方差矩阵
三种模型互相转换
三种模型其实是可以互相转换的, 对于一般式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的计算方法