【问题标题】:SIFT object detection bounding boxSIFT目标检测边界框
【发布时间】:2014-04-23 13:01:18
【问题描述】:

我正在尝试使用 SIFT 算法从视频流中跟踪对象。我想检测对象并通过在它周围绘制一个矩形来跟踪它。问题是,矩形被倾斜并且大部分时间都没有准确地绘制。我正在使用以下代码在检测到的对象周围绘制矩形(videoImage 是视频流中的帧)。

line(videoImage, sceneCorners[0], sceneCorners[1], Scalar(255, 0, 0), 2);
line(videoImage, sceneCorners[1], sceneCorners[2], Scalar(255, 0, 0), 2);
line(videoImage, sceneCorners[2], sceneCorners[3], Scalar(255, 0, 0), 2);
line(videoImage, sceneCorners[3], sceneCorners[0], Scalar(255, 0, 0), 2);

我还尝试了以下代码(imgMatches 是只有匹配好的图像)

line(imgMatches, sceneCorners[0] + Point2f( object.cols, 0), sceneCorners[1] + Point2f( object.cols, 0), Scalar(0, 255, 0), 2);
line(imgMatches, sceneCorners[1] + Point2f( object.cols, 0), sceneCorners[2] + Point2f( object.cols, 0), Scalar(0, 255, 0), 2);
line(imgMatches, sceneCorners[2] + Point2f( object.cols, 0), sceneCorners[3] + Point2f( object.cols, 0), Scalar(0, 255, 0), 2);
line(imgMatches, sceneCorners[3] + Point2f( object.cols, 0), sceneCorners[0] + Point2f( object.cols, 0), Scalar(0, 255, 0), 2);

两者似乎给出了相同的结果。所以,我的问题是,如何绘制一个与被跟踪对象一致的矩形边界?顺便说一句,我在 Windows 7 上使用 OpenCV (C++) 和 Visual Studio 2010。

【问题讨论】:

  • 关于在堆栈溢出中编写代码块的快速说明:不要使用波浪号,而是在每行代码前留 4 个空格。
  • @ChronoTrigger 非常感谢您的有用建议。

标签: c++ opencv sift bounding-box object-detection


【解决方案1】:

问题不是绘制矩形,而是正确检测对象。如果您仅获得一些关键点,即使您使用 RANSAC 和基本矩阵或单应性对它们进行过滤,单张图像中的检测结果也会很常见。

如果你想要一个更精确的围绕对象的矩形,你必须编写一个更好的检测算法。例如,当您初步了解对象在图像中的位置时,您可以尝试寻找更多的对应关系。

【讨论】:

  • 我也试过 SURF,结果似乎一样。我将尝试为匹配的第一个关键点找到更多对应关系。你能推荐任何更好的检测算法吗?
  • 您要检测什么类型的对象?
  • @ivan_a :可以是任何类型的对象。例如,在视频中跟踪汽车。
【解决方案2】:

也许看看这个问题SIFT matches and recognition?。这是关于同一个问题。解决方案是 4D 霍夫空间。

【讨论】:

    猜你喜欢
    • 2013-12-09
    • 2017-12-23
    • 2019-11-01
    • 2019-06-18
    • 2020-05-07
    • 2013-04-06
    • 2017-02-28
    • 2018-12-10
    • 2015-02-01
    相关资源
    最近更新 更多