仅在框架的更改区域中找到SURF特征的最佳方法是什么?

时间:2015-11-28 16:53:53

标签: opencv feature-detection opencv3.0 surf opencv-features2d

例如,我使用GPU计算来自实时50 fps FullHD视频的帧的SURF描述符:gpu::SURF_GPU但它很慢,我无法计算每帧,仅为10 fps。

摄像机是静止的并且是固定的,因此我可以使用以下优化 - 仅在帧的更改区域上计算描述符。 我使用gpu::MOG2_GPU背景减法器,获取前景蒙版,并仅在跨越mask & frame时重新计算SURF描述符。这要快得多。

gpu::GpuMat frame, mask;

gpu::MOG2_GPU mog2GPU;
mog2GPU(frame, mask);

// do I need to do this?
/*
    gpu::GpuMat frame_src = frame.clone();
    int const dilation_size = 30;
    Mat element_dilate = getStructuringElement(MORPH_ELLIPSE, // MORPH_RECT, MORPH_CROSS, 
        Size(2 * dilation_size + 1, 2 * dilation_size + 1),
        Point(dilation_size, dilation_size))
    gpu::dilate(frame_src, frame, element_dilate);
*/

gpu::SURF_GPU surfGPU;
surfGPU(frame, mask, keypoints, descriptors);

这是否足够,或者有必要使用gpu::dilate()来增加屏蔽区域?

如果我需要这样做,那么使用多少像素来计算每个SURF描述符 - 即我需要将哪个值作为kernel和{{1}传递给函数gpu::dilate() }?

0 个答案:

没有答案