我得到了一个二维二进制数组。一些点亮起,一些点熄灭(1 表示亮起,0 表示熄灭)。
我知道“on”点之前是通过在二维数组上放置圆圈创建的。 圆圈的半径相同,每放置一个圆圈,圆圈内的点就会从 0 变为 1。 所有的圆圈都在阵列的边缘内,并且点亮了接触圆圈边缘的点。
如下图所示。圆圈是随机排列的,可能会接触。
请注意,圆圈内的点为 1,所有其他点均为 0。
在我放置圆圈之后,你可以通过查看没有圆圈的二维数组来找出有多少个圆圈吗?这个问题可以解决吗?
我解决这个问题的尝试是:
首先,我假设我的圆圈可以包含图中的点(半径大到足以包含 4 到 7 个点。 然后我尝试对圆圈的可能方向进行分类,但是有很多。
我想找到这两个圆圈。请注意,它们不能重叠,但可以彼此靠近。
最佳答案
如果您的圈子不重叠,您可以使用 connected component labeling algorithm并获取圈数:
NCircles = (NComponents - 1) / 2
(如果圆圈的内部空白区域和外部空白区域形成单独的组件)
编辑:对于这些点,值得只选择尺寸在某个范围内的连通成分,以排除点和其他错误区域。
适合这张图的简单类型的覆铜板:
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 库包含适用于图像和数组(以及霍夫变换)的标记功能
关于arrays - 查找二维数组中有多少个圆的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51478118/