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:
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:
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:
Ensuite, nous prenons un décalage moyen raisonnable:
MeanShiftFilter[a, 3, 3]
Et nous obtenons:
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:
À 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:
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
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
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
2.) Les fenêtres sont décalées vers les emplacements égaux à leurs moyennes calculées précédemment
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
Les fenêtres qui se retrouvent aux mêmes endroits sont fusionnées
Les données sont regroupées en fonction des parcours de la fenêtre
… 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.