跟踪的好功能? AR Drone 2

时间:2016-02-27 17:10:48

标签: opencv image-processing tracking shape detection

我正在尝试从相机实现对象跟踪(只有一个摄像头,没有Z信息)。相机具有720 * 1280分辨率,但我通常将其重新缩放至360 * 640以便更快地处理。

这种跟踪是从机器人相机完成的,我想要一个尽可能健壮的系统。

我将列出我到目前为止所做的事情以及结果是什么。

  1. 我尝试做 颜色跟踪 ,我会将图像转换为hsv颜色空间,进行阈值处理,进行一些形态变换,然后找到面积最大的对象。除非没有其他具有相同颜色的对象,否则这种方法可以对对象进行公平跟踪。当我正在寻找最大值时,如果有任何其他物体比我需要的物体更大,机器人会朝着更大的物体前进
  2. 然后,我决定跟踪特定颜色的 圆圈对象 。但是,在不同的角度下很难找到
  3. 然后,我决定跟踪 特定颜色的方形对象 。我用过这个
  4.        // Approximate contour with accuracy proportional
            // to the contour perimeter
            cv::approxPolyDP(
                    cv::Mat(contours[i]),
                    approx,
                    cv::arcLength(cv::Mat(contours[i]), true) * 0.02,
                    true
            );
    

    然后我检查了这个条件

      

    if(approx.size()> = 4&& approx.size()< = 6)

    然后我检查了

      

    坚固性> 0.85和纵横比在0.85和1.15之间

    但结果仍然没有我想象的那么强劲,特别是尺寸。如果有几个正方形,则找不到所需的正方形。

    所以,现在我需要一些建议,我可以使用该对象的其他 功能 来改进跟踪以及如何使用?正如我上面多次提到的,其中一个主要问题是 size 。而且我知道物体的大小。但是,我不知道如何使用它,因为我不知道物体与相机的距离,这就是为什么我不知道如何用像素表示来表示它的大小,以便我可以消除任何其他不属于该范围的斑点。

    更新

    在第三步中,我描述了如何检测具有特定颜色的方块。以下是我得到的例子。

    我将此HSV范围用于红色:

      

    标量(250,129,0),标量(255,255,255),参与OpenCV的inRange函数

         

    HMIN = 250,HMAX = 255; SMIN = 129,SMAX = 255; VMIN = 0,VMAX = 255;   (希望看到你关于调整这些值的建议)

    所以,在这张图片中你可以看到处理过程;高斯模糊(5 * 5), 形态闭合两次(5 * 5)。带有“结果”标签的图像显示被跟踪的对象(请查看绿色方块)。

    Thresholding and tracking based on HSV colour space 1

    在第二帧上,您可以看到它无法检测到“红色方块”。这两张照片之间唯一的主要区别是我弯下了笔记本电脑的盖子(如果你不注意的话,请仔细看看)。我认为这是因为 照明 ,这会导致阈值处理产生不理想的结果。

    Bended the lid of the laptop

    我能想到的唯一方法是对图像进行两次单独的处理。首先,根据我上面的颜色进行阈值处理。然后,如果我发现对象移动到下一帧。如果不使用this opencv's find squares方法。

    然而,这种方法将涉及对图像进行过多处理。

3 个答案:

答案 0 :(得分:0)

如果您有一个模板是目标对象图像的图像,则尝试使用与SIFT或SURF匹配的特征。 https://www.youtube.com/watch?v=ZXn69V-1kEM

http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_surf_intro/py_surf_intro.html

注1:您可以使用灰度级的特征匹配,这可以缩短处理时间

注2:您可以尝试其他回归方法,如人工神经网络而不是RANSAC

答案 1 :(得分:0)

正如您在要求中提到的那样,您只需要跟踪一个红色的平坦区域。因此,您已经有两个用于跟踪目的的特征:

  • Flat Region
  • 红色

这是一个算法:

  • 检测区域中图像计算方差的平坦区域。方差较小的区域可能是平坦区域。
  • 如果它的色调值接近红色,则将其归类为感兴趣的对象。
  • 然后从邻近像素进行一些投票,以获得对象的精确二进制映射。

您可以尝试的其他方法是为您的目的调整Harris角落探测器: Harris Corner Detector
在Harris Corner检测器中,通过使用2×2矩阵的特征值来确定分数。如果两个特征值都很小,则意味着它是一个平坦的区域。它在OpenCV教程中得到了很好的解释。然后,您可以使用颜色信息细化标识的平坦区域。它应该合理地处理透视变换。

答案 2 :(得分:0)

如果你重新考虑你的第二点,找到带圆圈的物体,你实际上应该寻找椭圆,因为它与物体的角度。为了检测图片中的省略号,我复制粘贴了Samarth Brahmbhatt的“Practical OpenCV”一书中的代码(你应该在Google上找到它)。所用算法的理论是这篇文章:http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=765658