Ich muss den Verarbeitungsumfang meines Rasters durch eine automatische Prozedur in Python reduzieren. Derzeit weisen die Ränder des von mir verwendeten Datensatzes Anomalien auf (aufgrund der Klassifizierung der Landsat-Scanlinien).
Ich möchte den Umfang der Rasterverarbeitung reduzieren, damit beim Abrufen der obigen Informationen durch eine SetNull-Funktion die Rahmen nicht verarbeitet werden. Etwas wie
Dies kann nun einfach mit einer Funktion zum Extrahieren durch Maske (dh Abbildung 2) durchgeführt werden, obwohl dies eine manuelle Auswahl des Maskierungsbereichs erfordern würde. Gibt es ein Menthod, mit dem ich den Ausdehnungsbereich (ohne Berücksichtigung der Knotenwerte) abzüglich der Randbreite in x- und y-Richtung jeder Zeile / Spalte berechnen und dann das arcpy.env.extent
in Python verwenden kann?
quelle
Antworten:
Dieser Workflow behandelt zuerst den Müll, der an den Rändern schwebt, und löst dann das Problem.
Erstellen Sie einen binären Indikator für den "Rand" -Bereich, der alle umgebenden NoData-Zellen enthält. Es ist praktisch, einen beliebigen Wert zu verwenden, um den Rand und NoData für den Rest anzugeben, wie in
SetNull(Not(IsNull('X')), 1)
:Gruppieren Sie das Ergebnis in einer Region und wählen Sie die Rahmenkomponente aus. (Dies kann normalerweise automatisiert werden, indem die Komponente mit dem größten Wert von [Anzahl] ausgewählt wird.) Das Bild sieht fast gleich aus. Hier werden nur einige streunende Pixel in der Mitte ausgeschlossen - sie müssen jedoch ausgeschlossen werden, damit der nächste Schritt funktioniert.
(Ein alternativer Ansatz besteht darin, morphologische Operationen zuerst zu verwenden, um den Rand zu verkleinern und dann wieder zu erweitern. Dadurch werden die isolierten Bits in der Mitte gelöscht.)
Berechnen Sie das euklidische Abstandsraster zur Randkomponente.
Maskieren Sie alle kleinen Abstände im Originalbild wie in
SetNull(([Distance to Border component] < 30),
X)
:(Das endgültige Bild zeigt den ursprünglichen Rand in Grün, der als Referenz auf dem Ergebnis überlagert ist.)
quelle