gpt4 book ai didi

matlab - 通过 RANSAC 查找正弦线

转载 作者:太空宇宙 更新时间:2023-11-03 19:47:51 31 4
gpt4 key购买 nike

我有一组点,需要使用它们与相应正弦线的邻近度进行分组。我尝试使用标准霍夫变换来确定线条,但这并没有解决问题(只检测到几条线条)。

我想测试 RANSAC 是否能更好地检测各种 sin 曲线。你有类似算法的例子吗?

我知道 RANSAC 不是查找多条直线的最佳工具,所以我要做的是 a) 找到最适合点的函数; b) 迭代搜索,只考虑剩余的。

enter image description here

最佳答案

随机数

算法

直到达到内点百分比阈值或测试了 N 个样本组合。

  • 它随机选择尽可能小的样本来构建或拟合模型。
  • 其他数据点被归类为inliers或outliers
  • 模型被接受或拒绝

输入:

  • 确定异常值和异常值的容错度
  • 阈值异常值百分比
  • 测试的最大样本组合

可能的改进

  • 确保没有组合被测试超过一次
  • 如果有更好的方法来选择组合,请使用它。
  • 一旦找到大量内点,使用一组新的内点进行进一步搜索

来源:Fischler 和 Bolles - 随机样本共识:模型拟合的范例及其在图像分析和自动制图方面的应用

你的应用

您的模型是定义为 f(x) = amplitude * sin(period * x) + bias 的正弦函数。拟合此模型并不容易,因为它取决于三个参数。我认为从长远来看,它会有风险,并且有可能出现过度拟合。一个可能的解决方案可能是在不同时期多次运行该算法并保持偏差和振幅固定。

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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com