Arrays 求二维数组中有多少个圆的算法

Arrays 求二维数组中有多少个圆的算法,arrays,algorithm,geometry,Arrays,Algorithm,Geometry,我得到了一个2d二进制数组。有些点打开,有些点关闭(1表示打开,0表示关闭) 我知道“开”点以前是通过在2d阵列上放置圆来创建的。 这些圆的半径相同,每次放置一个圆时,圆内的点都会变为1而不是0。 所有圆都在阵列的边缘内,与圆边缘接触的点点亮 下面可以看到一个例子。圆圈是随机排列的,可能会相互接触 请注意,圆内的点为1,其他所有点均为0 你能不能在我放完圆后,只看二维数组而不看这些圆就知道有多少个圆?这个问题可以解决吗 我试图解决这个问题是: 首先,我假设我的圆可以包含图中的点(半径足够大,可以

我得到了一个2d二进制数组。有些点打开,有些点关闭(1表示打开,0表示关闭)

我知道“开”点以前是通过在2d阵列上放置圆来创建的。 这些圆的半径相同,每次放置一个圆时,圆内的点都会变为1而不是0。 所有圆都在阵列的边缘内,与圆边缘接触的点点亮

下面可以看到一个例子。圆圈是随机排列的,可能会相互接触

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

你能不能在我放完圆后,只看二维数组而不看这些圆就知道有多少个圆?这个问题可以解决吗

我试图解决这个问题是:

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


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

如果您的圆不重叠,您可以使用并获取圆数:

NCircles = (NComponents - 1) / 2
(如果圆的内部空白区域和外部空白区域构成单独的组件)

编辑:对于这些点,只需选择大小在一定范围内的连接元件,即可排除点和其他虚假区域

适用于此图片的简单CCL类型:

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 
还有一种可能的方法:您可以尝试使用预定义的半径


例如,OpenCV库包含用于图像和数组(以及Hough变换)的标记函数。

为什么不随机生成圆并对其进行计数

插入新圆时,只需检查它们是否重叠即可。 当你尝试了一定的次数,但没有插入新的圆圈时,停止插入新的圆圈。使用最后一个值,你可能需要玩一点


您可能会重复几次,然后将结果平均化。

通过“2d数组”,您的意思是否与中的方形网格图类似:?如果是,则晶格、网格或网格将是更合适的术语。我的意思是方形网格可以重叠圆?半径是多少?是否存在圆不能重叠的约束/相交?即使有此约束(假设每个圆包含9个点),什么能保证每9个点都是一个圆心,因此点的数量和圆的数量之间存在对应关系?如果我只画一个圆,你怎么能通过观察点的数量猜出来呢?圆不能重叠。半径是我在文本中说的,是d之间距离的2倍ots。关于牛顿的问题-只要画出来,它会更简单。我稍后会添加一张图片。我发现从维基上看有点难理解,这能找到我在所附图片中提到的内容吗?是的,但这些点稍微改变了解决方案:你必须计算大小在某个范围内的组件(排除点)I"很抱歉,我想我实际上没有解释清楚。我现在将再次编辑这个问题,请查看更改。因此,您有中心坐标为非整数的小填充圆的光栅化?如果是,CCL仍然是有效的方法,而触摸图形可能会导致问题。看这里:lol,我的意思是我没有随机生成它们。它们是就在那里。我不插入它们,我把问题嵌入其中。啊,好的。然后按照MBo的答案。