web-dev-qa-db-fra.com

Convolution contre corrélation

Quelqu'un peut-il m'expliquer les similitudes et les différences de la corrélation et de la convolution? Veuillez expliquer l'intuition derrière cela, pas l'équation mathématique (c.-à-d. Renverser le noyau/impulsion). Des exemples d'application dans le domaine du traitement d'image pour chaque catégorie seraient également appréciés.

21
Varo

Vous obtiendrez probablement une bien meilleure réponse sur l'échange de pile dsp mais ... pour commencer, j'ai trouvé un certain nombre de termes similaires et ils peuvent être difficiles à cerner les définitions.

  1. Corrélation
  2. Corrélation croisée
  3. Convolution
  4. Coefficient de corrélation
  5. Produit scalaire
  6. Corrélation de Pearson

1, 2, 3 et 5 sont très similaires

4,6 sont similaires

Notez que tous ces termes ont des produits scalaires élevant la tête

Vous avez posé des questions sur la corrélation et la convolution - elles sont conceptuellement les mêmes, sauf que la sortie est inversée en convolution. Je soupçonne que vous avez peut-être posé des questions sur la différence entre le coefficient de corrélation (tel que Pearson) et la convolution/corrélation.

Prérequis

Je suppose que vous savez comment calculer le produit scalaire. Étant donné deux vecteurs de taille égale v et w chacun avec trois éléments, le produit scalaire algébrique est v [0] * w [0] + v [1] * w [1] + v [2] * w [2]

Il y a beaucoup de théorie derrière le produit scalaire en termes de ce qu'il représente, etc.

Remarquez que le produit scalaire est un nombre unique (scalaire) représentant la correspondance entre ces deux vecteurs/points v, w En géométrie, on calcule fréquemment le cosinus de l'angle entre deux vecteurs qui utilise le produit scalaire. Le cosinus de l'angle entre deux vecteurs est compris entre -1 et 1 et peut être considéré comme une mesure de similitude.

Coefficient de corrélation (Pearson)

Le coefficient de corrélation entre une longueur égale v, w est simplement le produit scalaire de deux signaux moyens nuls (soustrayez la moyenne v de v pour obtenir zmv et la moyenne w de w pour obtenir zmw - ici zm est un raccourci pour une moyenne nulle) divisé par les grandeurs de zmv et zmw.

pour produire un nombre entre -1 et 1. Près de zéro signifie peu de corrélation, près de +/- 1 est une corrélation élevée. il mesure la similitude entre ces deux vecteurs.

Voir http://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient pour une meilleure définition.

Convolution et corrélation

Lorsque nous voulons corréler/convoluer v1 et v2, nous calculons essentiellement une série de produits scalaires et les mettons dans un vecteur de sortie. Disons que v1 est trois éléments et v2 est 10 éléments. Les produits scalaires que nous calculons sont les suivants:

output[0] = v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2]
output[1] = v1[0]*v2[1]+v1[1]*v2[2]+v1[2]*v2[3]
output[2] = v1[0]*v2[2]+v1[1]*v2[3]+v1[2]*v2[4]
output[3] = v1[0]*v2[3]+v1[1]*v2[4]+v1[2]*v2[5]
output[4] = v1[0]*v2[4]+v1[1]*v2[5]+v1[2]*v2[6]
output[5] = v1[0]*v2[7]+v1[1]*v2[8]+v1[2]*v2[9]
output[6] = v1[0]*v2[8]+v1[1]*v2[9]+v1[2]*v2[10] #note this is 
#mathematically valid but might give you a run time error in a computer implementation 

La sortie peut être inversée si une véritable convolution est nécessaire.

output[5] = v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2]
output[4] = v1[0]*v2[1]+v1[1]*v2[2]+v1[2]*v2[3]
output[3] = v1[0]*v2[2]+v1[1]*v2[3]+v1[2]*v2[4]
output[2] = v1[0]*v2[3]+v1[1]*v2[4]+v1[2]*v2[5]
output[1] = v1[0]*v2[4]+v1[1]*v2[5]+v1[2]*v2[6]
output[0] = v1[0]*v2[7]+v1[1]*v2[8]+v1[2]*v2[9]

Notez que nous avons moins de 10 éléments en sortie car pour plus de simplicité, je ne calcule la convolution que là où v1 et v2 sont définis

Notez également que la convolution est simplement un certain nombre de produits scalaires. Il y a eu un travail considérable au fil des ans pour pouvoir accélérer les circonvolutions. Les produits scalaires sont lents et peuvent être accélérés en transformant d'abord les vecteurs dans l'espace de base de Fourier puis en calculant une multiplication vectorielle unique puis en inversant le résultat, bien que je n'entrerai pas dans les détails ici ...

Vous voudrez peut-être regarder ces ressources ainsi que googler: Calcul de la corrélation et de la signification de Pearson en Python

25
Paul

La meilleure réponse que j'ai obtenue provenait de ce document: http://www.cs.umd.edu/~djacobs/CMSC426/Convolution.pdf

Je vais juste copier l'extrait du document:

"La principale différence entre les deux est que la convolution est associative. Autrement dit, si F et G sont des filtres, alors F * (G I) = (F G) * I. Si vous n'y croyez pas, essayez un exemple simple, en utilisant F = G = (- 1 0 1), par exemple. Il est très pratique d'avoir la convolution associative. Supposons, par exemple, que nous veulent lisser une image et ensuite prendre sa dérivée. Nous pourrions le faire en convoluant l'image avec un filtre gaussien, puis en la convoluant avec un filtre dérivé. Mais nous pourrions alternativement convoluer le filtre dérivé avec le gaussien pour produire un filtre appelé Différence de gaussienne (DOG), puis convoluez-la avec notre image. Ce qui est bien, c'est que le filtre DOG peut être précalculé, et nous n'avons à convoluer qu'un seul filtre avec notre image.

En général, les gens utilisent la convolution pour les opérations de traitement d'image telles que le lissage, et ils utilisent la corrélation pour faire correspondre un modèle à une image. Ensuite, cela ne nous dérange pas que la corrélation ne soit pas associative, car cela n'a pas vraiment de sens de combiner deux modèles en un seul avec corrélation, alors que nous pourrions souvent vouloir combiner deux filtres ensemble pour la convolution. "

9
user2569364

La convolution est comme la corrélation, sauf que nous retournons le filtre avant de corréler

6
Yousaf Ali