0

所以我有以下图像:

二进制图像 - 形状

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

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

我自己的想法是:

  • 遍历并找到第一个白色像素。
  • 从该像素执行 BFS,用数字 1 标记它找到的白色像素。
  • 完成后,继续遍历图像,该图像在第一个白色像素处停止,没有分配/标记数字。
  • 一旦找到,执行 BFS 并用数字 2 标记找到的所有像素。
  • 起泡,冲洗并重复。我的意思是......继续这样做直到图像结束。
  • 您要达到的数字是不同形状的数量。

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

4

1 回答 1

0

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

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

-如果一个没有看到任何randomWalk切割另一个,那么,有一个新的弓。例如,在我的图像中,假设从(0,200)开始并从(100,0)开始,然后他们在(100,200)没有接触任何东西的情况下击中,那么你有一个盒子(0,0,100,200)。将此添加到您的.randomWalkwhitecolor1st randomWalk(rw1)rw2whitecolormyBoxes

- 现在我想到了,你可以这样做:如果一个盒子里像素的颜色总和等于零(或小于一个小数字),那么那个盒子里就没有图像。所以你可以将它添加到另一个列表中,让我们调用它myEmptyBoxes

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

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

-另外,我建议您使用 opencv,它是解决此类问题的好库

希望这会有所帮助

图片

于 2013-04-15T11:25:41.873 回答