2010-06-01 11 views
2

J'ai des points de données que j'ai divisés en quelques clusters avec quelques algorithmes de cluster comme l'image ci-dessous: (cela peut prendre un certain temps pour que l'image apparaisse) alt text http://www.freeimagehosting.net/uploads/05a807bc42.pngProblème de dessin d'un polygone sur des grappes de données dans MATLAB

Chaque couleur représente un cluster différent. Je dois dessiner des polygones autour de chaque groupe. J'utilise un convhull pour cette raison. Mais comme vous pouvez le voir, le polygone pour le cluster rouge est très grand et couvre beaucoup de domaines, ce qui n'est pas celui que je recherche. J'ai besoin de dessiner des lignes (ploygons) exactement autour de mes ensembles de données. Par exemple dans l'image ci-dessus je veux un polygone qui est dessiné exactement le même (et autour) que le groupe rouge avec les 3 branches. En d'autres termes, dans ce cas, j'ai besoin d'un polygone avec 3 branches pour couvrir mes grappes rouges et non pas ce grand polygone qui couvre toute la zone. Est-ce que quelqu'un peut m'aider avec ça? S'il vous plaît noter que la solution devrait être générale, parce que les groupes vont changer à chaque exécution de l'algorithme, il doit donc être d'une manière qui est générale.

+0

double http://stackoverflow.com/questions/2944872/drawing-and-filling-different-polygons-at-the-same-time-in-matlab –

+0

Je suis désolé, mais cela est tout à fait différent. ... – Hossein

Répondre

3

Je ne suis pas sûr que ce soit une question entièrement spécifiée. Je vois souvent ces variantes sur cette question. Pourquoi cela ne peut pas vraiment être répondu ici: Imaginez six points, trois dans un triangle équilatéral avec trois autres dans un triangle équilatéral à l'intérieur dans la même orientation.

Quelle est la bonne coque autour de cela? Est-ce juste la coque convexe? Est-ce le triangle intérieur avec trois éperons de ligne qui en sortent? Est-ce que la taille relative des triangles importe? Devriez-vous spécifier ce paramètre alors?

0

Si vos clusters sont très compacts, vous pouvez essayer ce qui suit:

  1. Créer une grille, dire avec un espacement de 0,1.
  2. Définissez chaque pixel de la grille sur 1 s'il y a au moins un point de données le couvrant, réglez le pixel sur 0 s'il n'y a pas de point de données couvrant le pixel.
  3. Vous devrez peut-être exécuter imclose sur votre masque afin de remplir les petits trous à l'intérieur qui n'ont pas été colorés en raison de la malchance pure.
  4. Extrayez les pixels de bordure en utilisant, par ex. bwperim. C'est le contour du polygone que vous recherchez.