D'abord les bases:
Le Décalage de la valeur Moyenne de la segmentation est une homogénéisation de la technique qui est très utile pour l'amortissement de l'ombrage ou de la tonalité des différences dans les objets localisés.
Un exemple vaut mieux que de longues explications:
Action:remplace chaque pixel par la moyenne des pixels dans une plage de-r de quartier et dont la valeur est à l'intérieur d'une distance d.
Le Décalage de la valeur Moyenne dure habituellement de 3 entrées:
- Une fonction de distance pour mesurer les distances entre les pixels. Habituellement, la distance Euclidienne, mais tout autre bien définie fonction de distance pourrait être utilisé. Le Manhattan
La Distance est un autre choix utile parfois.
- Un rayon. Tous les pixels à l'intérieur de ce rayon (mesurée selon la distance au-dessus de) seront comptabilisées pour le calcul.
- Une valeur de différence. De tous les pixels à l'intérieur de rayon r, nous permettra de ne prendre que ceux dont les valeurs sont à l'intérieur de cette différence pour le calcul de la moyenne
Veuillez noter que l'algorithme n'est pas bien défini à l'intérieur des frontières, de sorte que les différentes implémentations de vous donner des résultats différents.
Je ne vais PAS discuter de la sanglante mathématique de détails ici, car il est impossible de les montrer sans notation mathématique, ne sont pas disponibles dans StackOverflow, et aussi parce qu'ils peuvent être trouvés à partir 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 le rayon et la distance, les quatre centre de pixels obtenez la valeur de 97 (leur moyenne) et sera différent de la pixels adjacents.
Nous allons calculer dans Mathematica. Au lieu de montrer la réalité des chiffres, nous allons afficher un code de couleur, de sorte qu'il est plus facile de comprendre ce qui se passe:
Le codage de la couleur de votre matrice est:
Puis nous prenons un raisonnable de Décalage:
MeanShiftFilter[a, 3, 3]
Et nous obtenons:
Où tous les centrer les éléments sont égaux (à 97, BTW).
Vous pouvez itérer plusieurs fois avec un Décalage Moyen, en essayant d'obtenir une coloration homogène. Après quelques itérations, vous arrivez à un stable non-isotrope de configuration:
À ce moment, il devrait être clair que vous ne pouvez pas sélectionner le nombre de "couleurs", vous obtenez après l'application de Décalage. Donc, nous allons montrer comment le faire, parce que c'est la deuxième partie de votre question.
Ce dont vous avez besoin pour être en mesure de définir le nombre de sortie des grappes à l'avance est quelque chose comme Kmeans de 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:
Ce qui est très similaire à nos résultats précédents, mais comme vous pouvez le voir, maintenant, nous n'avons que trois niveaux de sortie.
HTH!