2014-10-12 4 views
0

У меня вопрос об ускорении нескольких вызовов emguCV. В настоящее время у меня есть карта захвата, которая снимает камеру с разрешением 1920x1080 при 30 Гц. Используя directshow с образцом grabber, я фиксирую каждый кадр и отображаю его на форме. Теперь я написал стабилизатор изображения, но самый быстрый, который я могу запустить, составляет около 20 Гц.Ускорение методов emguCV

Первое, что я делаю в своем стабилизаторе, - это масштаб 1920x1080 с точностью до 640x480, что значительно ускоряет работу функции.

Затем я использую goodFeaturesToTrack

previousFrameGray.GoodFeaturesToTrack(sampleSize, sampleQuality, minimumDistance, blockSize)[0]); 

, который занимает около 12-15 мс.

Следующая вещь, которую я делаю это вычисление оптического потока с использованием этого

OpticalFlow.PyrLK(previousFrameGray, frame_gray, prev_corner.ToArray(), new Size(15, 15), 5, new MCvTermCriteria(5), out temp, out status, out err); 

и занимает около 15-18ms.

В последний раз метод, который я называю потребляя функция warpAffine

Image<Bgr, byte> warped_frame = frame.WarpAffine(T, interpMethod, Emgu.CV.CvEnum.WARP.CV_WARP_DEFAULT, new Bgr(BackgroundColor)); 

это занимает около 10-12ms.

Остальные вычисления, масштабирование изображения и то, что не занимает в общей сложности около 7-8 мс.

Таким образом, общее время для расчета кадра составляет около 48 мс или около 21 Гц.

Как-то мне нужно получить общее время до 33 мс. Итак, теперь для моих вопросов.

Во-первых: Если я переключусь на использование GPU для goodFeatures и opticalFlow, это обеспечит необходимое увеличение скорости, если таковое имеется?

Second: Есть ли другие методы, кроме использования графического процессора, который может ускорить эти вычисления?

+0

Сколько вашего процессора используется? Возможно, вы можете сделать два первых вызова параллельно (если они не параллельны внутри) iow: лучше процессор/больше ядер ускорит его ;-) –

+0

У меня i7-3960X @ 4Ghz, и он использует 52%. Похоже, он использует все мои ядра. – Axis

ответ

0

Ну, я, наконец, преобразовал функции в свои GPU-коллеги и получил увеличение скорости, которое я искал. Я пошел с 48 мс до 22 мс.

Смежные вопросы