Ускорение cvSmooth? - PullRequest
       12

Ускорение cvSmooth?

1 голос
/ 24 декабря 2009

Я создаю приложение для обработки изображений в режиме реального времени. Я трачу не менее 3 мс, используя cvSmooth():

cvSmooth(Obj->ImgOrig,Obj->ImgSmooth,CV_GAUSSIAN,Params->GaussSize*2+1);

В итоге это самая медленная операция во всем моем коде. Я хочу иметь возможность размывать изображение в разной степени в зависимости от пользовательского ввода перед установкой порога и дальнейшей обработкой моего изображения. Есть ли более быстрый способ сделать это?

Есть другие опции для CvSmooth за пределами гауссиана. Есть ли основания полагать, что они будут работать лучше?

Я использую OpenCV 1.1 с установленными примитивами Intel.

1 Ответ

1 голос
/ 30 декабря 2009

Я не думаю, что вы можете сделать слишком много.

Прежде всего, да, CV_BLUR вместо CV_GAUSSIAN определенно будет работать быстрее. При сглаживании по Гауссу средневзвешенное значение рассчитывается по гауссовским весам, но при использовании CV_BLUR все пиксели в радиусе имеют одинаковый вес. Это более простая операция, поэтому ее можно выполнить намного быстрее, чем размытие по Гауссу. Самый быстрый способ сделать размытие по Гауссу - использовать свертку, которая требует гораздо больших вычислительных ресурсов.

Также, возможно, попробуйте OpenCV 2.0, если это не слишком много проблем. Он использует SSE и OpenMP, которые позволяют параллельную обработку. Не уверен, что это будет быстрее, хотя.

...