检测图片中的多个形状并计算中间

Ben*_*iss 6 delphi pixel image-processing pixels shapes

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

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

一些图片可视化任务:

这是一张随机形状的图片(大多数是近圆圈)正如你所看到的,它们彼此分开很好.

图片中的形状

然后我可以很容易地绘制/计算每个形状周围的假想矩形/正方形,并计算它的中间: 图片中的形状有围绕它们的矩形/正方形

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

PS.:我在mspaint中画了一些圆圈.我必须补充一点,所有形状都是CLOSED,这样就可以在图片中填充每个形状,没有任何问题!

谢谢您的帮助.

May*_*ain 0

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

这也会给你质心。

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

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