10
votes

Détecter un blob de couleur dans une image

J'ai une image qui est une chaleur de profondeur que j'ai filtré quelque chose de plus éloigné que les 25% de l'image.

Cela ressemble à quelque chose comme ça: Entrez la description de l'image ici

Il y a deux blobs de couleur dans l'image, l'une est ma main (avec une partie de mon visage derrière elle), et l'autre est le bureau dans le coin inférieur gauche. Comment puis-je rechercher l'image pour trouver ces blobs? Je voudrais pouvoir dessiner un rectangle autour d'eux si possible.

Je peux aussi faire cela (ignorer les nuances et filtrer au noir ou blanc): Entrez la description de l'image ici


0 commentaires

5 Réponses :


3
votes

Si l'image n'est vraiment que deux couleurs distinctes ou plus (très peu de flou entre les couleurs), c'est un cas facile pour un Détection de bord algorithme.


2 commentaires

Je peux leur faire exactement deux couleurs, si nécessaire. Je filtrant une carte de chaleur


Ensuite, vous devriez être d'accord avec un algorithme de détection de bord. Le problème n'est pas avec les couleurs, mais le changement de pixels. Si vous avez des différences très raies, c'est très facile - et cela s'applique à une hearmap. Cependant, je ne peux pas vous aider avec une implémentation spécifique de l'algorithme.



2
votes

Vous pouvez utiliser quelque chose comme l'exemple de code de cette question: trouver une couleur dans une image en C #

Cela vous aidera à trouver le X / Y de couleurs spécifiques de votre image. Ensuite, vous pouvez utiliser le minum x / max x et le min y / max y pour dessiner vos rectangles.


0 commentaires

4
votes

Choisissez un pixel aléatoire comme pixel de graine. Cela devient la zone A. Développer à plusieurs reprises A jusqu'à ce que A ne soit pas plus grand. C'est votre région.

Le moyen d'élargir A est de rechercher des pixels voisins à un, tels qu'ils ont une couleur similaire à au moins un pixel voisin dans un.

Quelle "couleur similaire" signifie pour vous est un peu variable. Si vous pouvez faire exactement deux couleurs, comme vous le dites dans une autre réponse, alors "similaire" est "égal". Sinon, "similaire" signifierait des couleurs qui ont des valeurs RVB ou ce que chaque composant des deux couleurs se situe à une petite quantité (c'est-à-dire 255, 128, 128 est similaire à 252, 125, 130).

Vous pouvez également limiter les pixels sélectionnés afin de pouvoir être similaires au pixel de semences, mais cela fonctionne mieux quand un humain cueille la graine. (Je crois que c'est ce qui se fait dans Photoshop, par exemple.)

Cela peut être meilleur que la détection des bords car vous pouvez traiter des gradients sans les filtrer hors de l'existence, et vous n'avez pas besoin de traiter les bords détectés résultants dans une zone cohérente. Il présente l'inconvénient qu'un gradient puisse aller jusqu'au noir au blanc et il va s'inscrire comme la même zone, mais cela peut être ce que vous voulez. En outre, vous devez faire attention à la mise en œuvre ou autrement, ce sera trop lent.


0 commentaires

3
votes

Cela pourrait être surchargé pour ce dont vous avez besoin, mais il y a une excellente enveloppe pour C # pour les bibliothèques OpenCV.

J'ai utilisé avec succès OpenCV en C ++ pour la détection de blob, vous pourriez donc le trouver utile pour ce que vous essayez de faire.

http://www.emgu.com/wiki/index.php/main_page < / a>

et la page wiki sur OpenCV:

http://en.wikipedia.org/wiki/opencv

édité pour ajouter: Voici une bibliothèque de détection des blobs pour Emgu en C #. Il y a même de belles caractéristiques de commander les blobs par zone descendante (utile pour filtrer le bruit).

http://www.emgu.com/forum/viewtopic. php? F = 3 & T = 205

Modifier à nouveau:

Si Emgu est trop lourd, Aforge.net inclut également des méthodes de détection blob

http://www.aforgenet.com/framework/


0 commentaires

2
votes

Détecter l'objet à partir de l'image en fonction de la couleur de l'objet par c #.

Pour détecter un objet basé sur sa couleur, il existe un algorithme facile pour cela. Vous devez choisir une méthode de filtrage. Les étapes normalement sont:

  1. Prenez l'image
  2. Appliquez votre filtrage
  3. Appliquer GreysCalling
  4. Soustrait de l'arrière-plan et obtenez vos objets
  5. trouver la position de tous les objets
  6. Marquez les objets

    Tout d'abord, vous devez choisir une méthode de filtrage, de nombreuses méthodes de filtrage sont fournies pour C #. Je préfère principalement les filtres Aforges, à cette fin, peu de filtrage:

    1. ColorFiltering
    2. canalelfriding
    3. hslfiltering
    4. ycbcrfiltering
    5. euclideandcolorfiltering

      Mon préféré est EuclideandColorFiltering. C'est facile et simple. Pour plus d'informations sur les autres filtres, vous pouvez visiter le lien ci-dessous. Vous devez télécharger Aforge DLL pour les appliquer dans votre code. Plus d'informations sur les étapes exactes sont disponibles ici: lien


0 commentaires