如何检查区域是否为圆形?
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。
所以,我有一个任务:使用 Kruskal 算法的修改将图像分成多个区域,并识别其中哪些是圆并打印它们的半径。
找区域比较简单,我做到了。不过,寻找圈子比较棘手。我的想法是找到一个区域的所有边界点,找到平均点——这个圆的可能中心——并计算每个边界点和 'center' 之间的距离。那么,相差不大的话,这确实是一个圆
首先,这是否可行? 其次,这种方法也会将非常细的环识别为圆,我不希望这样。我该如何解决这个问题?
UPD: 如何有效地找到边界点?最后一层 BFS?少于 6 个邻居的点(虽然对我来说看起来像蛮力)?
通过平均边界点到中心的距离估算出半径后,计算:
- 区域与圆相交的面积A1
- 圆的面积A2
- 区域A3区域
那么,如果这是一个磁盘,这些区域的比率应该接近于1。您可以定义一些公差。例如:
- A1/A2 > 0.98
- A1/A3 > 0.97
或者,可以在没有边界点的情况下估计半径。只需计算每个区域点到中心的平均距离,并乘以 3/2。