【问题标题】:detect point on a curve boundary检测曲线边界上的点
【发布时间】:2017-03-20 21:05:55
【问题描述】:

我有半圆形或椭圆形物体的边界。示例图片为

边界可能略微呈锯齿状(放大时)。我希望在这些曲线上检测一个兴趣点(位置 x 和 y),我们可以在其中看到形状的明确变化,例如

可以有两个输出:

  1. 没有兴趣点:我们找不到特定的功能
  2. 具有 x 和 y 位置的兴趣点

目前,我正在使用 Python 和 OpenCV。我想不出一种有效的方法来解决这个问题。任何帮助将不胜感激。

【问题讨论】:

  • 欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 on topichow to ask 在这里申请。 StackOverflow 不是设计、编码或教程服务。

标签: python opencv curve smoothing


【解决方案1】:

没有人说其他人会同意我的结束投票,所以...

我建议两个步骤:

  1. 将椭圆拟合到给定的点。我敢肯定,您现在已经找到了曲线拟合算法(也许还有软件包)——而且 Stack Overflow 上明确禁止要求这些算法。
  2. 编写一个小型异常检测器,用于处理拟合曲线与实际数据点之间的差异。

第 2 步很大程度上取决于您对“兴趣点”的定义。标准是什么?我注意到您的第二个兴趣点实际上非常接近拟合曲线;这是向内偏离的两侧区域。

我建议您在极坐标中进行拟合,然后根据 theta 和半径考虑结果。将两条曲线“展平”为一个单位,这样中心角 (theta) 就是新的 x 坐标,到中心的距离就是新的 y 坐标。

现在,减去两条曲线并绘制差异(或将这条新曲线存储为点数组)。在这些差异中寻找适当的异常。这是你必须决定你需要什么的地方。也许“r”值有足够的偏差(半径,距中心的距离);也许是梯度的变化(找到一个峰/谷,但不是一个平缓倾斜的凸起)。你想要绝对差异,还是积分偏差(拟合和异常之间的区域)。您想要它是线性的还是平方的......或其他一些函数?异常的宽度是否符合您的标准?

这就是你需要决定的。这会让你动起来吗?

【讨论】:

    猜你喜欢
    • 2016-10-11
    • 2015-07-31
    • 1970-01-01
    • 2011-01-09
    • 2012-04-17
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多