0

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

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

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 描述符 - 即我需要将什么值传递给函数gpu::dilate()和?kerneldilation_size

4

0 回答 0