我有一组点,我需要使用它们与各自正弦线的附近进行分组。我尝试使用标准霍夫变换来确定线条,但这并不能解决问题(仅检测到几条线)。
我想测试一下 RANSAC 是否能更好地检测各种 sin 曲线。你有类似算法的例子吗?
我知道 RANSAC 不是查找多行的最佳工具,所以我要做的是 a) 找到适合大多数点的函数;b) 迭代搜索,只考虑剩余的搜索。
我有一组点,我需要使用它们与各自正弦线的附近进行分组。我尝试使用标准霍夫变换来确定线条,但这并不能解决问题(仅检测到几条线)。
我想测试一下 RANSAC 是否能更好地检测各种 sin 曲线。你有类似算法的例子吗?
我知道 RANSAC 不是查找多行的最佳工具,所以我要做的是 a) 找到适合大多数点的函数;b) 迭代搜索,只考虑剩余的搜索。
直到达到内部百分比阈值或测试 N 个样本组合。
输入:
可能的改进
资料来源:Fischler 和 Bolles - 随机样本共识:用于图像分析和自动制图的模型拟合范式
您的模型是定义为 f(x) = 幅度 * sin(period * 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
另请参阅修改此代码的可能改进