Trouver le nombre de formes colorées de l'image en utilisant Python
Mon problème a à voir avec la reconnaissance de couleurs à partir d'images. Faire de microbiologie, j'ai besoin de compter le nombre de noyaux de cellules présentes sur une photo prise avec un appareil-photo de microscope. J'ai utilisé GIMP pour baliser les noyaux avec des points de couleur rouge. Maintenant j'aurais besoin de faire un script en python, ce qui, étant donné une image, me dire combien de points rouges sont présents. Il n'y a pas de rouge dans l'image, sauf dans les points.
J'ai pensé à une assez compliqué solution qui n'est probablement pas le meilleur: Prendre une photo et commencer à parcourir par le biais de pixels de la vérification de chacun de la couleur. Si c'est rouge, vérifiez toutes les 8 pixels les plus proches, de manière récursive, vérifiez chaque rouge les voisins de nouveau jusqu'à ce que plus voisins de pixels rouges sont trouvés. Puis incrémenter les noyaux de nombre par un seul et marque traversé pixels pour ne pas être réitéré par le biais de nouveau. Puis continuer itération où il s'était arrêté. Ca semble assez lourd donc j'ai pensé que je voudrais vous demander, peut-être quelqu'un a déjà fait face à un problème similaire de manière plus élégante.
Ce qui concerne,
Ponceuse
source d'informationauteur Sander | 2011-03-14
Vous devez vous connecter pour publier un commentaire.
Compter les noyaux
Le code adapté de Python Image Tutoriel. L'image d'entrée avec des noyaux à partir du tutoriel:
De sortie
Je voudrais faire comme ceci:
Commentaires:
il ne sera pas plus rapide, il ne sera pas toujours exactes.
Mais ça va être amusant de le faire - comme CV est toujours amusant et prête en 10 lignes de code. Juste un lâche pensée.
Comme pour les plus prête à la production suggestions:
Mais la solution la plus élégante serait juste pour compter les noyaux marqués dans GIMP, comme Ocaso Protal a suggéré ci-dessus. Précis et plus rapide. Tout le reste va être sujettes à des erreurs et beaucoup, beaucoup plus lent, et donc les miennes sont juste des idées en vrac, plus de plaisir que n'importe quoi.
Un simple Numpy /Scipy solution serait quelque chose comme:
Vous pouvez également utiliser PIL à la lecture de l'image.
EDIT: À la lumière des commentaires,
scipy.ndimage.mesures.label
serait utile, et aussi renvoie une valeurnum_features
qui vous donne le comte: