在任意二进制矩阵

时间:2016-12-08 06:36:15

标签: algorithm matrix geometry

给定一个任意大小的二进制矩阵,我需要找到适合这个矩阵的圆圈,只能覆盖" 0" -fields和no" -1" -fields。

对于这个例子

1 0 0 0 0 1 1
1 0 0 0 0 0 1
1 0 0 0 0 0 1
1 0 0 0 0 0 1
1 0 0 0 0 1 1

我想找到以下最大圆(在+中表示)

1 0 0 + 0 1 1
1 0 + + + 0 1
1 + + + + + 1
1 0 + + + 0 1
1 0 0 + 0 1 1

实际上这不是圆圈,只是它的近似值。在直方图的帮助下,可以在这样的二进制矩阵中查找矩形,请参阅here。另外,我试图找到像这样的小圆圈:

1 0 + 0 0 1 1                1 0 0 0 0 1 1
1 + + + 0 0 1                1 0 0 0 0 0 1
1 0 + 0 0 0 1   or this one  1 0 0 + 0 0 1
1 0 0 0 0 0 1                1 0 + + + 0 1
1 0 0 0 0 1 1                1 0 0 + 0 0 1

是否有人有一个聪明的想法(如直方图的直方图方法)如何识别这些圆圈(或分别是它的离散近似)?

2 个答案:

答案 0 :(得分:3)

为每个0元素执行nearest neighbour searchfind the closest 1元素,使用欧几里德距离创建另一个矩阵,存储每个元素到最近{{1}的距离(或者只是跟踪最大的)。

可以适合最大圆的空间将由距离最近邻居的距离最大的元素给出,每个元素的距离将指定可以放在以该元素为中心的空间中的圆的大小(距离1表示单个1,距离2表示简单交叉等。)

请注意,这仅适用于以给定元素为中心的圆圈。它不会处理在一个元素和另一个元素之间中心的圆圈。

答案 1 :(得分:-1)

步骤1:     通过逐个元素开始迭代

1.1 : If the element is 0
     1.1.1 : check if it in the border , ie,  row = 0 or row = max_row or col = 0 or col = max_col
     1.1.2 : if not so, check if bottom , top, left and right elements are 0
     1.1.3 : if all are 0, increment radius 
       1.1.4 : else break;
       1.1.5: now check bottom-1, top+1, left-1; right+1 to see if they are 0
       1.1.6: if they are also 0, again increment radius
       1.1.7: repeat the above steps till you break
 1.2 : check all elements of matrix