Saya mendapatkan bukit transparan yang elegan melalui kombinasi gdal
dan convert
. Dibandingkan dengan hillshade berbasis abu-abu yang biasa digunakan, hillshade transparan seperti itu sangat keren karena dapat ditempatkan di antara latar belakang peta dan lapisan atas lainnya (jalan, buiding) untuk memberikan rasa 3D apa pun jenis dan warna latar belakangnya.
Bagaimana itu bekerja
Caranya: Dimulai dengan hillshade skala abu-abu yang dihasilkan oleh gdal hillshade
, triknya adalah untuk mengambil nilai-nilai saluran abu-abu, membalikkan setiap nilai, dan mengalirkan hasil ini ke saluran opacity baru. Piksel hitam [0,0,0] menjadi [0,0,0255] (opacity = 255), piksel abu-abu [120.120.120] semakin rendah menjadi [120.120.120.135] (opacity = 135, alias 255-120), piksel putih [255.255.255] menjadi transparan [255.255.255,0] (opacity = 0, alias 255-255) dan seterusnya. Nuansa bukit yang buram dan hitam , dataran semakin transparan (putih) . Secara konseptual, persamaan pita piksel adalah sesuatu seperti:
alpha_value([0]) = 255-0 = 255; // black pixels get full opacity
alpha_value([Grey]) = 255-Grey;
// grey pixels get 255-GreyValue opacity.
alpha_value([255]) = 255-255 = 0 // white pixels get null opacity !
Untuk video yang santai tentang pendekatan ini, dijelaskan oleh desainer Photoshop, lihat Menambahkan Relief Berbayang di Photoshop (16 menit).
Pertanyaan
Mengambil hillshade berbasis abu-abu berbasis ETOPO atau SRTM ( gdaldem hillshade crop_xl.tmp.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
, file tersedia untuk diunduh di sini ) sebagai input ...
... Bagaimana melakukan trik yang dikutip di atas melalui gdal atau cara lain yang tidak merusak GIS pada file .tif tersebut?
Perhatikan bahwa saya ingin menjaga properti GIS (geolocalisation).
gdaldem hillshade etopo_crop.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
gdal_tranlate
dengan kombinasi -b band , -mask band , -perbaikan abu - abu | rgb | rgba bersama-sama dengan formulaopacity=-(px_grey_value)+255
mungkin cara untuk pergi, tapi saya tidak pernah menyentuh band dan saya masih tidak tahu apa-apa.Jawaban:
Singkatnya
Setiap rangkaian 3 gambar di bawah ini harus dibaca seperti "grey (band) + opacity (band) = hasil transparan" . Anda dapat menguji proses ini dalam beberapa menit melalui makefile yang dihosting github yang terkait . Proses # 3 adalah yang saya rekomendasikan, dengan ambang batas antara 170 (membuat bayangan kuat) dan 220 (membuat semua bayangan). Proses 3 memberikan bayangan terkuat dan menghindari efek memutih yang memutih. Sesuaikan opacity keseluruhan layer yang dihasilkan sesuai kebutuhan. Persamaan di
--calc="<equation>"
dapat ditingkatkan sesuai kebutuhan juga, menggunakangdal_calc
.Untuk video yang santai tentang pendekatan ini, dijelaskan oleh desainer Photoshop, lihat Menambahkan Relief Berbayang di Photoshop (16 menit).
Latar Belakang
gdaldem hillshade
menghasilkan file skala abu-abu satu band dengan nilai piksel range = [1-255], alias dari bayangan paling gelap hingga piksel paling mencerahkan. Untuk bidang datar, px = 221 (#DDDDDD).NoDataValue
piksel mendapatkan nilai nodata default0
, juga, input dan keluaran hitam paling gelap adalah dan seharusnya1
. Tanpa band opacity yang ditentukan, opacity adalah 100% .Kami ingin mendefinisikan dan mengontrol band opacity ke-2!
Tujuan
Kami ingin satu band skala abu-abu
-b 1
, itu adalah hillshade. Di luar gdal, ini adalah pita abu-abu dengan rentang kontinu seperti px = [1-255]. Kami dapat memotong area yang tidak relevan (# 2), atau menghitamkannya menjadi px = 1 dan mengandalkan band opacity (# 3).Kami ingin satu band opacity
-b 2
, umumnya terbalik hillshade atau fungsi terkait itu. Kami dapat memangkas area yang tidak relevan (# 2). Ini harus berupa kisaran kekeruhan yang terus menerus seperti px = [1-255], selain itu tidak ada keanggunan.gdal_calc
dapat digunakan untuk melakukan matematika pada piksel dari file input A, B, C ... dan memeriksa nilai boolean sepertiA<220
, yang mengembalikan 1 (benar) atau 0 (salah). Ini memungkinkan kalkulus bersyarat. Jika kondisinya salah, bagian persamaan yang terkait dibatalkan.1. Grey hillshade dibuat transparan
Berikut ini memberikan hasil dua band yang sangat baik dengan
gdal hillshade
abu-abu standar dan area yang lebih putih dibuat semakin transparan:2. Optimasi melalui pseudo-crop (-b 1 & -b 2)
2/3 dari piksel aktif
-b 1
(skala abu-abu) menjadi tidak terlihat oleh mata ketika opacity-b 2
ditambahkan, namun, piksel ini menyimpan berbagai nilai-b 1
opacity yang lebih putih dan rendah-b 2
. Mereka dapat dibuat semua[255,1]
piksel transparan putih , memungkinkan tingkat kompresi yang lebih baik:3. Selanjutnya -b 1 optimasi (memotong + menghitamkan)
Karena kami memiliki band opacity progresif yang
-b 2
diandalkan, kami dapat membuat-b 1
piksel putih px = 255 via255*(A>220)
, atau hitam px = 1 via1*(A>220)
.Hasil ini menunjukkan bayangan yang lebih kuat .
Hasil
Buat hillshade transparan memiliki tujuan langsung untuk menghilangkan bekas wilayah abu-abu dan efek abu-abu yang tidak diinginkan tetapi ada di mana - mana . Produk sampingan yang diinginkan adalah peningkatan kontrol atas produk visual akhir. Proses yang dijelaskan menghapus sebagian besar piksel abu-abu dan semua putih. Gambar polos latar belakang yang berwarna-warni akan mempertahankan warna yang dipilih saat dilapis oleh penutup bukit transparan ke hitam, hanya area yang gelap yang akan digelapkan. Perbandingan proses # 2 (kiri) dan # 3 (kanan) di bawah ini.
Ikhtisar:
Zoom, harap perhatikan bayangan (sebelum vs sesudah):
Optimasi lebih lanjut
Area putih : Seseorang mungkin juga ingin menjaga area yang paling tercerahkan untuk meningkatkan rasa 3D. Ini benar-benar akan menjadi simetris dari pendekatan saat ini dengan perubahan ambang batas kecil, kemudian gabungan dari kedua output melalui gdal_calc. Dataran akan 100% transparan, bayangan paling gelap dan area pencerahan paling terang buram.
Menghaluskan: Input hillshade mungkin dipra-smoothing untuk mendapatkan hasil akhir yang lebih baik, lihat Menghaluskan DEM menggunakan GRASS?
Hillshade komposit ( Cara membuat hillshade komposit? ).
Bumped hillshade juga menarik ( deskripsi )
Catatan
gdal hillshade
output px = 221 (#dddddd = [221.221.221]), menandai area datar. Selain itu, hillshade's px = 221 membagi gambar antara piksel dalam-bayangan (A <221) dan piksel dalam-cahaya (A> 221) piksel.sumber
Cara lain untuk mendapatkan hasil yang sama dari kanvas non-abu-abu yang lebih cocok untuk digabungkan dengan lapisan lain adalah opsi 'gabungan' di gdaldem.
Ini melakukan kemiringan lereng dan bukit dan menggabungkan keduanya dalam satu operasi. Area 0 lereng berwarna putih. Area dengan kemiringan 90 derajat berwarna hitam untuk naungan kemiringan, dengan beberapa pencahayaan ditambahkan oleh layer hillshade.
gdaldem hillshade -combined -compute_edges infile outfile.tif
Kemudian gunakan mode penggabungan lapisan multiply untuk 'menggantungkan' ini di atas lapisan lain.
Penandaan bukit standar / gabungan
Kombinasi shading dikalikan dengan lapisan dasar OSM (opacity sekitar 50%)
sumber
gdal
+convert
alur kerja berbasisAda solusi
gdal
+convert
yang memberikan hasil visual yang baik. Masalah dengan solusi ini adalah yangconvert
menghancurkan informasi geografis yang kemudian harus Anda pulihkan. Ini meningkatkan jumlah aksi untuk dijalankan.Untuk penjelasan perintah 4, lihat: https://stackoverflow.com/a/23018544/1974961
sumber