对图像中的多个对象执行边框跟踪

时间:2013-07-16 18:55:10

标签: opencv image-processing computer-vision emgucv

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

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

算法如下:

  1. 找到属于任何对象的第一个像素。
  2. 跟踪该对象(有自己的算法)
  3. 获取包含该对象的正方形的最小区域
  4. 将该方块中的所有像素标记为0(将其从二进制图像中删除)
  5. 从1开始重复,直到没有任何物品离开。
  6. 这个算法与彼此相距很远的物体完美配合,但是当我尝试附加图像时,我也得到了结果。

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

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

    谢谢!enter image description here

2 个答案:

答案 0 :(得分:1)

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

您可以在以下网址

中找到有关它的更多信息

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

此致

希瓦

答案 1 :(得分: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