Pixel di sebelah kiri mewakili lokasi pohon dan jari-jari mahkota terkait (yaitu nilai piksel mulai dari 2 - 5). Saya ingin buffer piksel raster ini dengan nilai radius mahkota mereka. Gambar di sebelah kanan adalah apa yang saya harap dapat capai dengan hanya menggunakan metode pemrosesan raster .
Saya awalnya akan berpikir untuk menggunakan jumlah fokus melingkar di ArcGIS, meskipun pengaturan lingkungan adalah nilai tetap, yang tidak akan memperhitungkan jari-jari mahkota ukuran variabel.
Apa metode yang baik untuk "buffer" piksel berdasarkan nilainya?
Jawaban:
Berikut ini adalah solusi raster murni dalam
Python 2.7
menggunakannumpy
danscipy
:Memasukkan:
Keluaran:
sumber
Pendekatan berbasis vektor
Tugas ini dapat dilakukan dalam tiga langkah:
Raster To Point
;Buffer
(menggunakanVALUE
bidang sebagai bidang penyangga );Feature To Raster
.Catatan: menggunakan bidang buffer menghindari penghitungan buffer untuk setiap nilai radius mahkota.
Pendekatan berbasis raster
Menghindari solusi berbasis vektor, masalah ini menyarankan untuk menggunakan semacam Cellular Automata berdasarkan tetangga terdekat. Dengan asumsi bahwa semua piksel hitam adalah nol, piksel tersebut dikuadratkan dan ukurannya sama dengan 1 (atau, jika tidak, diskalakan dengan tepat), aturan untuk mengadopsi sangat sederhana:
VALUE
) lebih besar dari 1, nilainya menjadiVALUE-1
dan kemudian mempertimbangkan piksel sekitarnya. Jika nilainya kurang dariVALUE-1
, piksel ini lahir atau tumbuh dan nilainya menjadiVALUE-1
. Jika tidak, piksel ini bertahan dan dibiarkan tidak berubah.VALUE<=1
, jangan lakukan apa pun (pikselnya mati!).Aturan-aturan ini harus diterapkan sampai semua piksel mati, yaitu nilainya sama dengan 0 atau 1. Jadi
N-1
kali, di manaN
nilai maksimum yang Anda miliki di input raster. Pendekatan ini dapat dengan mudah diimplementasikan dengan sedikit Python dan numpy.sumber
Pilihan lain adalah membuat raster terpisah untuk setiap nilai piksel, dalam hal ini raster 4, dengan syarat. Kemudian perluas raster dengan jumlah piksel yang sesuai dengan nilai raster (dengan kemungkinan iterasi pada daftar nilai). Terakhir, bergabunglah dengan raster (baik aljabar atau spasial), untuk membuat satu raster biner untuk mahkota pohon.
sumber
Ini adalah pertanyaan yang menantang untuk melakukan ini dalam raster karena Anda tidak memiliki kesempatan untuk menggunakan nilai piksel untuk menentukan ukuran buffer. Karena itu, Anda perlu melakukan focal filter untuk setiap nilai, seperti yang sudah Anda katakan.
Berikut ini adalah jawaban yang mungkin untuk melakukannya dengan hanya 3 filter (saya tidak dapat menemukan lebih sedikit), tetapi tidak sempurna seperti yang disebutkan oleh Whuber: buffer Anda akan terpotong ketika pohon berdekatan satu sama lain.
1) EDIT: Alokasi Euclidian (ini tidak sepenuhnya menyelesaikan masalah, karena memotong buffer di sekitar pohon yang lebih kecil, tetapi lebih baik daripada artefak dari solusi pertama saya).
2) jarak euclidian di sekitar setiap piksel
3) kalkulator raster (aljabar peta) dengan pernyataan kondisional
Perhatikan bahwa Anda dapat menyesuaikan kondisi tergantung pada kebutuhan Anda dalam hal jari-jari (dengan atau tanpa piksel tengah)
sumber
Bertanya-tanya mengapa Anda tidak menggunakan alat memperluas ArcGIS ?
Jika tumpang tindih:
expand
perintah terbaru akan mencakup yang sebelumnya.sumber
Jika Anda memiliki posisi piksel, jari-jari dan algoritma lingkaran Midpoint (varian dari Bresenham Alg.) Memberi Anda petunjuk. IMO mudah untuk membuat poligon dari pendekatan ini dan saya pikir mudah untuk mengimplementasikannya dengan Python. Gabungan dari set poligon ini memberi Anda area penutup.
sumber