1

我开发了一种用于对图像中的对象进行边界跟踪的算法。该算法能够跟踪图像中的所有对象并返回结果,因此您不必将具有多个对象的图像切片以将它们与算法一起使用。

所以基本上我首先找到一个阈值,然后在阈值之后获取二进制图像,然后在其上运行算法。

算法如下:

  1. 找到属于任何对象的第一个像素。
  2. 跟踪该对象(有自己的算法)
  3. 获取包含该对象的正方形的最小面积
  4. 将该正方形中的所有像素标记为 0(从二进制图像中删除它)
  5. 从 1 开始重复,直到没有任何物体。

该算法与彼此相距很远的对象完美地工作,但是当我尝试附加图像时,我也得到了附加的结果。

问题是,正方形靠近圆形,并且它的一部分位于包含对象的正方形中,因此这部分被删除,因为程序认为它是第一个对象的一部分。

如果有人能解决这个问题,我将不胜感激。

谢谢!在此处输入图像描述

4

2 回答 2

1

您可以尝试使用精明的边缘检测技术来解决此问题。

您可以在以下 URL 中找到有关它的更多信息,

http://homepages.inf.ed.ac.uk/rbf/HIPR2/canny.htm

问候

湿婆

于 2013-07-16T19:01:49.563 回答
1

一种快速而简单的方法是在擦除形状之前按区域升序对边界框进行排序。这样,首先删除较小的形状,这将减少重叠对象的数量。如果您只有凸形,这就足够了。

伪代码:

calculate all bounding boxes of shapes
sort boxes by area (smallest area first)
foreach box in list:
    foreach pixel in box:
        set pixel to 0

保证适用于任意形状的一种方法是使用对象的掩码填充框。您已经创建了一个二进制图像,因此您可以将其用作掩码。

伪代码:

foreach box in list:
    foreach pixel in box:
        if (pixel in mask == white): set pixel to 0
于 2013-07-16T19:31:30.387 回答