Rilevamento del sentiero nelle immagini forestali


30

Qualcuno è a conoscenza di ricerche / documenti / software per identificare una pista (come una linea o curva punto-punto) in un'immagine di una scena di foresta (dal punto di vista della telecamera in piedi da qualche parte lungo la pista)?

Sto cercando di trovare un algoritmo in grado di acquisire un'immagine come:

testo alternativo

e produce una maschera, identificando una probabile "scia", come:

testo alternativo

Come puoi vedere, l'immagine originale è un po 'sfocata, il che è propositivo. La fonte dell'immagine non può garantire una messa a fuoco perfetta, quindi devo essere in grado di gestire una quantità ragionevole di rumore e sfocatura.

Il mio primo pensiero è stato quello di applicare una sfocatura gaussiana e segmentare l'immagine in blocchi, confrontando i blocchi adiacenti alla ricerca di differenze di colore nitide (indicando un "bordo" della scia). Tuttavia, ho realizzato rapidamente che le ombre e altri cambiamenti nell'illuminazione la gettano facilmente.

Stavo pensando di estrarre le funzionalità di SURF, ma ho avuto successo con SURF / SIFT solo quando l'immagine è perfettamente chiara e con un'illuminazione coerente.

Ho anche provato a ridimensionare le immagini e le maschere in dimensioni molto più piccole (ad es. 100x75), convertendole in vettori 1xN e usandole per addestrare una rete neurale basata su FANN (dove l'immagine è l'input e la maschera è la desiderata produzione). Anche a dimensioni così ridotte, con 1 strato nascosto con il 75% delle dimensioni del vettore di input, ci sono voluti 6 ore per allenarsi e non è stato ancora possibile prevedere alcuna maschera nel set di test.

Qualcuno può suggerire altri metodi o documenti sull'argomento?


1
Non ne hai parlato, ma controlli l'acquisizione di foto / immagini? Le persone usano l'indice di vegetazione usando immagini nel vicino infrarosso in una situazione simile (si consideri il calcolo della copertura forestale da un satellite). Se hai il vicino infrarosso, il problema è semplice da risolvere.
carlosdc,

Lo faccio un po '. Sto scattando immagini con una fotocamera monoculare economica (webcam / fotocamera per cellulare), ma non credo che memorizzino gli infrarossi.
Cerin,

L'uso di più filtri colorati in grado di differenziare gli spettri di vegetazione e sporcizia sarebbe probabilmente utile
endolith,

Sono curioso di sapere se hai provato un approccio bayesiano per addestrare e rilevare. Ho avuto una risposta che ho scritto qualche giorno fa, ma poi l'ho cancellata perché pensavo che l'avessi respinta dopo averci provato. Se non hai ancora preso in considerazione questa opzione, sarei felice di annullarla.
Lorem Ipsum,

@yoda, cosa intendi con approccio bayesiano? Conosco solo bayesiano come applicato alla classificazione discreta e alle reti logiche. Non ho familiarità con l'applicazione al CV. Non ricordo di aver visto post da te.
Cerin,

Risposte:


13

Potrebbe non essere sufficiente da solo, ma poiché uno dei problemi ha a che fare con le variazioni di illuminazione, può essere utile una fase di pre-elaborazione della rimozione dell'ombra. La tecnica a cui sto pensando è descritta nel seguente documento:

"Sulla rimozione delle ombre dalle immagini", GD Finlayson, SD Hordley, C. Lu e 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 prima parte del processo produce un'immagine in scala di grigi invariante di illuminazione, che è probabilmente ciò che si desidera in questo caso. Ecco un esempio dell'esempio che forniscono nel documento:

Rimozione dell'ombra
(fonte: datageist.com )

In effetti, fare un passo avanti nel processo per produrre un'immagine di "cromaticità" può essere ciò di cui hai bisogno per distinguere in modo pulito tra le foglie vive e quelle morte. Ancora una volta, un esempio dall'articolo:

cromaticità
(fonte: datageist.com )

Il problema, tuttavia, è che la fotocamera deve prima essere calibrata. Supponendo che sia possibile, una combinazione delle rappresentazioni che descrivono probabilmente renderà più efficaci gli altri metodi che stai usando.


12

