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:
Où tout sauf la couleur blanche est une bordure.
Et ont trouvé les points de contour de la première goutte:
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?
Réponses:
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?
la source
Vérifiez ça:
http://en.wikipedia.org/wiki/Connected-component_labeling Après avoir détecté les blobs, appliquez simplement des carrés de marche alg pour obtenir les marges de chaque blob.
Au revoir Lo
la source
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.
la source