检测曲线边界上的点

时间:2017-03-20 21:05:55

标签: python opencv curve smoothing

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

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

enter image description here enter image description here

可以有两个输出:

  1. 没有兴趣点:我们找不到具体的功能
  2. x和y位置的兴趣点
  3. 目前,我正在使用Python和OpenCV。我想不出一个有效和有效的方法来解决这个问题。任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:1)

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

我建议采取两个步骤:

  1. 将椭圆拟合到给定点。我相信你现在已经找到了曲线拟合算法(可能还有软件包) - 并要求在Stack Overflow上特别禁止这些算法。
  2. 编码一个小的异常检测器,它根据拟合曲线和实际数据点之间的差异进行处理。
  3. 第2步在很大程度上取决于您对“兴趣点”的定义。标准是什么?我注意到你的第二个兴趣点实际上非常接近拟合曲线;它是两边的区域向内偏离。

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

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

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