2
votes

Que signifient TM_CCORR et TM_CCOEFF dans opencv?

Que signifient TM_CCORR et TM_CCOEFF dans opencv? J'ai trouvé que TM_CCORR représente le coefficient de corrélation. Cependant, le TM_CCOEFF sert également à être le coefficient de corrélation en raison de sa dénomination.

Savez-vous ce que signifient les abréviations?

TM_SQDIFF = T M Emplate UTILISATION Sq uare Diff érence

TM_CCOEFF = T M Emplate UTILISATION DU TABLEAU DE CORRESPONDANCE Coeff isante?

TM_CCORR = T M Emplate UTILISATION Corr exaltation ???


2 commentaires

Voir la documentation OpenCV pour les formules exactes.


Merci @HansHirse. Cependant, il n'y a que les formulaires et non l'explication des formulaires qui se ressemblent assez entre TM_CCORR et TM_CCOEFF. Mais que signifie l'abréviation? sont les deux coefficients de corrélation?


3 Réponses :


6
votes

Comme le mentionne HansHire, la documentation officielle présente les formules utilisées pour la sommation des pixels lorsque la fenêtre glisse. De plus, la documentation Python OpenCV montre des exemples:

TM_CCORR

TM_COEFF

TM_CCOEFF

TM_CORR

Notez que les documents disent:

Vous pouvez voir que le résultat utilisant cv2.TM_CCORR n'est pas bon comme prévu.

Si vous souhaitez utiliser des captures d'écran ou des sections d'images (à la Sikuli ) qui restent toujours les mêmes (pas des cadres de caméra du monde réel où l'éclairage / les transformations peuvent changer), utilisez matchTemplate , sinon essayez de l'éviter. C'est très bon pour des cas d'utilisation spécifiques uniquement et il n'y a pas de différence énorme entre les différentes fonctions de sommation en termes de résultats pratiques.

Pour répondre à votre commentaire sur ce que les abréviations TM_CCORR et TM_CCOEFF ?:

Pour être à 100%, je ne sais pas honnêtement, mais cela ne m'empêchera pas de deviner :)))

Mon intuition, basée sur les formules de documentation, est que TM_CCORR est la corrélation directe ("la plus simple") entre le modèle et l'image:

Le pixel de résultat est la somme du produit scalaire entre le pixel du modèle et le pixel de l'image pour chaque pixel du modèle.

Au fur et à mesure que le modèle "glisse" sur l'image, l'image résultante est calculée.

TM_CCOEFF mais au lieu du pixel modèle actuel ( T ), un "coefficient" plus complexe ( T' ) est utilisé ( T(x′,y′)âˆ'1/(wâ‹…h)â‹…âˆ'x″,y″T(x″,y″) ) (qui de façon similaire ( I' utilise).

Ma compréhension de la notation mathématique est assez limitée, mais pour autant que je COEFF après la formule, la version CORR par opposition au COEFF prend en compte les dimensions du modèle et de l'image ainsi que la somme des intensités de pixels.

La seule autre méthode prise en charge est TM_SQDIFF qui, comme son nom abrégé l'indique et la formule le confirme, utilise la distance au carré entre le modèle et les intensités de pixels de l'image.

Pour chacune de ces 3 méthodes principales, il existe des versions normées.

Ok, c'est mon point de vue sur ce que signifie l'abréviation (par exemple, corrélation directe (produit scalaire) par rapport à une corrélation plus compliquée (sans jeu de mots))

Mais cela veut-il dire?

En termes pratiques, je ferais principalement attention au fait que TM_CCORR et TM_CCOEFF font la correspondance la plus probable avec le pixel le plus lumineux tandis que TM_SQDIFF est l'inverse: les valeurs les plus sombres correspondent probablement (voir les images d'exemple liées).

Je commencerais par TM_CCOEFF puis si les résultats pour les images actuelles ne renvoient pas des résultats cohérents avec les paramètres, mais comme mentionné précédemment, je n'utiliserais cela que pour des conditions très très contrôlées.

Pour les données en direct qui ne sont pas des captures d'écran ou des modèles qui font partie de la même image (a-la "où est Waldo"), je me pencherais sur la détection d'objet (par exemple, former un SVM en utilisant HOG comme descripteur de fonctionnalité)


