La segmentation d’images utilisant le décalage moyen est expliquée

Quelqu’un pourrait-il m’aider à comprendre comment fonctionne la segmentation de Mean Shift?

Voici une masortingce 8×8 que je viens de composer

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 masortingce ci-dessus, est-il possible d’expliquer comment la segmentation du décalage moyen séparerait les 3 différents niveaux de nombres?

Les bases d’abord:

La segmentation Mean Shift est une technique d’homogénéisation locale très utile pour atténuer les différences d’ombrage ou de tonalité des objects localisés. Un exemple vaut mieux que beaucoup de mots:

entrer la description de l'image ici

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

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

  1. Une fonction de distance pour mesurer les distances entre les pixels. Habituellement, la distance euclidienne, mais toute autre fonction de distance bien définie pourrait être utilisée. La distance de Manhattan est un autre choix utile parfois.
  2. Un rayon. Tous les pixels dans ce rayon (mesurés selon 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 comsockets 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.

Je ne discuterai PAS 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 à partir de bonnes sources ailleurs .

Regardons le centre de votre masortingce:

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

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

Calculons-le dans Mathematica . Au lieu de montrer les chiffres réels, nous afficherons un code de couleur, ce qui facilitera la compréhension de ce qui se passe:

Le code de couleur de votre masortingce est le suivant:

entrer la description de l'image ici

Ensuite, nous prenons un décalage moyen raisonnable:

 MeanShiftFilter[a, 3, 3] 

Et nous obtenons:

entrer la description de l'image ici

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

Vous pouvez effectuer plusieurs itérations avec Mean Shift, en essayant d’obtenir une couleur plus homogène. Après quelques itérations, vous arrivez à une configuration non isotrope stable:

entrer la description de l'image ici

À ce stade, il devrait être clair que vous ne pouvez pas sélectionner le nombre de “couleurs” que vous obtenez après avoir appliqué Mean Shift. Alors, montrons comment le faire, car c’est la deuxième partie de votre question.

Ce que vous devez être capable de définir le nombre de clusters de sortie à l’avance est quelque chose comme le clustering Kmeans .

Il fonctionne de cette façon pour votre masortingce:

 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:

entrer la description de l'image ici

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

HTH!

Une segmentation Mean-Shift fonctionne comme ceci:

Les données d’image sont converties en espace de fonctionnalités espace des fonctionnalités

Dans votre cas, vous ne disposez que de valeurs d’intensité. L’espace réservé aux entités ne sera donc qu’unidimensionnel. (Vous pouvez, par exemple, calculer certaines caractéristiques de texture, puis votre espace de fonctions sera bidimensionnel – et vous segmenterez en fonction de l’intensité et de la texture)

Les fenêtres de recherche sont réparties sur l’espace des fonctionnalités entrer 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, ce qui peut être affiné en fonction des applications spécifiques.

Itérations de Mean-Shift:

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

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

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

Les fenêtres qui se retrouvent aux mêmes endroits sont fusionnées entrer la description de l'image ici

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

… par exemple, toutes les données qui ont été traversées par des fenêtres qui ont abouti à l’emplacement “2” par exemple, formeront un cluster associé à cet emplacement.

Ainsi, cette segmentation produira (par coïncidence) trois groupes. L’affichage de ces groupes dans le format d’image d’origine peut ressembler à la dernière image de la réponse de Belisarius . Choisir des tailles de fenêtre et des emplacements initiaux différents peut produire des résultats différents.