最小二乘使所有点到曲线的方差最小.利用最小二乘对扫描线上的所有数据点进行拟合,得到一条样条曲线,然后逐点计算每一个点Pi到样条曲线的欧拉距离ei(即点到曲线的最短距离),ε是距离的阈值,事先给定,如果ei≥ε,则将该点判断为噪点.
该方法最重要的事先拟合样条曲线。
确定曲线类型的方法:根据已知数据点类型初步确定曲线类型,经验观察初步尝试拟合函数类型.
曲线类型选择:直线,二次曲线,三次曲线,对数函数拟合,幂函数拟合,直至方差最小。
直线:f(X1) = aX1 + b;
二次曲线:f(X1) = aX12 + bX1 + c;
对数函数:f(X1) = a + b log(X1);
幂函数: f(X1) = aX1b
#include <iostream> #include <opencv2/opencv.hpp> #include <Eigen/Core> #include <Eigen/Dense> using namespace std; using namespace Eigen; int main(int argc, char **argv) { double ar = 1.0, br = 2.0, cr = 1.0; // 真实参数值 double ae = 2.0, be = -1.0, ce = 5.0; // 估计参数值 int N = 100;