Détection de surface

9

Comment segmenterait-on une grande zone de gris (allant du blanc au noir) d'une image? (Si vous le savez en opencv, vous pouvez répondre en disant ce que vous feriez en opencv). Par exemple, étant donné cette image:

entrez la description de l'image ici

Vous voyez que c'est une grande zone de gris et elle se distingue clairement du reste. Comment pouvez-vous segmenter cela si cette zone peut avoir une nuance de gris et qu'elle doit fonctionner en temps réel.

Merci d'avance.

Olivier_s_j
la source
Je vois plusieurs zones grises clairement distinguables. Pourriez-vous montrer le résultat souhaité?
Dr belisarius
mon résultat souhaité est les coordonnées des coins supérieurs droit et gauche et les coordonnées du coin inférieur gauche du rectangle gris moyen
Olivier_s_j
Pouvez-vous nous dire autre chose sur l'environnement et la variance potentielle des images que vous devrez traiter? La cible sera-t-elle toujours près du milieu de l'image? Y aura-t-il d'autres rectangles gris présents, éventuellement de la même taille? Et s'ils apparaissent comme la même nuance de gris? Y a-t-il d'autres choses que nous pourrions utiliser pour l'identifier? Aura-t-il toujours le petit "T" en haut?
justis
Salut, La cible ne sera pas toujours près du milieu de l'image. La cible sera toujours une sorte de rectangle. (Cela peut aussi être juste un mur). S'il y a plusieurs rectangles, ils doivent également être détectés, mais ils doivent être grands. De petites zones peuvent être jetées. S'ils apparaissent tous comme le même type de gris, ils doivent tous être détectés, mais les chances que cela se produise sont très faibles. La seule propriété réelle qui peut être détectée est qu'une surface aura le même gris (plus ou moins) sur toute la surface, et qu'il s'agit d'un rectangle. Il n'y aura pas de petit haut en T à chaque fois
Olivier_s_j

Réponses:

9

Vous obtiendrez une segmentation raisonnable de la zone grise en utilisant l' algorithme de bassin versant ou des coupes de graphique. Watershed est disponible en opencv mais les coupes graphiques ne le sont pas encore. (BTW Est-ce une carte de profondeur de Kinect?)

nav
la source
1
La fonction de bassin versant en opencv nécessitait une image 8 canaux à 3 bits en entrée. Ma carte de profondeur est une image 8 bits 1. Aucune idée sur la façon de résoudre ça?
Olivier_s_j
/ * obtenir les propriétés de l'image / width = src-> width; hauteur = src-> hauteur; / crée une nouvelle image pour la version en niveaux de gris * / IplImage * dst = cvCreateImage (cvSize (largeur, hauteur), IPL_DEPTH_8U, 1); cvCvtColor (src, dst, CV_RGB2GRAY);
nav
Une autre question, je viens de faire fonctionner la fonction de bassin versant dans une autre image (juste un exemple de opencv). Mais ils commencent par une image couleur et une image binaire. Je n'ai qu'une image ... l'image grascale. Une idée de ce que devrait être le masque (la deuxième variable d'entrée)?
Olivier_s_j
4

Dans Mathematica, vous pouvez faire quelque chose comme:

Colorize[MorphologicalComponents[
  ColorNegate@
   Erosion[Dilation[
     DeleteSmallComponents[
      Erosion[Binarize[
        GradientFilter[
         ColorConvert[Import@"http://i.stack.imgur.com/XdnaW.png", 
          "RGB"], 2], .015], 1], 100], 2], 2]], 
 ColorFunction -> "ThermometerColors"]

entrez la description de l'image ici

Vous pouvez probablement traduire ce code dans n'importe quelle bibliothèque de traitement d'image.

Dr. belisarius
la source
Salut, c'est joli. Mais je n'ai pas de mathématique. Mais je suppose que vous avez utilisé un seuillage basé sur l'échelle de gris de cette image? Peut-être pourriez-vous donner un peu d'informations avec votre code? Thx
Olivier_s_j
1
@Ojt Pour chaque commande, vous pouvez lire " reference.wolfram.com/mathematica/ref/xxx.html " pour une description. Par exemple reference.wolfram.com/mathematica/ref/…
Dr. belisarius
Ok j'ai fait comme tu l'as suggéré. Mais il semble que vous utilisez Binarize pour définir un seuil à une valeur donnée. Ce qui n'est pas possible dans mon cas. Étant donné que de grandes zones peuvent avoir différentes nuances de gris. (Par exemple, la surface centrale pourrait être très claire). Et puis le seuil ne fonctionnerait pas.
Olivier_s_j