Saya perlu mengurangi tingkat pemrosesan raster saya dengan semacam prosedur otomatis dengan python. Saat ini batas-batas dataset yang saya gunakan memiliki anomali (karena klasifikasi garis pemindaian landsat).
Saya ingin mengurangi tingkat pemrosesan raster sehingga ketika saya mengambil informasi di atas dengan fungsi SetNull perbatasan tidak diproses. Sesuatu seperti
Sekarang ini dapat dengan mudah dilakukan dengan ekstrak dengan fungsi mask (yaitu gambar2) walaupun itu akan membutuhkan pemilihan manual dari daerah masking. Apakah ada menthod yang dapat saya gunakan untuk menghitung luas wilayah (mengabaikan nilai nodata) minus lebar perbatasan dalam arah x dan y dari setiap baris / kolom dan kemudian memanfaatkan arcpy.env.extent
dalam Python?
sumber
Jawaban:
Alur kerja ini pertama-tama berkaitan dengan sampah yang mengambang di tepinya dan kemudian menyelesaikan masalahnya.
Buat indikator biner dari area "perbatasan", yang saya ambil untuk menyertakan semua sel NoData di sekitarnya. Lebih mudah menggunakan nilai apa pun untuk menunjukkan batas dan NoData untuk yang lainnya, seperti pada
SetNull(Not(IsNull('X')), 1)
:Regiongroup hasilnya dan pilih komponen perbatasan. (Ini biasanya dapat diotomatisasi dengan memilih komponen dengan nilai [Hitung] terbesar.) Gambar akan terlihat hampir sama; hanya beberapa piksel yang tersesat di tengah yang dikecualikan di sini - tetapi harus dikecualikan untuk langkah selanjutnya agar berfungsi.
(Pendekatan alternatif adalah dengan menggunakan operasi morfologis pertama untuk mengecilkan perbatasan dan kemudian memperluas kembali: ini menghapus bit yang terisolasi di tengah.)
Hitung grid jarak Euclidean dengan komponen batas.
Tutup semua jarak kecil di gambar asli, seperti di
SetNull(([Distance to Border component] < 30),
X)
:(Gambar akhir menunjukkan batas asli dalam lapisan hijau, untuk referensi, pada hasilnya.)
sumber