Bagaimana cara membuat hillshade komposit?

10

Konsep komposit hillshade adalah menggabungkan beberapa hillshades dengan orientasi sinar matahari yang berbeda untuk menghindari blind spot. Dibutuhkan untuk menggabungkan 3 gambar hillshades dengan 315⁰ (sinar matahari NW, layer default), masing-masing layer + 355⁰, + 275⁰. Rincian peningkatan dan keanggunan ini, seperti yang ditunjukkan di bawah ini . Deskripsi lengkap non-GIS ada di sini .

masukkan deskripsi gambar di sini

Menggunakan file srtm apa pun, 3 hillshades awal dapat dilakukan melalui:

gdaldem hillshade input.tif hillshades_A.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
gdaldem hillshade input.tif hillshades_B.tmp.tif -s 111120 -z 5 -az 355 -alt 60 -compute_edges
gdaldem hillshade input.tif hillshades_C.tmp.tif -s 111120 -z 5 -az 275 -alt 60 -compute_edges
Hugolpz
sumber

Jawaban:

9

Sumber yang ditautkan menyebutkan "ubah fusi mode menjadi <Multiply>" , sehingga operasi yang harus dilakukan bukan rata-rata sederhana dari hillshades input (untuk ini, lihat juga Bagaimana cara rata-rata gdal_hillshades? ). Itu sesuatu yang lain. Namun, mari kita buat 3 hillshades arah-matahari yang berbeda:

gdaldem hillshade input.tif hillshades_A.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
gdaldem hillshade input.tif hillshades_B.tmp.tif -s 111120 -z 5 -az 355 -alt 60 -compute_edges
gdaldem hillshade input.tif hillshades_C.tmp.tif -s 111120 -z 5 -az 275 -alt 60 -compute_edges

masukkan deskripsi gambar di sini

Pertahankan nilai A, B, C terendah

Algoritma pertama yang saya pikirkan adalah untuk memfilter dan menjaga piksel paling gelap, alias piksel dengan nilai lebih rendah di antara input A, B, CA boolean dapat melakukan itu:

gdal_calc.py -A hillshades_A.tmp.tif  -B hillshades_B.tmp.tif -C hillshades_C.tmp.tif --outfile=./hillshades_xl.tmp.tif \
   --calc="(A*(A<=B)*(A<=C)+ B*(B<A)*(B<=C)+ C*(C<A)*(C<B))"

Daerah yang didominasi oleh bayangan sekarang lebih dari sisi berlawanan dari satu pusat lignt, telah meningkat sebesar 40⁰ di setiap sisi. Tidak seperti tautan yang disediakan, algoritma saat ini tampaknya kehilangan terlalu banyak area pencerahan.

Sudut 315±30⁰(variasi sudut yang lebih kecil) daripada arus yang 315±40⁰akan lebih bagus.

Diagram di bawah ini adalah dasar dari persamaan. Ini menunjukkan sumber cahaya A, B, C, dan Boolean perbandingan untuk nilai piksel A, B, C di setiap bagian. Garis kesetaraan membutuhkan perhatian khusus untuk dimasukkan ke dalam Boolean. Garis tengah memiliki nilai 221untuk sumber cahaya tegak lurus. Pikirkan tentang bidang pengaruh , sumber cahaya terdekat adalah pengaruh utama, dan pengaruh paling jauh yang terlemah.

masukkan deskripsi gambar di sini

Pertahankan nilai ekstrem untuk A, B, C

Algoritma Boolean lainnya mungkin untuk menjaga nilai yang paling ekstrem, baik piksel paling gelap maupun paling putih. Diagram berikut membantu untuk menjelaskan tentang rumus Boolean. Untuk setiap keenam lingkaran, ini mengidentifikasi nilai untuk disimpan dari A, B, C, dan Boolean untuk memilih area segitiga ditambah garis persamaan arah jarum jam, dan hanya itu . Ini memberi (dari atas dan searah jarum jam):

--calc="A*(A>B)*(A>=C) + C*(C>A)*(A>=221) + B*(C>A)*(C>=221) + A*(A<B)*(B<=221) + C*(B>A)*(A<=221) + B*(B>A)*(C<=221)"

masukkan deskripsi gambar di sini

Jika variasi sudut tidak terlalu penting, bisa memberikan hasil yang baik.

Boolean lainnya

Anda dapat membuat Boolean yang lebih kompleks untuk menutupi seluruh lingkaran menggunakan kombinasi segmen perbatasan apa saja. Tetap penting bahwa hanya satu nilai dari A, B, C yang disimpan untuk satu segmen.

Berkembang biak

Saya melakukan beberapa upaya terarah ke multiplynilai piksel tanpa formula yang terbukti atau keberhasilan akhir. @ Radouxju menunjukkan bahwa (a*b*c)^(1/3)(rata-rata GEOMETRIK) dan bukannya rata (a*b*c)/(255*255)- rata ARITHMETIC dapat bekerja. Rata-rata geometris lebih rendah atau sama dengan rata-rata aritmatika, yang menonjolkan kegelapan area yang diarsir. Saya belum mengujinya.

Hugolpz
sumber
Saya mencoba merangkum pembelajaran konseptual saya tentang komposit dan bagaimana seseorang dapat menyesuaikannya. Formula nyata untuk "multiply" tetap tidak saya ketahui.
Hugolpz
Mengapa tidak memperbanyak nilai saja dan mengubah skala hasilnya?
whuber
Belum mencoba! Formula mana yang akan melakukannya (A*B*C)/(255*255),?
Hugolpz
1
Itu akan menjadi awal yang baik :-).
whuber
1
bukan "multiply" menggunakan mean GEOMETRIC sebagai ganti mean ARITHMETIC. (a b c) ^ (1/3). Rata-rata geometris lebih rendah atau sama dengan rata-rata aritmatika, yang menonjolkan kegelapan area yang diarsir.
radouxju
0

Alat yang dapat melakukan ini (antara lain) adalah Visualisasi Berbasis Faktor Tampilan Sky ( http://iaps.zrc-sazu.si/en/svf#v ). Hitung beberapa parameter suatu medan. Sangat bagus.

Dimitris Poursanidis
sumber
-1

Numpy Gdal_calc tampaknya memiliki lebih banyak operator :

+ addition 
- subtraction 
/ division 
* multiplication 
= equals to 
< less than 
> larger than 
! not equal to 
? if clause 
M maximum of two values 
m minimum of two values 
B bit level operator

Saya belum menemukan contoh yang jelas dan tepat tentang bagaimana operator eksotis harus digunakan. Jika Anda memiliki sesuatu, silakan bagikan.

Hugolpz
sumber