Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
970 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Convolution matrice 2D

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Convolution matrice 2D

n°1394775
nickoko
Posté le 26-06-2006 à 09:50:50  profilanswer
 

Bonjour,
Je cherche à obtenir, à partir d'un tableau de valeurs, un autre tableau représentant les dérivées discretes du premier.
Apres recherche, j'ai vu qu'il fallait convoluer le tableau de valeur avec la matrice [-1 0 1].
Par contre, je ne vois pas comment programmer l'algo...
Quelqu'un a t'il déja effectué ce travail? Ou sait-il le faire?
Merci d'avance pour votre aide

mood
Publicité
Posté le 26-06-2006 à 09:50:50  profilanswer
 

n°1394791
nickoko
Posté le 26-06-2006 à 10:20:48  profilanswer
 
n°1394820
GrosBocdel
Posté le 26-06-2006 à 11:13:52  profilanswer
 


Pourquoi souhaites-tu utiliser une méthode de convolution? Ca me paraît compliqué.
du (f(x+h)-f(x))/h ne te convient pas?
 
Si tu ne l'as pas déjà fait, tu peux aller faire un tour du coté des numerical recipes
http://www.library.cornell.edu/nr/cbookcpdf.html
Sinon j'ai souvenir d'un bon bouquin rouge d'analyse numérique, aux éditions Masson qui parle des différences à droite, à gauche et centrées pour les dérivées discrètes. Si tu as accès à une bibliothèque, ce bouquin est bien.

n°1394834
nickoko
Posté le 26-06-2006 à 11:23:30  profilanswer
 

le probleme avec ta dérivée (ou 1/2(x(n)+x(n-1)), c'est qu'il va y avoir un décalage entre le pixel de départ et la dérivée.


Message édité par nickoko le 26-06-2006 à 11:45:09
n°1394841
GrosBocdel
Posté le 26-06-2006 à 11:30:13  profilanswer
 

ok, donc ce qui te gène c'est les bords du tableau.
pour le premier élément du tableau, tu peux prendre une différence à droite
pour le dernier élément, une différence à gauche
et pour tout le reste, une différence centrée.

n°1394857
nickoko
Posté le 26-06-2006 à 11:42:41  profilanswer
 

ma dérivée sera faussée sur un des deux bords alors. de signe différent des autres non?

n°1394875
GrosBocdel
Posté le 26-06-2006 à 11:55:41  profilanswer
 

nickoko a écrit :

ma dérivée sera faussée sur un des deux bords alors. de signe différent des autres non?


 
non!
Pour le premier élément de ton tableau, tu prends une différence à droite. Tu te sers donc de ton point x0 et de ton point x1
derivee(x0)=(f(x1)-f(x0))/pas
 
Pour le dernier élément de ton tableau, une différence à gauche, tu te sers de xn et x(n-1)
derivee(xn)=(f(xn)-f(xn-1))/pas
 
 
Pour les autres éléments, tu peux le faire sur 3 points
derivee(xi)=f(xi+1)-f(xi-1)/2pas
 
Fais toi un petit dessin sur papier en traçant les tangentes, tu verras, c'est OK.

n°1394900
GrosBocdel
Posté le 26-06-2006 à 12:43:30  profilanswer
 

Maintenant, pour te donner le rapport entre la méthode des différence centrées et ta convolution par la matrice [-1 0 1]:
Ta convolution, elle consiste à "faire glisser" ta matrice sur ton tableau en les multipliant entre eux. Autrement dit, en convoluant, pour chaque point xi, tu prend le point x(i-1) à qui tu affectes le poids -1, le point xi que tu pondères par zéro, et le point xi+1 que tu pondères par 1. Ca revient exactement à utiliser la formule des différences centrées, puisque ça fait f(xi+1)-f(xi-1).
Et ça pose exactement le même problème, puisqu'en début de tableau et fin de tableau, ça ne fonctionnera pas, d'où l'intérêt des différences à gauche et à droite.
Je te déconseille d'utiliser cette méthode de convolution pour faire la dérivée. C'est trop compliqué d'une part, et en plus il manque un facteur 1/2 à cette matrice.
 

n°1394929
nickoko
Posté le 26-06-2006 à 13:52:52  profilanswer
 

merci pour ta précision.
comment choisir le pas? c'est l'écart réel entre 2 pixels? (la résolution d'un pixel est de 3km2 à l'équateur mais augmente si on s'en eloigne)

n°1394946
GrosBocdel
Posté le 26-06-2006 à 14:12:20  profilanswer
 

nickoko a écrit :

merci pour ta précision.
comment choisir le pas? c'est l'écart réel entre 2 pixels? (la résolution d'un pixel est de 3km2 à l'équateur mais augmente si on s'en eloigne)


 
Si on a le choix, il faut choisir le pas de manière à ce que ton calcul de dérivée converge, c'est à dire qu'en prenant un tableau à n échantillons ou à 2n échantillons, le calcul de la dérivée donne le même résultat (à la précision que tu souhaites pour ton calcul). C'est très empirique.
Si tu n'as pas le choix, tu prends effectivement la distance entre les centres de chaque pixel, donc racine(3)km dans chacune des directions, oui.


Message édité par GrosBocdel le 26-06-2006 à 14:14:23

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Convolution matrice 2D

 

Sujets relatifs
matrice de commutation crossbartrouver adresse matrice/tableau
algo lecteur d'impulse (convolution)algorithme convolution player.
Représenter graphiquement une matrice 2Dcomment enregistrer une matrice
probléme : passage de l'adresse d'une matricevba : sélectionner une colonne d'un matrice
vba matriceAffichage d'une matrice
Plus de sujets relatifs à : [C] Convolution matrice 2D


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR