首页 文章

跟踪的好功能? AR无人机2

提问于
浏览
2

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

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

我将列出我到目前为止所做的工作以及结果 .

  • 我试图做 colour tracking ,我会将图像转换为hsv颜色空间,进行阈值处理,进行一些形态变换,然后找到面积最大的对象 . 除非没有其他具有相同颜色的对象,否则这种方法可以对对象进行公平跟踪 . 当我正在寻找最大值时,如果有任何其他物体比我需要的物体更大,那么机器人会朝着更大的物体前进

  • 然后,我决定跟踪 circled objects of the specific colour . 但是,在不同的角度很难找到

  • 然后,我决定跟踪 square objects of specific colour . 我用过这个

//精确比例的近似轮廓
//到轮廓周长
CV :: approxPolyDP(
CV ::垫(轮廓[I]),
约,
cv :: arcLength(cv :: Mat(contours [i]),true)* 0.02,
真正
);

然后我检查了这个条件

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

然后我检查了

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

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


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

UPDATE

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

我用这个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

在第二帧,您可以看到它无法检测"red square" . 这两张照片之间唯一的主要区别是我弯下了笔记本电脑的盖子(如果你不注意的话,请仔细看看) . 我想这是因为 illumination 而发生的,这会导致阈值处理产生不理想的结果 .

Bended the lid of the laptop

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

但是,这种方法将涉及对图像进行过多处理 .

3 回答

  • 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

  • 0

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

    • 平坦区域

    • 红色

    这是一个执行此操作的算法:

    • 检测区域中图像计算方差的平坦区域 . 方差较小的区域可能是平坦区域 .

    • 如果它的色调值接近红色,则将其归类为感兴趣的对象 .

    • 然后从相邻像素进行一些投票以获得对象的精确二进制映射 .

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

  • 0

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

相关问题