delphi - 检测图片中的多个形状并计算中间位置

标签 delphi image-processing pixel shapes

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

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

一些图片来可视化任务:

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

Shapes in a picture

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

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

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

感谢您的帮助。

最佳答案

计算图像的 MSER(最大稳定极值区域)。我无法在这里解释该算法。您可以引用Maximally stable extremal regions有关该算法的更多信息的文章。

这也会给你质心。

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

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

关于delphi - 检测图片中的多个形状并计算中间位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14288072/

相关文章:

c# - 确定 ARGB 范围之间的像素颜色

java - 在 BufferedImage 的 int[] 像素数组中工作

multithreading - 如何在多线程模式下实现Delphi Tserversocket

使用 "content aware scaling"算法调整图像大小的 C# 库?

python - Pytesseract 无法识别图像中的简单文本

c - unsigned char Pixel_intensity[] 到图像; C 代码、Linux

delphi - GraphicEx 与 Delphi 10.1 Berlin

Delphi DateTimeFormat 返回错误的年份

delphi - 为什么在某些情况下使用 idSMTP 发送的电子邮件无法正确转至新行?

c# - 移动端角点检测算法