Je cherche a convoluer deux matrice2D sans passer par la transformer de fourier, quelqu'un aurait il deja le code?
Je cherche a convoluer deux matrice2D sans passer par la transformer de fourier, quelqu'un aurait il deja le code?
Tu prends une convolution 1D et tu l'effectues sur les 2 dimensions.
pas mal de lib de traitement d'image qui font ça...
J'ai pas le code,
Mais quelle est la formule mathematique pour que je m'amuse un peu.
ba la en fait j'ai pas d'editeur d'equation mais c'est la:
http://fr.wikipedia.org/wiki/Produit_de_convolution
par contre ca c'est la convolution 1D...
Sous vc6 j'en connait pas qui fonctionne bien, si t'en connait une valide j suis preneur
http://cimg.sourceforge.net/index.shtml
C'est un .h
Si une partie ne compile pas, alors vire des trucs pour ne garder que ce que tu as besoin...
A base de template => chaud pour VC6.0 quand même
A voir...
Je persiste et je signe avec openCV, une librairie que l'on utilise beaucoup dans la recherche en vision
Avant de poser une question, lire la Avant de répondre, lire la question
Une nouvelle fois (je l'ai déjà dit je ne sais plus quand, mais c'est récent), les matrices sont à multiplier pour avoir le produit de convolution.
Aucune réponse à une question technique par MP.
Ce qui vous pose problème peut poser problème à un(e) autre
http://thebrutace.labrute.fr
??!!?
Quand on multiplie 2 matrices carré de dimension N le resultat est une matrice carré de dimension N. Si on fait la convolution la matrice resultat a une dimension 2N-1
Les matrices servent dans le produit de convolution à effectuer le calcul :
Car le produit de deux matrices est une série de multiplications/additions.x(n)=a*x(n-1)+b*x(n-2)+...
Que cherches-tu à convoluer exactement ?
Par exemple, on va faire le produit de convolution entre une image et un noyau de convolution 3x3, 5x5, etc.
Aucune réponse à une question technique par MP.
Ce qui vous pose problème peut poser problème à un(e) autre
http://thebrutace.labrute.fr
Euh, non, pas du tout ...Quand on multiplie 2 matrices carré de dimension N le resultat est une matrice carré de dimension N. Si on fait la convolution la matrice resultat a une dimension 2N-1
La matrice résultat sera la plus grande matrice des deux ...
J'ai peur qe tu n'ai pas bien compris le problème.
Si tu veux plus d'info sur le calcul consulte les généralités ici :
http://docs.gimp.org/fr/plug-in-convmatrix.html
Et tu en as une autre dans le forum C :
http://www.developpez.net/forums/sho...d.php?t=176408
Le multipost est interdit...
Si tu as des soucis, il va falloir expliquer ce que tu cherches à faire, quelles sont tes matrices, etc.
Aucune réponse à une question technique par MP.
Ce qui vous pose problème peut poser problème à un(e) autre
http://thebrutace.labrute.fr
Oui, spécialiser ta question, mais bon, comme tu ne veux pas de FFT, je ne vois même pas où est le problème, une convolution 2D, c'est juste 2 convolutions 1D, et la convolution, c'est pas le plus compliqué... une somme de produits, on a vu pire.
Bien sur harsh...
Y'a aussi ITK, VIGRA...
Je proposais la plus simple à utiliser (simple convolution 2D!)
Désolé de te contredire, mais un convolution de 2 matrices de taille N donne une matrice de taille 2N-1, c'est mathématique - demande à Matlab, il confirmera -> xcorr -. Ensuite, on peut toujours supprimer les bords, mais c'est un choix à faire, ce n'est pas automatiqueEnvoyé par PRomu@ld
Il me semble qu'il y a mesentente parce que ca j'ai bien compris justement. Le probleme c'est que je ne vois pas comment une simple multiplication de matrice change la dimension de la matrice resultat(->progfou)
oulala....
Euh je pense qu'il faut que tu regardes un peu de théorie sur la convolution avant de la coder.
Ce n'est pas un produit de matrice, d'ailleur un produit de convolution est commutatif par le produit de deux matrices.
Un exemple en 1 dimension soit deux signaux discret et causaux, A(a0 a1 a2 a3 a4) et B(b0 b1 b2), on considére que en dehors de leur support leur valeur est nulle.
un exemple en continue:(L'idée c'est de retourner puis de décaler et multiplier et additionner)
posons convolution(a,b)(k) = c(k) = sigma sur n (A(n)*B(k-n))
//premier décalage
0 0 a0 a1 a2 a3
b2 b1 b0 0 0 0
c0 = 0*b2 + 0*b1 + a0*b0 + a1*0 + a2*0 + a3*0
//deuxiéme décalage
0 a0 a1 a2 a3
b2 b1 b0 0 0
c1 = 0*b2 + a0*b1 + a1*b0 + a2*0 + a3*0
//troisiéme décalage
0 a0 a1 a2 a3
0 b2 b1 b0 0
c2 = a0*b2 + a1*b1 + a2*b0 + a3*0
//quatriéme décalage
0 a0 a1 a2 a3
0 0 b2 b1 b0
c3 = a0*0 + a1*b2 + a2*b1 + a3*b0
etc...
tu vois bien qu'a la fin tu as C (c0 c1 c2 c3 c4 c5) cad la dimension de ton vecteur est dim(C) = dim(A) + dim(B) - 1.
Régle du support: soit A définit sur [sa0 sa1] et nulle en dehors et B sur [sb0 sb1] et nulle en dehors alors C produit de convolution de A et B est définit sur
[sa0 + sb0,sa1 + sb1]
sur l'exemple précédent:
[0 + 0,2 + 3] = [0,5]
http://fr.wikipedia.org/wiki/Produit_de_convolution
Voila pour le support.
Ici on a considéré que les signaux représenté par des vecteurs s'annulaient en dehors de leur support, pour certaine application on considére que les signaux sont périodiques.
Si tu ne te plantes pas, comment veux tu pousser?
Ouh là là...
Va falloir que tu nous dises ce que tu veux exactement !
Convoluer deux matrices ?
Qui peut m'expliquer ce que c'est ?
Moi je connais la multiplication d'une matrice par une autre, l'une représentant le signal, l'autre les coeff à appliquer, mais il faut dire qu'en 2D, je ne connais pas très bien.
Aucune réponse à une question technique par MP.
Ce qui vous pose problème peut poser problème à un(e) autre
http://thebrutace.labrute.fr
Bon c'est un probléme de vocabulaire vecteur signal matrice signal 2d etc....
Quand tu fais du filtrage sur une image tu fais un produit de convolution de deux signaux que tu peux représenter chacun par une matrice aprés il faut voire si tu les considéres périodiques ou non mais c'est une autre histoire.
La question devrait etre reformulée en: "comment fait'on un produit de convolution sur des signaux de dimension 2 ?".
Si tu ne te plantes pas, comment veux tu pousser?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager