Rapide de convolution 2D pour les DSP
Je veux mettre en œuvre quelques algorithmes de traitement d'images qui sont conçus pour s'exécuter sur un beagleboard. Ces algorithmes utilisent circonvolutions largement. J'essaie de trouver un bon C la mise en œuvre de convolution 2D (probablement à l'aide de la transformée de Fourier Rapide). Je veux aussi que l'algorithme pour être en mesure d'exécuter sur la beagleboard DSP, parce que j'ai entendu dire que la DSP est optimisée pour ces types d'opérations (avec ses multipliez-accumuler de l'instruction).
Je n'ai aucune expérience dans le domaine donc je pense que ce ne sera pas une bonne idée pour mettre en œuvre le produit de convolution de moi-même (j'ai probablement ne le fera pas aussi bon que quelqu'un qui comprend toutes les mathématiques derrière elle). Je crois qu'un bon C la convolution de la mise en œuvre de la DSP existe quelque part, mais je n'ai pas pu le trouver?
Quelqu'un pourrait-il aider?
EDIT: s'avère que le noyau est assez petit. Ses dimensions sont soit 2X2 ou 3X3. Donc je suppose que je ne suis pas à la recherche d'une FFT de mise en œuvre. J'étais à la recherche pour le produit de convolution sur le web pour voir sa définition afin que je puisse la mettre en œuvre directement (je ne sais pas vraiment ce que la convolution). Tout ce que j'ai trouvé est quelque chose avec multiplié les intégrales et je n'ai aucune idée de comment le faire avec des matrices. Quelqu'un pourrait me donner un morceau de code (ou de pseudo-code) pour le 2X2 noyau cas?
Merci, mais ils parlent le 1D cas là, rien de convolution 2D
2d circonvolutions (dans le traitement de l'image) sont souvent séparable, alors il peut être utilisé comme 2 1-d circonvolutions dans la séquence. Cela rend le traitement de l'exigence beaucoup plus petite. Pouvez-vous donner des exemples de types de grains que vous souhaitez utiliser?
OriginalL'auteur snakile | 2010-10-20
Vous devez vous connecter pour publier un commentaire.
Quelles sont les dimensions de l'image et le noyau ? Si le noyau est grand, alors vous pouvez utiliser FFT convolution, sinon pour des petits grains suffit d'utiliser directement la convolution.
La DSP pourrait ne pas être la meilleure façon de faire cela - juste parce qu'il a un MAC instruction ne signifie pas que ce sera plus efficace. Le CPU ARM sur le Beagle Board ont SIMD NEON ? Si oui, alors cela pourrait être le chemin à parcourir (et plus amusant).
Pour un noyau de petite taille, vous pouvez le faire convolution directe comme ceci:
Vous pouvez modifier cette option à la prise en charge des valeurs de K, il faut juste un peu de soin avec les limites supérieures et inférieures sur les deux boucles internes.
vous avez peut-être droit - je ne suis pas sûr que modulo aborder aide, mais il y a peut être d'autres avantages.
Modulo aborder aide si vous êtes faufiler dans une mémoire tampon circulaire. Je n'ai pas de chiffres pour étayer cette, mais si le TI ne pouvez pas battre le processeur hôte à l'canonique chose, c'est conçu pour, et puis c'est assez inutile combinaison!
il serait certainement intéressant d'essayer une routine comme cela à la fois sur les BRAS et le DSP et de voir qui vient en plus vite. Un avantage de le faire sur la DSP de sûr, c'est qu'il laisse les BRAS libres pour d'autres tâches. Je suppose que la solution pragmatique serait de voir ce qui, le cas échéant, dispose déjà d'une bibliothèque de code de ce que vous pourriez être en mesure de tirer parti de cette tâche, et puis aller avec qui. La plupart des Dsp ont 1D et 2D de traitement du signal bibliothèques qui serait probablement la première chose à regarder.
Bon point avec "le faire sur le DSP quitte le BRAS libre".
OriginalL'auteur Paul R
Je sais que ça peut être hors sujet, mais en raison de la similitude entre C et JavaScript je crois qu'il pourrait encore être utile. PS.: Inspiré par @Paul R réponse.
Deux dimensions 2D algorithme de convolution en JavaScript à l'aide de tableaux
Vous pouvez consulter l'article complet à http://ec2-54-232-84-48.sa-east-1.compute.amazonaws.com/two-dimensional-convolution-algorithm-with-arrays-in-javascript/
OriginalL'auteur Renato Gama