Détection du sentier dans les images forestières

30

Quelqu'un connaît-il des recherches / documents / logiciels pour identifier un sentier (comme une ligne ou une courbe point à point) dans une image d'une scène forestière (du point de vue de la caméra debout quelque part le long du sentier)?

J'essaie de trouver un algorithme qui pourrait prendre une image comme:

texte alternatif

et produire un masque, identifiant une "traînée" probable, telle que:

texte alternatif

Comme vous pouvez le voir, l'image d'origine est un peu floue, ce qui est utile. La source d'image ne peut pas garantir une mise au point parfaite, je dois donc être capable de gérer une quantité raisonnable de bruit et de flou.

Ma première pensée a été d'appliquer un flou gaussien et de segmenter l'image en blocs, en comparant les blocs adjacents à la recherche de différences de couleurs marquées (indiquant un "bord" de traînée). Cependant, je me suis vite rendu compte que les ombres et autres changements d'éclairage jettent facilement cela.

Je pensais à extraire des fonctionnalités SURF, mais je n'ai réussi avec SURF / SIFT que lorsque l'image est parfaitement claire et avec un éclairage cohérent.

J'ai également essayé de réduire les images et les masques à des tailles beaucoup plus petites (par exemple 100x75), de les convertir en vecteurs 1xN et de les utiliser pour former un réseau neuronal basé sur FANN (où l'image est l'entrée et le masque est le souhaité). sortie). Même à une si petite taille, avec 1 couche cachée avec 75% de la taille du vecteur d'entrée, il a fallu 6 heures pour s'entraîner et ne pouvait toujours pas prédire les masques dans l'ensemble de test.

Quelqu'un peut-il suggérer d'autres méthodes ou articles sur le sujet?

Cerin
la source
1
Vous n'en avez rien dit, mais contrôlez-vous l'acquisition caméra / image? Les gens utilisent l'indice de végétation en utilisant des images proche infrarouge dans une situation similaire (pensez à calculer la couverture forestière à partir d'un satellite). Si vous avez un proche infrarouge, le problème est simple à résoudre.
carlosdc
Oui, un peu. Je prends des images avec une caméra monoculaire bon marché (caméra webcam / téléphone portable), mais je ne pense pas qu'ils stockent l'infrarouge.
Cerin
L'utilisation de plusieurs filtres de couleur pouvant différencier les spectres de la végétation et de la saleté serait probablement utile
endolith
Je suis curieux de savoir si vous avez essayé une approche bayésienne pour vous entraîner et détecter. J'ai eu une réponse que j'ai écrite il y a quelques jours, mais je l'ai ensuite supprimée parce que je pensais que vous l'aviez rejetée après avoir essayé. Si vous n'avez pas encore envisagé cette option, je serais ravie de la supprimer.
Lorem Ipsum,
@yoda, qu'entendez-vous par approche bayésienne? Je ne connais que le bayésien appliqué à la classification discrète et aux réseaux logiques. Je ne suis pas familier avec son application au CV. Je ne me souviens pas avoir vu de messages de votre part.
Cerin

Réponses:

13

Cela peut ne pas être suffisant en soi, mais comme l'un des problèmes concerne les variations d'éclairage, une étape de prétraitement de suppression des ombres peut être utile. La technique à laquelle je pense est décrite dans l'article suivant:

«On the Removal of Shadows From Images», GD Finlayson, SD Hordley, C. Lu et MS Drew, IEEE Pattern Analysis and Machine Intelligence (PAMI), Vol.28, No.1, Jan, 2006, pp.59- 68. http://www.cs.sfu.ca/~mark/ftp/Pami06/pami06.pdf

La première partie du processus produit une image en niveaux de gris invariants d'éclairage, ce qui est probablement ce que vous voulez dans ce cas. Voici un aperçu de l'exemple qu'ils donnent dans l'article:

Suppression des ombres
(source: datageist.com )

En fait, prendre le processus un peu plus loin pour produire une image de «chromaticité» peut être ce dont vous avez besoin pour faire une distinction nette entre les feuilles vivantes et les feuilles mortes. Encore une fois, un exemple tiré de l'article:

Chromaticité
(source: datageist.com )

Le hic, cependant, est que la caméra doit d'abord être calibrée. En supposant que cela soit possible, une combinaison des représentations qu'ils décrivent rendra probablement les autres méthodes que vous utilisez plus efficaces.

datageist
la source
12

