我有一些点需要使用它们在各自正弦曲线线附近的位置进行分组。我试图使用标准的Hough变换来确定行,但这并不能解决问题(仅检测到几行)。
我想测试RANSAC是否可以更好地检测各种正弦曲线。您是否有类似算法的示例?
我知道RANSAC并不是找到多行的最佳工具,所以我要做的是:a)找到适合大多数点的函数; b)迭代搜索,仅考虑其余搜索。
最佳答案
兰萨克
算法
直到达到内部百分比阈值或测试了N个样本组合。
输入:
可能的改进
来源:
Fischler and 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
另请参见可能的改进以修改此代码
关于matlab - 通过RANSAC查找正弦线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30870904/