SIFT对象检测边界框

时间:2014-03-18 02:35:04

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

我正在尝试使用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。

2 个答案:

答案 0 :(得分:0)

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

如果想要在对象周围使用更精确的矩形,则必须编写更好的检测算法。例如,当您第一次提示图像中对象的位置时,可以尝试查找更多对应关系。

答案 1 :(得分:0)

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