2 commentaires

Merci. Savez-vous aussi ce que signifient les abréviations TM_CCORR et TM_CCOEFF?


J'apprécie la rigueur avec laquelle vous poursuivez cela, j'ai fourni plus d'informations ci-dessus. Espérons que cela couvre les aspects pratiques. Si vous voulez vraiment descendre dans les terriers pour celui-ci: option 1 si vous êtes satisfait de C ++ regardez l' implémentation , option 2: utilisez un langage que vous préférez et écrivez vos propres fonctions de corrélation, testez-les d'abord avec des nombres bruts, puis écrivez une autre méthode qui peut traverser tous les pixels img pour ensuite traverser tous les pixels du modèle par pixels d'image, calculer la corrélation et stocker le résultat.



3
votes

Voir "Apprendre OpenCV 3: Computer Vision en C ++ avec la bibliothèque OpenCV" par Adrian Kaehler, Gary Bradski

https://books.google.com.au/books?id=SKy3DQAAQBAJ&lpg=PT607&ots=XGg5zrJXPp&dq=TM_CCOEFF&pg=PT606#v=onepage&q=TM_CCOEFF&f=false

D'après le livre:

TM_CCORR = Corrélation croisée

TM_CCOEFF = Coefficient de corrélation

FWIW: Le −1/(w⋅h)⋅∑x″,y″T(x″,y″) dans la méthode TM_CCOEFF est simplement utilisé pour a) rendre le modèle et l'image nuls et b) rendre les parties sombres des valeurs négatives de l'image et des parties lumineuses des valeurs positives de l'image.

Cela signifie que lorsque les parties claires du modèle et l'image se chevauchent, vous obtiendrez une valeur positive dans le produit scalaire, ainsi que lorsque les parties sombres se chevauchent avec des parties sombres (-ve valeur x -ve valeur donne + ve valeur). Cela signifie que vous obtenez un score + ve pour la correspondance des parties lumineuses et des parties sombres.

Lorsque vous avez sombre sur le modèle (-ve) et brillant sur l'image (+ ve), vous obtenez une valeur -ve. Et lorsque vous avez clair sur le modèle (+ ve) et sombre sur l'image (-ve), vous obtenez également une valeur -ve. Cela signifie que vous obtenez un score négatif sur les discordances.

Par contre si vous n'avez pas le terme −1/(w⋅h)⋅∑x″,y″T(x″,y″) , c'est-à-dire dans la méthode TM_CCORR , alors vous n'obtenez aucune pénalité lorsque il y a des incohérences entre le modèle et l'image. En fait, cette méthode mesure l'endroit où vous obtenez l'ensemble de pixels le plus lumineux de l'image qui ont la même forme que le modèle. (C'est pourquoi le logo, le ballon de football et la zone au-dessus de la jambe de Messi ont une intensité élevée dans le résultat correspondant).


0 commentaires

0
votes

La formule suivante donne une version centrée de T (x, y):

( xâ € ², yâ € ²)

Est un peu différent avec I…, car il centre I dans le noyau (w, h).

Iâ € ² (x + xâ € ², y + yâ € ²) = I (x + xâ € ², y + yâ € ²) âˆ'1 / (wâ ‹… h) â‹… âˆ'x »» ², y "I" (x + x "," y + y ")

Je pense qu'idéalement TM_CCORR_NORMED et TM_CCOEFF_NORMED devraient donner des résultats similaires. La différence peut se produire en raison de l'arrondi informatique, car TM_CCOEFF_NORMED fonctionne généralement avec des nombres plus proches de zéro.

Mise à jour

T '= T - m, où m est une valeur moyenne de T

I '= I - I * M, où M est une matrice de filtre moyenne de taille (w, h)

TM_CCOEFF  = T' * I' = (T - m) * (I - I * M) =
           = ((T - m) * I) * (U - M)
           = TM_CCORR * SHARPNESS - m * (I * SHARPNESS)

       

où U - est le filtre unitaire et SHARPNESS = U - M est le filtre de netteté.

Ainsi, TM_CCOEFF est la netteté de TM_CCORR avec une certaine normalisation.


0 commentaires