我有一个数据数组,其中填充了“”和“.”。例如,它显示如下内容:

...........#############..............................
.........################..................#######....
........##################................#########...
.......####################..............###########..
........##################................#########...
.........################..................#######....
...........#############..............................

我想创建一个算法,找到更大的球,删除较小的一个。
我在想用最长的序列“#”来知道直径是多少。
所以我有这样的东西:
x = 0
longest_line = 0
for i in range(0, nbLine) :
   for j in range(0, nbRaw) :
       if data[i, j] = red :
          x = x+1
          if data[i, j+1] != red:

我不知道下一步该怎么办。

最佳答案

我会使用某种类型的asegmentation algorithm,然后简单地计算每个对象中的像素数。然后简单地删除较小的一个,这应该很容易,因为你有一个对象的标签。
分割算法通常是这样工作的。
执行光栅扫描,从左上角开始,从右下角开始。
当你看到一个#,你知道你有一个对象看看是邻居。
如果邻居有先前分配的值,则将该值分配给它
如果有多个值,请将其放入某种表中,在完成处理后,可以简化该表。
举个简单的例子:

...##...
.######.
...##...

您的处理过程如下:
00011000
02111110
00011000

转换为:
2=>1
应用查找表,所有对象都将被标记为1值。然后简单地计算像素数,就完成了。
我将把实现留给您;-)

07-24 09:17