在二进制图像中识别单独形状的最简单方法是什么?

时间:2013-04-15 09:28:04

标签: java computer-vision shapes image-recognition

所以我有以下图片:

Binary Image - Shapes

现在我希望找到每个断开形状的中心点。如果可能的话,我还想找到宽度和高度。

我正在使用Java和java.awt.image包,但即使是这个问题的一般解决方案也会有所帮助。

我自己的想法是:

  • 迭代并找到第一个白色像素。
  • 从该像素执行BFS,用数字1标记它找到的白色像素。
  • 完成后,继续在没有指定/标记数字的第一个白色像素处停止迭代图像。
  • 找到后,执行BFS并标记找到的数字为2的所有像素。
  • 泡沫,冲洗并重复。我的意思是......继续这样做直到图像结束。
  • 您所关注的数字是不同形状的数量。

但这似乎有点密集,然后我必须找到中心,宽度和高度。有更简单的方法吗?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我不知道这是不是一个好主意,但也许这会对你有所帮助:

我会从边缘发送randomWalks并将图像分成较小的盒子并继续从较小的盒子发送randomWalks直到某个点(我不知道那个点会是什么但是你会知道这里没有小盒子有超过1个元素)

- 如果randomWalk在没有看到任何randomWalk的情况下切断了另一个whitecolor,那么就会有一个新弓。例如,在我的图片中,让我们说1st randomWalk(rw1)(0,200)开始,rw2(100,0)开始,然后点击(100,200)而未触及任何whitecolor,则您有一个(0,0,100,200)框。将其添加到myBoxes的arraylist中。

- 现在我想到,你可以这样做:如果一个方框中的像素颜色总和等于零(或小于一个小数字),那么就有了那个盒子里没有图像。因此,您可以将其添加到其他列表中,我们将其称为myEmptyBoxes

- 接下来,当您确定每个框中只有一个元素时,每个框的颜色,如果两个框相等或非常接近,那么它们可能是相同的图像。如果不是自动的,它们不是同一个图像,不需要处理那两个图像/盒子。

- 我想不出下一步,这一切都在我脑海中浮现。

- 另外,我建议你使用opencv,这是一个很好的库来解决这类问题

希望这会有所帮助

image