例如,我使用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()
}?