たとえば、GPU を使用して、リアルタイムの 50 fps フル HD ビデオからフレームの SURF 記述子を計算します。gpu::SURF_GPU
しかし、遅く、フレームごとに計算することはできません。
ビデオ カメラは静止して固定されているため、次の最適化を使用できます。フレームの変更された領域でのみ記述子を計算します。バックグラウンド減算器を使用しgpu::MOG2_GPU
、フォアグラウンド マスクを取得し、交差する場合にのみ SURF 記述子を再計算し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 記述子を計算するために使用されるピクセル数は何ですか?つまり、 andgpu::dilate()
として関数に渡す必要がある値は何ですか?kernel
dilation_size