2012-04-10 8 views
2

Ich versuche, mit einem Algorithmus zu kommen, um den Unterschied zwischen Wasser und Land zu unterscheiden. Ich habe ein 2D-Array, das nur Nullen (schwarze Quadrate) und Einser (graue Quadrate) enthält, wodurch dieses Bild erzeugt wird. Ich habe einen der Wasserbereiche blau gefärbt, damit du sehen kannst, was Wasser sein soll. Wasser sind die Bereiche, die groß sind und eine runde Form haben. Ich habe einige Landflächen grün gefärbt. Alle geraden schwarzen Linien sollen Land sowie einige der kleineren runden Formen sein.Algorithmus zur Unterscheidung zwischen Wasser und Land

Im Moment werden alle schwarzen Bereiche als 0 und alle grauen Bereiche als 1 dargestellt. In der Abbildung werden also die grünen und blauen Punkte als die gleichen dargestellt. Ich brauche einige der schwarzen Bereiche (Wasser), die stattdessen als 2 dargestellt werden. Was ist ein guter Weg, dies zu tun? Das Beste, was ich bisher herausgefunden habe, ist, die Fläche jedes schwarzen Flecks zu berechnen und nur Bereiche oberhalb einer bestimmten Schwelle als Wasser zu betrachten. Ich denke, es gibt bessere Wege und ich frage mich, was ihr denkt.

enter image description here

+2

Schritt 1: Legen Sie alle 0 mit nur 0 als Nachbarn zu Wasser. Schritt 2: Setze alle Nullen mit Wasser als Nachbarn auf Wasser. –

+3

Wahrscheinlich können Sie diesen [Flood_fill-Algorithmus] (http://en.wikipedia.org/wiki/Flood_fill) als Startpunkt verwenden. – Bakudan

+0

Joel, ich dachte an den ersten Schritt, den du gesagt hast, aber hast nicht an den 2. gedacht. Das einzige, was daran schlimm ist, ist, dass es kleine Flächen in Wasser verwandelt (grüner Punkt, den ich ausgefüllt habe, oder das kleine 3x3 Quadrat links davon) – theDazzler

Antwort

0

Durch die Kombination der ersten beiden Vorschläge konnte ich zu einer Lösung kommen. Ich suche zuerst nach Wasserziegeln, die von einer beliebigen Anzahl von Wasserziegeln (d. H. 4 in jeder Richtung) umgeben sind, und setze dann den Flutfüllungsalgorithmus ein, um den gesamten Wasserkörper so einzustellen, dass er tatsächlich Wasser ist. Hier ist ein Bild des Ergebnisses. Ich fügte eine Küstenlinie für Aussehen hinzu. Wie Sie sehen können, sind die kleineren runden Körper immer noch Land, was genau das ist, was ich wollte. enter image description here

1

Vielleicht den Bereich mit der Länge der Kante vergleichen, die Ihnen dadurch möglicherweise ein gewisses Maß an Rundheit geben, da perfekte Kreise wird das höchste Verhältnis von Fläche zu Kante haben, während die Straßen (ich sie annehmen‘ Re Straßen) wird ein kleines Verhältnis haben.

Vielleicht auch Schwelle beide diese Maßnahmen.

+0

Ich kam mit einer Lösung durch die Kombination der vorherigen Vorschläge, aber ich werde dies im Hinterkopf behalten, da es später für andere Dinge nützlich sein wird, die ich vorhabe. Vielen Dank – theDazzler

Verwandte Themen