Je ne pense pas que vous ayez suffisamment d'informations dans l'image source pour produire l'image du masque. Vous pouvez commencer par segmenter la couleur, c'est-à-dire que le vert n'est pas traîné, le gris / brun l'est. Cependant, il y a des régions grises / brunes sur les "bordures de piste" qui ne sont pas représentées dans votre masque. (Voir le quadrant inférieur gauche de votre image source.)

Le masque que vous fournissez implique des contraintes structurelles qui ne sont pas évidentes dans l'image source: par exemple, vos traces sont peut-être de largeur fixe - alors vous pouvez utiliser ces informations pour contraindre le masque préliminaire renvoyé par votre reconnaissance de modèle.

Poursuivre le sujet de la structure: les sentiers fusionnent-ils avec les autres? Les sentiers sont-ils délimités avec certaines caractéristiques du sol / gravier? En tant qu'être humain (qui est raisonnablement bon en reconnaissance de formes!), Je suis interpellé par les caractéristiques présentées dans le quadrant inférieur gauche: je vois des régions grises / brunes que je ne peux pas considérer comme des "traînées". Je pourrais peut-être le faire de manière concluante si j'avais plus d'informations: une carte et un emplacement grossièrement connus, une expérience personnelle sur ce sentier, ou peut-être une séquence d'images menant à ce point - peut-être que cette vue n'est pas si ambiguë si le reconnaissant "sait "ce qui a conduit à cette scène.

Une collection d'images est l'approche la plus intéressante à mon avis. Poursuivant cette réflexion: une image peut ne pas fournir suffisamment de données, mais une vue panoramique peut lever l'ambiguïté de la scène.

Throwback1986
la source
Oui, les sentiers fusionnent avec les autres. Et oui, les sentiers sont délimités par des caractéristiques de sol / gravier en ce que ces caractéristiques doivent être distinctes des zones sans sentiers. Je suis d'accord, que l'image peut être difficile dans certaines sections, mais je pense toujours qu'il y a suffisamment d'informations pour faire une assez bonne estimation de l'emplacement du sentier. Même si vous n'êtes pas familier avec ce sentier, il semble que vous n'ayez eu aucun problème avec celui-ci (à l'exception de la zone en bas à gauche, ce qui est compréhensible).
En effet, je peux faire une assez bonne estimation des limites du sentier. Mais, je crains de ne pas compter sur plus d'informations que celles présentées dans l'image source. Je «sais» ce qu'est un sentier - probablement parce que j'ai construit un modèle ou un modèle des caractéristiques saillantes comprenant un sentier: par l'expérience directe, ou en voyant des sentiers bien définis en images, etc. Pour résumer: en reconnaissant le sentier dans l'image source, je m'appuie sur bien plus que ce que j'observe dans l'image source.
Il existe certaines caractéristiques du sentier qu'un système de vision pourrait exploiter: on peut supposer que le sentier représente un espace libre et navigable. Ainsi, les caractéristiques des arbres, des buissons et des roches peuvent être classées comme «non traînées». Peut-être qu'une analyse de texture pourrait aider à les discerner? Je ne suis pas certain, cependant: le sol sous les arbres (du milieu au haut à gauche) ressemble assez au sentier.
Ma première idée aurait été de faire référence aux transformées LU ou Eigen qui donnent une réponse élevée lorsque la texture est très grossière. Cependant, ici, la principale caractéristique distinctive entre les sentiers et les non-sentiers semble être la couleur. Donc, peut-être que le convertir en espace colorimétrique HSV et créer un masque à partir des pixels qui ont une teinte «terreuse» - brunâtre ou ocre - donnerait une estimation approximative.
AruniRC
12

