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