首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一种计算二维数组中有多少个圆的算法

一种计算二维数组中有多少个圆的算法
EN

Stack Overflow用户
提问于 2018-07-23 19:50:55
回答 2查看 355关注 0票数 1

我得到了一个二维二进制数组。一些点处于打开状态,一些点处于关闭状态(1表示打开,0表示关闭)。

我知道" on“点之前是通过在2d数组上放置圆圈来创建的。这些圆具有相同的半径,每次放置一个圆时,圆内的点都会变为1而不是0。所有的圆圈都在数组的边缘内,接触圆圈边缘的点被点亮。

下面可以看到一个插图。圆圈是随机排列的,可能会相碰。

请注意,圆内的点为1,其他所有点均为0。

你能找出有多少个圆圈,仅仅通过观察二维数组,在我放置它们之后,没有圆圈?这个问题是可以解决的吗?

我解决这个问题的尝试是:

首先,我假设我的圆可以包含如图所示的点(半径足够大,可以包含4到7个点。然后我试着对圆圈可能有的方向进行分类,但是有很多种。

我想找到这两个圆圈。请注意,它们不能重叠,但可以只是一个靠近另一个。

EN

回答 2

Stack Overflow用户

发布于 2018-07-23 21:11:46

如果圆不重叠,则可以使用connected component labeling algorithm并获取圆的数量:

代码语言:javascript
运行
复制
NCircles = (NComponents - 1) / 2

(如果圆的内部空白区域和外部空白区域形成单独的组件)

编辑:使用这些点,值得只选择大小在某个范围内的连接组件,以排除点和其他错误区域。

适用于此图片的一种简单的CCL:

代码语言:javascript
运行
复制
scan image until black pixel is met   
do flood fill while possible, keep bounding box of scanned black pixels   
if  box corresponds to circle size, count it   
scan further from any unmarked pixel 

另一种可能的方法是:您可以尝试使用预定义半径的Hough algorithm for circles

例如,OpenCV库包含处理图像和数组(以及霍夫变换)的标签函数。

票数 1
EN

Stack Overflow用户

发布于 2018-07-23 21:52:23

为什么不随机生成圆圈并计算它们呢?

当你插入一个新的圆时,只要检查它们是否重叠即可。如果您尝试了一定的次数,但未能插入新的圆,请停止插入新的圆。对于最后一个值,您可能需要尝试一下。

你可以重复这个过程几次,然后像这样平均结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51478118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档