Riconoscimento dei corsi d'acqua in una foto aerea: poligoni dalle immagini di rilevamento dei bordi


9

Sto cercando di riconoscere i corsi d'acqua dalle fotografie aeree (diciamo da Google Maps). I governi locali spesso dispongono di dati GIS che indicano dove si trovano i corsi d'acqua (e strade, edifici, ecc.), Ma i dati idrici in essi contenuti sono spesso in qualche modo inaccurati e potremmo essere in grado di migliorarli utilizzando le immagini aeree. Quindi abbiamo già alcuni dati di cui non ci si può sempre fidare.

So come eseguire alcune elaborazioni di base delle immagini sui dati (sfortunatamente non ho ancora immagini di esempio da mostrare qui, sto provando a immaginare come potrei farlo, non ho ancora un codice funzionante):

  • Posso raccogliere alcuni set di valori di colore usando frammenti di canali navigabili nelle immagini e capire quali pixel sono più vicini a questi colori, possibilmente anche per altri tipi di funzionalità (erba, strade, edifici ecc.). Se imposto una soglia su cui i pixel sono "abbastanza vicini", ottengo un insieme di pixel che sono probabilmente corsi d'acqua (ma ci sarà molto rumore).

  • Posso trasformare l'immagine in scala di grigi e utilizzare un algoritmo di rilevamento dei bordi standard per capire dove si trovano i bordi. Ancora una volta, questo mi dà una serie di pixel con limiti simili, ma ci sarà rumore e gli spigoli saranno troppo pensati e / o presentano delle lacune.

Quello che voglio avere come output è un insieme di poligoni che delineano i probabili corsi d'acqua.

Intuitivamente mi piacerebbe usare i bordi rilevati per creare poligoni e le informazioni sul colore per decidere quali di loro sono acqua, eventualmente facendo uso dei dati del governo che già abbiamo.

Esiste un modo noto per passare dal risultato di un algoritmo di rilevamento dei bordi a un bel set di poligoni chiusi? O qualche altro consiglio su come affrontare questo problema, se esiste un modo migliore?


1
Sidenote: tieni presente che la licenza di Google non è autorizzata a farlo! Openstreetmap ha lo stesso problema . OSM ha un accordo per l'uso delle immagini Bing.
PiTheNumber,

Risposte:


6

Questo è difficile da fare solo con le informazioni sul colore. Le variazioni di colore tra (o anche all'interno) delle immagini aeree e satellitari possono essere enormi. Idealmente, avrai bisogno di immagini iperspettrali o almeno a infrarossi ( vedi questo documento ).

Supponendo che il rilevamento dei bordi possa agganciarsi ai confini dei pixel, puoi prendere i bordi di ciascun pixel come un poligono chiuso e unirli insieme per formare un poligono (a seconda dell'implementazione del tuo unione potresti finire con un poligono con anelli o fori interni) o una raccolta di poligoni. La suite di topologia Java e altre implementazioni di geometria computazionale può fare questo molto più facile per voi. Se si desidera utilizzare i limiti dei pixel secondari, è necessario fare molta attenzione a impostare un buon valore epsilon in modo da poter agganciare bordi molto vicini ma non esattamente a contatto.

Se vuoi prendere i bordi e combinarli tu stesso, vorrai costruire un grafico dei bordi intersecanti e implementare il codice che attraversa il grafico (ad esempio in senso antiorario) per trovare dove si chiude su se stesso per formare un poligono. Ecco come funzionano alcune delle implementazioni sindacali dei poligoni.

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.