【问题标题】:How do I check if a region is a circle?如何检查区域是否为圆形?
【发布时间】:2016-06-23 19:15:22
【问题描述】:

所以,我有一个任务:使用 Kruskal 算法的修改将图像分成多个区域,并识别其中哪些是圆形并打印它们的半径。

查找区域相对简单,我做到了。不过,寻找圈子比较棘手。我的想法是找到一个区域的所有边界点,找到平均点——这个圆的可能中心——并计算每个边界点与“中心”之间的距离。那么,如果它们相差不大,这确实是一个圆圈。

首先,这是否可行? 其次,这种方法也会将非常薄的环识别为圆圈,我不希望这样。我该如何解决这个问题?

UPD:我如何有效地找到边界点? BFS的最后一层?具有少于 6 个邻居的点(不过对我来说似乎是蛮力)?

【问题讨论】:

  • 您还可以检查圆周点数是否接近2*Pi*r,其中r 是以像素为单位的半径(边界框大小的一半)...无需检查所有点的距离。 .. 区域也是如此... 也可以看看stackoverflow.com/a/37858301/2521214
  • 边界框绝对不健壮,例如在区域中检测到细线会使边界框变得更大,并导致圆形检测失败。

标签: image geometry image-recognition region kruskals-algorithm


【解决方案1】:

通过平均边界点到中心的距离估算半径后,计算:

  • 区域与圆相交的面积A1
  • 圆的面积 A2
  • 区域A3面积

那么,如果这是一个磁盘,这些区域的比率应该接近 1。您可以定义一些公差。例如:

  • A1/A2 > 0.98
  • A1/A3 > 0.97

或者,可以在没有边界点的情况下估计半径。只需计算每个区域点到中心的平均距离,然后乘以 3/2。

【讨论】:

  • 这实际上工作得很好,即使没有找到边界,因为所有点到中心的距离的平均值是 2/3R。 95% 的容差让我得到了完美的认可!
  • 好点,避免了难以鲁棒的边界检测的麻烦!我已经编辑了答案以包含您的想法。
猜你喜欢
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多