Il n'y a pas d'algorithme unique qui détecte comme par magie les traces dans une image aléatoire. Vous devrez implémenter une routine basée sur l'apprentissage automatique et la "former" pour détecter les traces. Sans entrer dans trop de détails, voici un aperçu de ce que vous feriez dans une approche d'apprentissage supervisé.

  1. Vous aurez besoin d'un ensemble d '"exemples de formation", j'entends par là plusieurs photos de sentiers dans différents environnements, dans lesquelles vous (le superviseur) avez étiqueté ce qui compte comme "sentier" et quel est le contexte "forêt". Vous divisez les images en sections plus petites (généralement 8 x 8) et les transformez en un "espace caractéristique" en prenant la DCT (transformée en cosinus discrète) des blocs. Le DCT de chaque bloc dans ce cas vous donne un "vecteur de caractéristique" de 64 points.
  2. En définissant un espace d'entités , un ensemble d'entités (un sous-ensemble de votre vecteur d'entités à 64 points) et un espace de classe avec les classes et , vous calculez de vos formations:XxYy1=traily2=forest

    • les distributions conditionnelles de classe
      • PX|Y(x|trail) , la densité conditionnelle des entités lorsque la classe est . trail
      • PX|Y(x|forest) , la densité conditionnelle des entités lorsque la classe est . forest
    • les probabilités de classe ou l'avant
      • trailPY(trail) , probabilité de trouver une dans un bloctrail
      • forestPY(forest) , probabilité de trouver une dans un blocforest
  3. Avec cela, vous testez votre image (encore une fois, la divisant en petits morceaux) et calculez la probabilité postérieure. En utilisant la théorie de la décision de Bayes, vous définiriez vos critères de sélection binaires (dans ce cas) quelque chose comme

    y~i(x)=argmaxyiPX|Y(x|yi) PY(yi)
    où vous affectez chaque bloc à la classe qui a la probabilité postérieure la plus élevée. Cela se traduira par votre masque binaire.

Notez qu'il s'agit d'un aperçu très simplifié de l'approche. Il y a plusieurs choses à prendre en considération et la plus importante d'entre elles est de choisir le bon ensemble de fonctionnalités pour votre problème. Vous pouvez également faire des choses plus compliquées comme utiliser des modèles de mélange et des estimations de densité basées sur le noyau, mais tout cela est trop détaillé et prend trop de temps pour écrire une réponse.

Pour une motivation et une confirmation que cette approche vaut la peine d'être essayée, voici un exemple de quelque chose que j'ai fait il y a longtemps comme devoir de cours, qui est très similaire à ce que vous essayez de réaliser. L'objectif était de détecter l'animal dans la végétation de fond (image de gauche). La figure de droite montre le masque binaire obtenu après "apprentissage" pour distinguer entre le premier plan et l'arrière-plan.

entrez la description de l'image ici entrez la description de l'image ici

Pour en savoir plus sur l'apprentissage automatique, vous voudrez peut-être consulter quelques manuels. L'un des manuels bien connus et souvent recommandés dans le domaine est:

T. Hastie, R. Tibshirani et J. Friedman, The Elements of Statistical Learning: Data Mining, Inference, and Prediction. 2e éd., Springer-Verlag (2008)

qui est maintenant disponible en PDF gratuit sur le lien fourni. Un autre livre décent est:

RO Duda, PE Hart et DG Stork, Pattern Classification , 2nd Ed., John Wiley & Sons (2001)

Lorem Ipsum
la source
1
Sur cette note, je voudrais souligner ml-class.org qui est une excellente introduction à l'apprentissage automatique.
bjoernz
Méthode intéressante. Cependant, lorsque vous dites que le Py (sentier) et le Py (forêt) sont la "probabilité de trouver un sentier dans l'image entière", voulez-vous dire la probabilité de les trouver dans un bloc 8x8, ou l'image entière? Si l'image entière, j'imagine que les deux seraient à 100%, car toutes les images d'entraînement auront les deux quelque part.
Cerin
@Cerin: Désolé, par Py (trail), je veux dire la probabilité de le trouver dans un bloc. Ce serait donc le total de tous les blocs qui ont une trace par le nombre total de blocs dans l'image entière. Je l'ai édité pour corriger cela
Lorem Ipsum
Comment définiriez-vous l'espace caractéristique X? Pourriez-vous utiliser quelque chose comme le clustering K-Means pour réduire la dimensionnalité des vecteurs d'entités à 64 points à quelque chose comme 10 entités?
Cerin
@Cerin Oui, K-means est l'une des approches courantes pour réduire la dimensionnalité.
Lorem Ipsum
5

Cela ressemble à un problème de segmentation de texture (pas de segmentation de couleur). Il y a beaucoup de méthodes,

ils utilisent souvent des ondelettes Gabor, comme ceci http://note.sonots.com/SciSoftware/GaborTextureSegmentation.html

Segmentation basée sur les superpixels http://ttic.uchicago.edu/~xren/research/superpixel/

et segmentation de coupe de graphique similaire http://en.wikipedia.org/wiki/Graph_cuts_in_computer_vision

voici l'aperçu du wiki http://en.wikipedia.org/wiki/Segmentation_(image_processing)

mirror2image
la source
les segmentations de texture de gabor semblent être bien!
nkint