6

这个问题可以用任何类型的编程语言来回答,因为我想要一些算法方面的帮助,但我更喜欢 Delphi。我的任务是检测和计算随机图片的多个形状(在 1 和 N 之间 - 主要是圆形或椭圆形)并计算它们的中间并将它们作为图片的坐标返回。每个形状的中间可以有一个填充物(但没关系)。这些形状彼此相距至少 1+ 像素。没有一个形状会喜欢与另一个形状或图片的角落融合在一起。图片的背景始终具有相同的背景颜色,这实际上并不重要,因为与背景相比,形状的边框/框架始终是不同的颜色。这使得检测形状变得容易。我正在考虑逐个像素地收集坐标,然后在每个形状周围绘制一个不可见的矩形/正方形来计算中间。然后我也听说过scanline,但我认为在这种情况下它不会更快。所以我的问题是,我该如何计算:

  1. 图中有多少个形状。
  2. 我如何(或多或少)计算它们的确切中间值。

几张图片来可视化任务:

这是一张随机形状的图片(大部分是封闭的圆圈)正如你所看到的,它们彼此分开就好了。

图片中的形状

然后我可以轻松地在每个形状周围绘制/计算一个虚构的矩形/正方形,并像这样计算它的中间: 图片中的形状,周围有矩形/正方形

在我有了矩形/正方形之后。我可以很容易地计算出中间。我该如何开始?

PS.:我在 mspaint 中画了一些圆圈。我必须补充一点,所有形状都是封闭的,这使得可以毫无问题地填充图片中的每个形状!

感谢您的帮助。

4

1 回答 1

0

计算图像的 MSER(最大稳定极值区域)。我无法在这里解释该算法。有关该算法的更多信息,您可以参考最大稳定极值区域一文。

这也会给你质心。

该算法在 OpenCv 工具和 Matlab 2012b 中作为内置函数实现。

我能想到的另一种方法,可能比以前的方法简单,是应用连通分量算法并计算对象的数量。更多信息可以在 Gonzalez 和 Woods 关于数字图像处理的书中找到。

于 2013-01-24T16:11:07.340 回答