Non credo di avere abbastanza informazioni nella dell'immagine sorgente per produrre l'immagine della maschera. Potresti iniziare segmentando il colore, ovvero il verde non è scia, il grigio / marrone lo è. Tuttavia, ci sono regioni grigie / marroni sui "bordi del sentiero" che non sono rappresentate nella maschera. (Vedi il quadrante in basso a sinistra dell'immagine sorgente.)

La maschera fornita implica vincoli strutturali non evidenti nell'immagine di origine: ad esempio, forse i percorsi sono di larghezza fissa, quindi è possibile utilizzare tali informazioni per vincolare la maschera preliminare restituita dal riconoscimento del modello.

Continuando il tema della struttura: i sentieri si fondono con gli altri? I percorsi sono delineati con determinate caratteristiche del suolo / ghiaia? Come essere umano (che è ragionevolmente bravo nel riconoscimento di schemi!), Sono sfidato dalle caratteristiche mostrate nel quadrante in basso a sinistra: vedo regioni grigio / marrone che non posso scartare come "scia". Forse potrei farlo in modo conclusivo se avessi più informazioni: una mappa e una posizione poco conosciuta, esperienza personale su questa pista o forse una sequenza di immagini che portano a questo punto - forse questa visione non è così ambigua se il riconoscitore "sa "cosa ha portato a questa scena.

Una raccolta di immagini è l'approccio più interessante secondo me. Continuando questa linea di pensiero: un'immagine potrebbe non fornire dati sufficienti, ma una vista panoramica potrebbe chiarire la questione.


Sì, i sentieri si fondono con gli altri. E sì, i percorsi sono delineati dalle caratteristiche del terreno / ghiaia in quanto tali elementi dovrebbero essere distinti dalle aree non-trail. Concordo sul fatto che l'immagine potrebbe essere impegnativa in alcune sezioni, ma penso ancora che ci siano abbastanza informazioni per fare una buona idea di dove si trovi il sentiero. Anche se non hai familiarità con questa traccia, sembra che tu non abbia avuto problemi con essa (tranne per l'area in basso a sinistra, che è comprensibile).

In effetti posso fare una supposizione piuttosto buona come i confini della pista. Ma temo di fare affidamento su più informazioni di quelle presentate nell'immagine sorgente. "So" che cos'è un sentiero - presumibilmente perché ho costruito un modello o modello delle caratteristiche salienti che comprendono un sentiero: attraverso l'esperienza diretta, o vedendo percorsi ben definiti in immagini, ecc. Riassumendo: nel riconoscere il sentiero in l'immagine sorgente, sto attingendo molto più di ciò che osservo nell'immagine sorgente.

Ci sono alcune caratteristiche del percorso che un sistema di visione potrebbe sfruttare: presumibilmente possiamo supporre che il percorso rappresenti uno spazio libero e navigabile. Pertanto, le caratteristiche dell'albero, del cespuglio e della roccia possono essere classificate come "non sentiero". Forse un'analisi delle trame potrebbe aiutare a discernerle? Non sono sicuro, però: il terreno sotto gli alberi (da metà a sinistra in alto) sembra abbastanza simile al sentiero.

La mia prima idea sarebbe stata quella di fare riferimento alle trasformazioni LU o Eigen che danno una risposta elevata quando la trama è molto ruvida. Tuttavia, qui la principale caratteristica distintiva tra trail / non-trail sembra essere il colore. Quindi forse convertirlo nello spazio colore HSV e creare una maschera dai pixel che hanno una tonalità "terrosa" - marrone o ocra - darebbe una stima approssimativa.
AruniRC,

12

