RANSAC
算法
直到达到inlier百分比阈值或测试N个样品组合.
>它随机选择最小的样本来构建或拟合模型.
>其他数据点分类为内点或异常值
>该模型被接受或拒绝
输入:
>确定内点和异常值的误差容限
>阈值内部百分比
>测试的最大样本组合
可能的改进
>确保没有多次测试组合
>如果有更好的方法可以选择组合,请使用它.
>一旦找到许多内点,就可以使用一组新的内点来进行进一步搜索
资源:
Fischler和Bolles – 随机样本共识:模型拟合的范例与图像分析和自动制图的应用
你的应用
您的模型是一个正弦定义为f(x)=幅度* sin(周期* x)偏差.拟合这个模型并不像依赖于三个参数那么容易.我认为它会在长期运行中存在风险并且可能会过度拟合.一种可能的解决方案可能是在不同时段运行算法多次,并保持偏置和幅度固定.
iterationThreshold = 10000;
iterationCount = 0
errorthreshold = 0.05;
while(numel(inliers(:,1)) > inlierThreshold)
samples = extractMinimumSamples(points);
[sineX, sineY] = fitSine(samples);
inliers = determineInliers(points, SineX, SineY)
iterationCount = iterationCount + 1;
if(iterationCount => iterationThreshold)
break;
end
end
另请参阅修改此代码的可能改进