2012-11-28 4 views
2

J'utilise OpenCV 2.4 (C++) pour la recherche de ligne sur les images en niveaux de gris. Cela implique certaines étapes de traitement d'image de base comme le flou, le seuil, le détecteur de bord Canny, le filtre à gradient ou la transformation de Hough. Je dois appliquer l'algorithme de recherche de ligne sur des milliers d'images.Accélérer OpenCV

Existe-t-il un moyen d'accélérer le calcul compte tenu du grand nombre d'images?

L'un des services suivants vous aide-t-il? Processeur Intel TBB, IPP ou OpenCV? J'ai entendu que GPU OpenCV peut accélérer les calculs, mais le transfert de données est lent. Donc, en utilisant GPU pourrait ne pas être le bon choix ici?

Merci!

EDIT:

est-il un sens à l'utilisation parallel_for de TBB pour accélérer le traitement des images? Si j'utilise une boucle for comme celle-ci:

for(int i=0; i<image_location.size();++i) 
{ 
Mat img=imread(image_location[i]); 
blur(img...); 
threshold(img...); 
... 
} 

Puis-je améliorer les performances en utilisant parallel_for à la place? Quelqu'un peut-il fournir des exemples d'utilisation de parallel_pour inclure des opérations opencv?

Répondre

1

La portée de votre question est pratiquement illimitée.

Tout d'abord, avez-vous mesuré les performances de votre application pour détecter le (s) goulot (s) réel (s)? Ma conjecture serait la transformation de Hough, mais qui sait ce que fait votre code. Maintenant, si la transformation de Hough est la pièce lente, et supposant que OpenCV a une implémentation rapide, alors c'est la raison pour laquelle je vous dis que la question est problématique. Changer pour une mise en œuvre un peu mieux n'aide pas beaucoup lorsque vous décidez d'augmenter votre nombre déjà important d'images, le problème est dans l'approche elle-même.

Avez-vous vraiment besoin d'utiliser Hough? Peut-être pourriez-vous réaliser quelque chose de similaire/meilleur en utilisant des opérateurs morphologiques? Les images proviennent-elles d'un domaine commun? Pouvez-vous en inclure des exemples? Etc, etc.

+0

N'existe-t-il pas une approche typique pour traiter un grand nombre d'images? Je ne cherche pas une solution qui accélère le calcul de quelques millisecondes par image. Je me demande s'il existe une approche qui accélère le calcul peut-être deux fois ou plus. Je n'ai pas besoin d'exemples de code pour le moment, mais que pensez-vous de gpu, ipp, tbb pour un grand nombre d'images? Depuis mon code de traitement d'image est relativement basique et ne pense pas que le code lui-même est le problème mais le grand nombre d'images. – marc

+0

Une approche typique pour traiter un grand nombre d'images pourrait être l'échantillonnage de cette grande quantité, mais cela ne semble pas convenir à votre cas. Un autre serait de lui donner plus de puissance de calcul. Aussi, je ne comprends pas pourquoi vous dites que votre code est relativement basique, chaque ligne de code OpenCV peut impliquer beaucoup de traitement. J'ai vu des articles décrivant d'énormes améliorations lors du passage au GPU, mais à la fin, lorsque vous passez de milliers d'images à des millions d'images, vous rencontrez le même problème. – mmgp