【问题标题】:Find sinusoidal lines via RANSAC通过 RANSAC 查找正弦曲线
【发布时间】:2015-09-01 11:13:38
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您将sin(x) 拟合到您的数据中,那条黄线肯定不会丢失。罪的“底部”和“顶部”部分绝对不对应相同的频率sin(X*fs)
  • 同意@AnderBiguri - 如果你想得到那条线,你必须在多个频率上运行 RANSAC 才能捕获黄色的那个。蓝色线条很可能属于一个频率。
  • @rayryeng 不仅频率不同,而且形状本身也无法被简单的罪孽捕获。 120-160 之间的值“转动”非常快,而 40-120 之间的值非常慢。我认为罪不适合那个黄色区域。
  • @AnderBiguri - 几乎看起来像一个多项式表达式......不过,sin 函数无论如何都可以解释为多项式的无限和!
  • 我同意有些东西很奇怪。我会更多地思考为什么我的那些几乎对齐的点不属于任何拟合线。

标签: matlab hough-transform ransac


【解决方案1】:

RANSAC

算法

直到达到内部百分比阈值或测试 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  

另请参阅修改此代码的可能改进

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多