Non esiste un singolo algoritmo che rileverà magicamente le tracce in un'immagine casuale. Dovrai implementare una routine basata sull'apprendimento automatico e "addestrarla" per rilevare i percorsi. Senza entrare in troppi dettagli, ecco uno schema generale di cosa faresti in un approccio di apprendimento supervisionato.

  1. Avrai bisogno di una serie di "esempi di allenamento", con cui intendo diverse immagini di percorsi in diversi ambienti, in cui tu (il supervisore) hai etichettato ciò che conta come "percorso" e qual è la "foresta" di sfondo. Le immagini vengono suddivise in sezioni più piccole (in genere 8x8) e trasformate in uno "spazio caratteristiche" prendendo il DCT (trasformata discreta del coseno) dei blocchi. Il DCT di ciascun blocco in questo caso fornisce un "vettore di funzionalità" a 64 punti.
  2. Definendo uno spazio delle caratteristiche , un insieme di funzioni (un sottoinsieme del vettore delle caratteristiche di 64 punti) e uno spazio delle classi con le classi e , si calcola dai tuoi set di allenamento:XxYy1=traily2=forest

    • le distribuzioni condizionate della classe
      • PX|Y(x|trail) , la densità condizionale per le caratteristiche quando la classe è . trail
      • PX|Y(x|forest) , la densità condizionale per le caratteristiche quando la classe è . forest
    • le probabilità di classe o le precedenti
      • trailPY(trail) , probabilità di trovare un in un bloccotrail
      • forestPY(forest) , probabilità di trovare una in un bloccoforest
  3. Con questo, testate l'immagine (di nuovo, suddividendola in pezzi più piccoli) e calcolate la probabilità posteriore. Usando la teoria delle decisioni di Bayes, definiresti i tuoi criteri di selezione binari (in questo caso) in qualche modo

    y~i(x)=argmaxyiPX|Y(x|yi) PY(yi)
    dove assegni ciascun blocco a quella classe che ha la più alta probabilità posteriore. Ciò comporterà la tua maschera binaria.

Si noti che questa è una panoramica molto semplificata dell'approccio. Ci sono molte cose da prendere in considerazione e la più importante è scegliere il giusto set di funzionalità per il tuo problema. Puoi anche fare cose più complicate come usare modelli di miscele e stime di densità basate sul kernel, ma tutto ciò è troppo dettagliato e richiede tempo per scrivere una risposta.

Per una motivazione e la conferma che vale la pena provare questo approccio, ecco un esempio di qualcosa che ho fatto molto tempo fa come compito a casa, che è molto simile a quello che stai cercando di raggiungere. L'obiettivo era rilevare l'animale dalla vegetazione di sfondo (immagine a sinistra). La figura a destra mostra la maschera binaria ottenuta dopo "l'apprendimento" per distinguere tra primo piano e sfondo.

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

Per saperne di più sull'apprendimento automatico, ti consigliamo di leggere alcuni libri di testo. Uno dei libri di testo ben noti e spesso consigliati nel campo è:

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

che è ora disponibile come PDF gratuito al link fornito. Un altro libro decente è:

RO Duda, PE Hart e DG Stork, Classificazione dei modelli , 2a edizione, John Wiley & Sons (2001)


1
In proposito, vorrei sottolineare ml-class.org che è un'eccellente introduzione all'apprendimento automatico.
bjoernz,

Metodo interessante. Tuttavia, quando dici che Py (sentiero) e Py (foresta) sono la "probabilità di trovare un sentiero nell'intera immagine", intendi probabilità di trovarli in un blocco 8x8 o l'intera immagine? Se l'intera immagine, immagino che entrambe queste sarebbero al 100%, dal momento che tutte le immagini di allenamento avranno entrambe queste da qualche parte.
Cerin,

@Cerin: Mi dispiace, per Py (pista), intendo probabilità di trovarlo in un blocco. Quindi questo sarebbe il totale di tutti i blocchi che hanno traccia del numero totale di blocchi nell'intera immagine. L'ho modificato per correggerlo
Lorem Ipsum,

Come definiresti lo spazio delle funzioni X? Utilizzeresti qualcosa come il clustering K-Means per ridurre la dimensionalità dei vettori di funzionalità a 64 punti a qualcosa di simile a 10 funzionalità?
Cerin,

@Cerin Sì, K-mean è uno degli approcci comuni per ridurre la dimensionalità.
Lorem Ipsum,


5

Sembra un problema per la segmentazione delle trame (non una segmentazione dei colori) Esistono molti metodi,

usano spesso wavelet Gabor, come questo http://note.sonots.com/SciSoftware/GaborTextureSegmentation.html

Segmentazione basata su superpixel http://ttic.uchicago.edu/~xren/research/superpixel/

e simili segmentazione del taglio del grafico http://en.wikipedia.org/wiki/Graph_cuts_in_computer_vision

ecco la panoramica della wiki http://en.wikipedia.org/wiki/Segmentation_(image_processing)


le segmentazioni delle texture gabor sembrano essere belle!
nkint,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.