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

时间:2013-01-11 23:03:18

标签: delphi image-processing pixel pixels shapes

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

  1. 图片中有多少个形状。
  2. 如何计算(或多或少)确切的中间位置。
  3. 一些可视化任务的图片:

    这是一张随机形状的照片(大多是近圆圈) 你可以看到他们彼此分开了。

    Shapes in a picture

    然后我可以轻松地绘制/计算每个形状周围的假想矩形/正方形,并计算它的中间: Shapes in a picture with rectangles/squares around them

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

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

    感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

计算图像的MSER(最大稳定极值区域)。我在这里无法解释这个算法。有关该算法的更多信息,请参阅Maximally stable extremal regions文章。

那也会给你质心。

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

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