如何检查区域是否为圆形?

How do I check if a region is a circle?

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

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

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

UPD: 如何有效地找到边界点?最后一层 BFS?少于 6 个邻居的点(虽然对我来说看起来像蛮力)?

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

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

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

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

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