Bonne mesure pour comparer qualitativement les correctifs d'image

11

J'essaie de "faire correspondre" de petits patchs carrés dans une image. À première vue, il semble raisonnable de faire simplement une comparaison de style de distance euclidienne de deux de ces tableaux pour obtenir une mesure de «similitude». Cela fonctionne très bien dans de nombreux cas (le "meilleur" patch (valeur la plus basse) selon cette métrique ressemble beaucoup au patch de requête). Cependant, il existe de nombreux cas où cela produit une très mauvaise correspondance. Par exemple, prenez ces deux paires de correctifs:

Deux patchs d'un mur de briques, note 134 (c'est la somme des composants de la différence moyenne absolue en pixels):

Patch source Patch cible

Un patch d'un mur de briques, un patch d'herbe, marquez 123!

https://i.stack.imgur.com/d7lBZ.png https://i.stack.imgur.com/d2TBE.png

Pour un humain, "clairement" l'herbe ne correspond pas à la brique, mais cette métrique dit le contraire. Le problème vient de la variation statistique locale.

Si j'utilise quelque chose comme une comparaison d'histogramme, je perds complètement toutes les informations spatiales - par exemple, si un patch est de l'herbe en haut et de la brique en bas, cela correspondrait exactement à un patch avec de l'herbe en bas et de la brique en haut (encore une fois , un autre match "manifestement faux").

Existe-t-il une métrique qui combine en quelque sorte ces deux idées en une valeur raisonnable qui sera jugée "similaire" pour la paire 1 ci-dessus, mais qui ne sera pas également similaire pour mon exemple de patch et son miroir vertical?

Toutes les suggestions sont appréciées!

David Doria
la source
1
Lorsque vous prenez la somme des composants, vous perdez toutes les informations "spatiales" dans l'espace colorimétrique ... Évaluez les composants individuellement, par exemple en calculant la distance euclidienne sur les deux vecteurs?
Geerten

Réponses:

2

L'idée essentielle est: il n'y a rien de mal avec les informations sur les couleurs - c'est juste insuffisant. La meilleure chose à faire est donc de combiner plusieurs jeux de fonctionnalités.

Vous pouvez essayer plusieurs fonctionnalités pour résoudre cette ambiguïté. En ce qui concerne l'ensemble des fonctionnalités, vous pouvez utiliser les éléments suivants:

  1. Couleur (quelque chose comme la couleur dominante du MPEG7 ) OU Couleur Historgram
  2. Texture (sous forme de réponse de la banque de filtres) OU
  3. Histogrammes des bords

À titre de comparaison principale, je voudrais d'abord faire la distinction entre le patch de brique pure et le patch d'herbe pure. Pour cela, la couleur est certainement l'élément le plus potentiel.

Combiner des fonctionnalités pour rendre la classification plus robuste

J'utiliserais une couleur dominante (utilise mais pas la seule) ou une couleur clé et formerais les grappes. Voyez où se trouvent les têtes de grappe;

Si les têtes de cluster se trouvent toutes deux dans les zones attendues, la classe est généralement facile à détecter, si elles tombent dans la zone grise, alors la classe appartient. S'il tombe dans la zone grise, une autre fonction est requise.

De même, vous pouvez classer indépendamment à l'aide de la matrice de texture , puis combiner les deux scores pour vous assurer que les résultats ont du sens.

Faire face aux problèmes spatiaux

Plus précisément lorsque vous réalisez que les patchs peuvent avoir des parties qui sont à moitié des briques et à moitié de l'herbe. Je pense que vous n'avez plus besoin de fonctionnalités supplémentaires ou de matrice différente. Cela peut être géré de deux manières.

1. Conservez plusieurs patchs d'adhésion en tant que classes différentes. Par exemple, en dehors de la birck-onlyclasse et de la grass-onlyclasse, vous pouvez également avoir half-brick-half-grass-verticalet half-brick-half-grass-horizontalau total quatre classes. Cela peut être facilement classé en utilisant la méthode de clustering dont nous avons discuté précédemment.

2. Ajouter une classification multi-échelles Par exemple, étant donné que le patch est dans une zone grise, vous pouvez diviser le patch en deux parties, c'est-à-dire gauche vs droite. De la même manière, vous pouvez également diviser le haut contre le bas. Vous pouvez maintenant appliquer une classification identique pour cette "demi-partie". Idéalement, la fonctionnalité répertoriée ci-dessus devrait vous permettre de la rendre évolutive pour comparer une similitude de fonctionnalité entre une partie complète (par exemple, la couleur dominante peut être la même quelle que soit la taille) ou vous pourriez avoir à la redimensionner.

Ajouter plus de classes (comme dans la partie 1) ou plus de niveaux (comme dans la partie 2) sera simple; la limite supérieure proviendra de deux facteurs - soit toute division supplémentaire n'ajoutera plus de valeur à la classification, soit un bruit excessif introduira effectivement une ambiguïté dans la classification. C'est là que vous vous arrêtez.

Dipan Mehta
la source
2

Pour commencer, 2 images et 3 mesures ne suffisent pas exactement pour déterminer tout type de modèle statistique qui, en termes, peut être utilisé pour définir la mesure de comparaison optimale.

Je pense que vous pourriez commencer à jeter un œil aux papiers de reconnaissance de texture pour les méthodes et les indices. C'est un domaine actif.

Pour ce que cela vaut, j'ai exécuté quelques tests de fonctions de hachage perceptuel (basé sur DCT et Random Projection) et j'ai fait un petit essai avec le soi-disant descripteur SIFT. Ces fonctions peuvent séparer les distances inter et intra classe, bien qu'à partir de 3 images il soit impossible de conclure quoi que ce soit.

Code sur github .

Maurits
la source