Segmentation de l'Image en utilisant le décalage moyen expliqué

Quelqu'un pourrait-il m'aider à comprendre comment fonctionne réellement la segmentation par décalage?

Voici une matrice 8x8 que je viens de créer

  103  103  103  103  103  103  106  104   
  103  147  147  153  147  156  153  104   
  107  153  153  153  153  153  153  107   
  103  153  147  96   98   153  153  104   
  107  156  153  97   96   147  153  107   
  103  153  153  147  156  153  153  101   
  103  156  153  147  147  153  153  104   
  103  103  107  104  103  106  103  107

En utilisant la matrice ci-dessus, est-il possible d'expliquer comment la segmentation par décalage moyen séparerait les 3 différents niveaux de nombres?

95
demandé sur Dr. belisarius 2011-01-28 21:36:34

2 réponses

les bases d'abord:

La segmentation par décalage moyen est une technique d'homogénéisation locale très utile pour atténuer l'ombrage ou les différences de tonalité dans les objets localisés. Un exemple vaut mieux que beaucoup de mots:

entrez la description de l'image ici

Action: remplace chaque pixel par la moyenne des pixels dans un voisinage range-r et dont la valeur est dans une distance d.

Le décalage moyen prend généralement 3 entrées:

  1. une fonction de distance pour mesure des distances entre les pixels. Habituellement, la distance euclidienne, mais toute autre fonction de distance bien définie pourrait être utilisée. Le Manhattan Distance est un autre choix utile parfois.
  2. un rayon. Tous les pixels dans ce rayon (mesurés en fonction de la distance ci-dessus) seront pris en compte pour le calcul.
  3. une différence de valeur. De tous les pixels à l'intérieur du rayon r, Nous ne prendrons que ceux dont les valeurs sont dans cette différence pour calculer la moyenne

Veuillez noter que l'algorithme n'est pas bien défini aux frontières, donc différentes implémentations vous donneront des résultats différents là-bas.

Je ne vais pas discuter des détails mathématiques sanglants ici, car ils sont impossibles à montrer sans notation mathématique appropriée, non disponible dans StackOverflow, et aussi parce qu'ils peuvent être trouvés de bonnes sources ailleurs.

, regardons le centre de votre matrice:

153  153  153  153 
147  96   98   153 
153  97   96   147   
153  153  147  156  

Avec des choix raisonnables pour rayon et distance, les quatre pixels centraux obtiendront la valeur de 97 (leur moyenne) et seront différents sous forme de pixels adjacents.

Calculons-le dans Mathematica . Au lieu de montrer les chiffres réels, nous allons afficher un codage couleur, il est donc plus facile de comprendre ce qui se passe:

Le code couleur de votre matrice est:

entrez la description de l'image ici

Ensuite, nous prenons un décalage moyen raisonnable:

MeanShiftFilter[a, 3, 3]

Et nous obtenons:

entrez la description de l'image ici

Où tous les éléments centraux sont égaux (à 97, BTW).

Vous pouvez itérer plusieurs fois avec le décalage moyen, en essayant d'obtenir une coloration plus homogène. Après quelques itérations, vous arrivez à une configuration Non isotrope stable:

entrez la description de l'image ici

Pour le moment, il devrait être clair que vous ne pouvez pas sélectionner le nombre de "couleurs" que vous obtenez après avoir appliqué le décalage moyen. Alors, montrons comment le faire, parce que c'est la deuxième partie de votre question.

Ce dont vous avez besoin pour pouvoir définir le nombre de clusters de sortie à l'avance est quelque chose comme kmeans clustering.

, Il fonctionne de cette façon pour votre matrice:

b = ClusteringComponents[a, 3]

{{1, 1, 1, 1, 1, 1, 1, 1}, 
 {1, 2, 2, 3, 2, 3, 3, 1}, 
 {1, 3, 3, 3, 3, 3, 3, 1}, 
 {1, 3, 2, 1, 1, 3, 3, 1}, 
 {1, 3, 3, 1, 1, 2, 3, 1}, 
 {1, 3, 3, 2, 3, 3, 3, 1}, 
 {1, 3, 3, 2, 2, 3, 3, 1}, 
 {1, 1, 1, 1, 1, 1, 1, 1}}  

Ou:

entrez la description de l'image ici

Ce qui est très similaire à notre résultat précédent, mais comme vous pouvez le voir, nous n'avons maintenant que trois niveaux de sortie.

HTH!

188
répondu Dr. belisarius 2011-02-23 11:49:03

Une segmentation de décalage Moyen fonctionne comme ceci:

Les données d'image sont converties en espace d'entités l'espace de la fonctionnalité

Dans votre cas, tout ce que vous avez sont des valeurs d'intensité, donc l'espace de fonctionnalité ne sera qu'unidimensionnel. (Vous pouvez calculer certaines entités de texture, par exemple, et votre espace d'entités serait bidimensionnel-et vous segmenteriez en fonction de l'intensité et texture)

Les fenêtres de recherche sont réparties sur la fonctionnalité espace entrez la description de l'image ici

Le nombre de fenêtres, la taille de la fenêtre et les emplacements initiaux sont arbitraires pour cet exemple-quelque chose qui peut être affiné en fonction des applications spécifiques

itérations de décalage Moyen:

1.) Les moyennes des échantillons de données dans chaque fenêtre sont calculées entrez la description de l'image ici

2.) Les fenêtres sont décalées vers les emplacements égaux à leurs moyennes précédemment calculées entrez la description de l'image ici

Étapes 1.) et 2.) sont répétées jusqu'à ce que convergence, c'est-à-dire que toutes les fenêtres se sont installées sur les emplacements finaux entrez la description de l'image ici

Les fenêtres qui se retrouvent sur les mêmes emplacements sont regroupées entrez la description de l'image ici

Les données sont regroupées en fonction des traversées de fenêtre entrez la description de l'image ici

... par exemple, toutes les données qui ont été traversées par windows qui se sont retrouvées à, disons, l'emplacement "2", formeront un cluster associé à cet emplacement.

Donc, cette segmentation produira (par coïncidence) trois groupes. Affichage de ces groupes dans le le format d'image original peut ressembler à la dernière image de la réponse de belisarius . Choisir différentes tailles de fenêtre et emplacements initiaux peut produire des résultats différents.

149
répondu mlai 2013-07-28 20:40:21