Carrés: trouver plusieurs contours dans un champ source?

9

Il s'agit principalement d'une question de suivi d' un problème d'il y a quelques semaines , même s'il s'agit de l'algorithme en général sans application à mon problème réel.

L'algorithme recherche essentiellement toutes les lignes de l'image, en commençant par le coin supérieur gauche de celle-ci, jusqu'à ce qu'il trouve un pixel qui est une bordure. En pseudo-C ++:

int start = 0;
for(int i=0; i<amount_of_pixels; ++i)
{
   if(pixels[i] == border)
   {
      start = i;
      break;
   }
} 

Lorsqu'il en trouve un, il démarre l'algorithme des carrés de marche et trouve le contour de l'objet auquel appartient le pixel.

Disons que j'ai quelque chose comme ça:

entrez la description de l'image ici

Où tout sauf la couleur blanche est une bordure.

Et ont trouvé les points de contour de la première goutte:

entrez la description de l'image ici

Pour l'algorithme général, c'est fini. Il a trouvé un contour et a fait son travail. Comment puis-je passer aux deux autres blobs pour trouver également leurs contours?

TravisG
la source
besoin d'aide pour cela, veuillez consulter ce stackoverflow.com/questions/17232672/…

Réponses:

7

Pourriez-vous simplement effacer le polygone trouvé en le dessinant dans la couleur d'arrière-plan et répéter jusqu'à ce qu'il ne reste plus rien?

Adam
la source
1
Voilà comment cela devrait être fait. Remplissez l'élément trouvé avec l'arrière-plan (ou une autre couleur) et poursuivez la recherche (vous pouvez continuer au point où vous avez trouvé le premier "match")
bummzack
Oh wow. Je ne connaissais même pas le remplissage des inondations. Merci.
TravisG
1

pourquoi ne pas enregistrer les informations de blob dans un autre tableau et vérifier si les pixels nouvellement trouvés tombent dans la zone de délimitation du blob précédent? Un peu plus de manipulation sera nécessaire pour traiter les blobs en dessous du centriode du blob précédent et qui tombent dans la zone de délimitation.

Abe K
la source