【问题标题】:How to detect object in a video using SURF and C?如何使用 SURF 和 C 检测视频中的对象?
【发布时间】:2012-06-03 02:17:10
【问题描述】:

我使用教程中的 SURF 程序来检测视频帧中的对象。但这会检测到所有关键点和描述符。如何更改程序以仅检测特定对象?

CvSeq *imageKeypoints = 0, *imageDescriptors = 0;
int i;


CvSURFParams params = cvSURFParams(500, 1);
cvExtractSURF( image, 0, &imageKeypoints, &imageDescriptors, storage, params );
printf("Image Descriptors: %d\n", imageDescriptors->total);


for( i = 0; i < imageKeypoints->total; i++ )
{
CvSURFPoint* r = (CvSURFPoint*)cvGetSeqElem( imageKeypoints, i );
CvPoint center;
int radius;
center.x = cvRound(r->pt.x);
center.y = cvRound(r->pt.y);
radius = cvRound(r->size*1.2/9.*2);
cvCircle( frame, center, radius, red_color[0], 1, 8, 0 );
}

【问题讨论】:

    标签: opencv video-processing surf


    【解决方案1】:

    该算法旨在检测所有稳健的关键点。您必须使用这种算法检测特定对象的唯一方法是拥有要检测的对象的图片(称为标记),以便能够将标记中的这些关键点与图像中的关键点进行比较。 匹配的那些对意味着在 amrker 和图像中很常见。

    了解方法很重要:

    1 - 您的标记带有要检测的图像。您使用 SURF、FAST、SIFT 或任何算法来检测关键点。这是离线的,你只在开始时做一次。

    2 - 您开始从视频中获取帧,并为每一帧使用 SURF 来检测视频中的关键点。

    3 - 这里是真正的处理部分,您将标记中的点与图像中的点“匹配”。如果你没有得到匹配的对象,它不在图像中。

    看看这个example

    【讨论】:

    • 这对于像路标检测系统这样的实时系统是否可行?
    • 当然可以。但是您必须查看与所有标志匹配需要多长时间。也许有更简单更好的方法来完成这项任务。
    • 对于这个道路标志检测系统,您有什么建议吗?
    • cvMatchTemplate 使用不同的算法来匹配 2 张图像,而不是两组关键点。您可以在 SIFT/SURF 描述符文档中找到有关关键点匹配的信息。
    • 是的,你是对的,对不起。通过 FFT 使用互相关。我会纠正它。周日回答不行……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    相关资源
    最近更新 更多