Compter le nb de polygones dans une image

Compter le nb de polygones dans une image - Algo - Programmation

Marsh Posté le 29-02-2024 à 16:01:50    

Bonjour,
J'ai une image en fond noir avec un a plusieurs polygones dessus qui sont tous avec la même couleur. Je voudrais isoler chaque polygone (et donc les compter). Le but final est de mettre les pixels de chaque polygone dans une image vierge (une image par polygone).
Certains polygones peuvent être proches l'un de l'autre. Typiquement, j'ai des cas où j'ai pas une ligne noire horizontale entière entre 2 polygones.
Les polygones ont des formes très complexes et peuvent être concaves ou convexes.
 
Quel serait l'algo le plus simple qui permettrait de faire ce partitionnement. Je suis en train de regarder dans Google mais je trouve pour l'instant surtout du overkill. :/
 
Merci :jap:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 29-02-2024 à 16:01:50   

Reply

Marsh Posté le 07-03-2024 à 07:59:26    

Bon, j'avance, pas mal. Je suis parti sur un algo de type "coloriage".  
 
1) Je choisis un point de départ (le premier que je trouve en partant du haut de mon image et qui est dans la couleur unie de mon image). Je le mets dans la liste des points à traiter.
 
2) Je dépile le premier point de la liste des points à traiter et le colorie dans la couleur choisie pour le premier polygone (parmi une palette) différente des couleurs qu'on pourrait trouver sur les images à traiter.
 
3) Je cherche ses voisins connexes dans un rayon de n pixels (ex :2). C'est pour éviter les cas où j'ai 2-3 points isolés très proche d'un gros polygone et que ça soit détecté comme n nouveau polygone mais tout petit.
Pour chacun de ces voisins, je regarde s'il est colorié dans la couleur initiale de l'image (qui est en une seule couleur). Si oui, je vérifie s'il n'est pas déjà dans ma liste des points à traiter. Si ce n'est pas le cas, je l'ajoute.
 
Je boucle sur les étapes 2 et 3 tant que mon tableau des points à traiter n'est pas vide.
Quand je sors de cette boucle, je passe à la couleur suivante pour un autre polygone.
 
Je retourne à l'étape 1 et boucle tant que je trouve un pixel dans la couleur de l'image à traiter.
 
Petit souci : j'ai l'impression que dans certains cas, je boucle indéfiniment. Faut que je vérifie ça, et si c'est le cas, pourquoi. Là, comme ça, je vois rien qui pourrait expliquer une boucle infinie :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 07-03-2024 à 17:20:17    

Bon, en fait non, ça boucle pas à l'infini, c'est juste long :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 13-03-2024 à 13:19:00    

Le coloriage de chaque polygone via le calcul des voisins, ça marche bien. Par contre, pour certains gros polygones, c'est long :/
 
Si vous connaissez d'autres algos plus efficaces, je suis preneur.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 13-03-2024 à 17:36:09    

on aimerait un peu de code, parce que là c'est pas très simple à imaginer :o


---------------
Un cycle complet sera une série de 100.
Reply

Marsh Posté le 13-03-2024 à 18:24:32    

Sur une image en fond noir et d'une seule couleur (appelée couleur fournie en entrée), je cherche le premier pixel de couleur fournie en entrée en partant du haut et de gauche à droite.
 
Une fois trouvé, je récupère ses pixels voisins en ne gardant que ceux de couleur.
Je les mets dans une liste de pixels à traiter.
Je dépile le premier pixel de ma liste de pixels à traiter.
Je le colorie d'une couleur associée à mon polygone en cours d'identification.
 
Quand j'ai dépilé tous les pixels de ma liste à traiter, c'est que j'ai terminé de traiter mon polygone.
 
Du coup, je définis une nouvelle couleur en prévision du traitement du polygone suivant sur l'image (s'il y en a un). Je recommence à chercher le premier pixel de couleur fournie en entrée en partant du haut et de gauche à droite.
 
Je m'arrête quand je n'ai plus trouvé de pixel ayant la couleur fournie en entrée.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed