Erkennen von Wasserstraßen in einem Luftbild - Polygone aus Kantenerkennungsbildern

9

Ich versuche, Wasserstraßen anhand von Luftbildern zu erkennen (z. B. aus Google Maps). Kommunalverwaltungen verfügen häufig über GIS-Daten, aus denen hervorgeht, wo sich die Wasserstraßen (und Straßen, Gebäude usw.) befinden. Die darin enthaltenen Wasserdaten sind jedoch häufig etwas ungenau, und wir können sie möglicherweise mithilfe von Luftbildern verbessern. Wir haben also bereits einige Daten, denen man nicht immer vertrauen kann.

Ich weiß, wie man eine grundlegende Bildverarbeitung für die Daten durchführt (leider habe ich hier noch keine Beispielbilder, ich versuche mir vorzustellen, wie ich das machen könnte, noch kein funktionierender Code):

  • Ich kann einige Farbwerte mithilfe von Wasserstraßen in Bildern erfassen und herausfinden, welche Pixel diesen Farben am nächsten kommen, möglicherweise auch für andere Arten von Merkmalen (Gras, Straßen, Gebäude usw.). Wenn ich einen Schwellenwert festlege, bei dem die Pixel "nah genug" sind, erhalte ich eine Reihe von Pixeln, bei denen es sich wahrscheinlich um Wasserstraßen handelt (aber es wird viel Rauschen geben).

  • Ich kann das Bild in Graustufen umwandeln und mithilfe eines Standard-Kantenerkennungsalgorithmus herausfinden, wo sich die Kanten befinden. Auch dies gibt mir eine Reihe von Pixeln mit ähnlichen Grenzen, aber es wird Rauschen geben und Kanten werden zu denken und / oder Lücken haben.

Was ich als Ausgabe haben möchte, ist eine Reihe von Polygonen , die die wahrscheinlichen Wasserstraßen umreißen.

Intuitiv möchte ich die erkannten Kanten verwenden, um Polygone zu erstellen, und die Farbinformationen, um zu entscheiden, welche davon Wasser sind, wobei möglicherweise die bereits vorhandenen Regierungsdaten verwendet werden.

Gibt es einen bekannten Weg, um vom Ergebnis eines Kantenerkennungsalgorithmus zu einem schönen Satz geschlossener Polygone zu gelangen? Oder andere Tipps, wie Sie dieses Problem angreifen können, wenn es einen besseren Weg gibt?

RemcoGerlich
quelle
1
Nebenbemerkung: Beachten Sie, dass die Google-Lizenz dies nicht erlaubt! Openstreetmap hat das gleiche Problem . OSM hat eine Vereinbarung zur Verwendung von Bing-Bildern.
PiTheNumber

Antworten:

6

Dies ist nur mit Farbinformationen zu tun. Farbabweichungen zwischen (oder sogar innerhalb) Luft- und Satellitenbildern können sehr groß sein. Idealerweise möchten Sie hyperspektrale oder zumindest infrarote Bilder ( siehe dieses Dokument ).

Angenommen, Ihre Kantenerkennung kann an Pixelgrenzen einrasten, können Sie die Ränder jedes Pixels als geschlossenes Polygon nehmen und zu einem Polygon zusammenfügen (abhängig von Ihrer Vereinigungsimplementierung erhalten Sie möglicherweise ein Polygon mit inneren Ringen oder Löchern) oder eine Sammlung von Polygonen. Die Java Topology Suite und andere Implementierungen von Computergeometrie können dies für Sie erheblich vereinfachen. Wenn Sie Subpixelgrenzen verwenden möchten, müssen Sie sehr vorsichtig sein, dass Sie einen guten Epsilon-Wert eingestellt haben, damit Sie Kanten fangen können, die sehr nahe sind, sich aber nicht genau berühren.

Wenn Sie die Kanten nehmen und selbst kombinieren möchten, möchten Sie ein Diagramm mit sich überschneidenden Kanten erstellen und Code implementieren, der das Diagramm durchläuft (z. B. gegen den Uhrzeigersinn), um herauszufinden, wo es sich selbst schließt, um ein Polygon zu bilden. So funktionieren einige der Union-Implementierungen von Polygonen.

kevin42
quelle