Şeffaf tepe gölgesi oluşturma?


34

Ve kombinasyonları gdalile zarif şeffaf tepe tonları elde ediyorum convert. Yaygın olarak kullanılan gri renkli tepe tonlarıyla karşılaştırdığınızda, bu tür şeffaf tepe tonları çok havalıdır, çünkü bunlar arka planın türü ve rengini ne olursa olsun 3D olarak hissetmek için harita arka planı ile diğer üst tabakalar (yollar, binaların) arasına yerleştirilebilir.

Nasıl çalışır

Trick: tarafından üretilen bir gri DEM ile başlayarak gdal hillshade, hile, gri kanalın değerleri için, her bir değerin ters ve yeni bir opaklık kanalı içine bu sonucu akış etmektir. Siyah piksel [0,0,0], [0,0,0,255] (opaklık = 255), gri piksel [120,120,120] olurken [120,120,120,135] (opaklık = 135, aka 255-120), beyaz piksel [255,255,255] olur. şeffaf hale gelir [255,255,255,0] (opaklık = 0, aka 255-255) vb. Tepelerin gölgeleri mat ve siyahtır , ovalar aşamalı olarak (beyaz) şeffaf hale gelir . Kavramsal olarak, pikselin bant denklemi şöyle bir şeydir:

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 !

Bir Photoshop tasarımcısı tarafından açıklanan bu yaklaşımla ilgili geri çekilmiş bir video için, bkz . Photoshop'ta Gölgeli Rölyef Ekleme (16mins).

Soru

Giriş olarak ETOPO veya SRTM türevi gri tabanlı tepe gölgesini ( gdaldem hillshade crop_xl.tmp.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges, buradan indirebilirsiniz dosya ) almak ...

... Nasıl hile gdal üzerinden üst veya bu tür .tif dosyaları üzerinde GIS-yıkıcı olmayan başka bir yol gösterdi?

GIS özelliklerini (coğrafi konum belirleme) korumak istediğimi unutmayın.

görüntü tanımını buraya girin görüntü tanımını buraya girin


1
Referans verisinin tiff içinde nasıl depolandığına bağlı olarak, tiff ile ilişkili dünya dosyasını yeniden adlandırmak kadar kolay olabilir.
Steve

@ Steve: bu SRTM veya ETOPO gibi rasterden üretilen .tif dosyaları içingdaldem hillshade etopo_crop.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
Hugolpz

Bence gdal_tranlatebir kombinasyonu ile -b bant , -mask bant , -genişletin rgb | | gri RGBA formülü birlikte Witht opacity=-(px_grey_value)+255gitmek için bir yol olabilir, ama asla hala oldukça clueless bantları ve I'am dokundu.
Hugolpz


koordinat, hücre boyutu ve referans sistemini yeniden yazmak için gdal_edit.py denedin mi?
radouxju,

Yanıtlar:


42

fındık kabuğu

Aşağıdaki 3 görüntünün her biri "gri (bant) + opaklık (bant) = saydam sonuç" gibi okunmalıdır . Bu işlemleri dakikalar içinde ilişkili github barındırılan makefile üzerinden test edebilirsiniz . İşlem 3 , önerdiğim, 170 (güçlü gölgeleri koruyor) ile 220 (tüm gölgeleri koruyor) arasındaki eşik değeri. İşlem 3, en güçlü gölgeleri sağlar ve grileşme-beyazlatma etkisinden kaçınır . Ortaya çıkan katmanın genel opaklığını gerektiği gibi uyarlayın. İçeriğindeki denklemler, --calc="<equation>"gerektiği şekilde de geliştirilebilir gdal_calc.

Bir Photoshop tasarımcısı tarafından açıklanan bu yaklaşımla ilgili geri çekilmiş bir video için, bkz . Photoshop'ta Gölgeli Rölyef Ekleme (16mins).

Arka fon

gdaldem hillshadeen koyu gölgelerden en aydınlatıcı piksele kadar, aralık aralığı [[1-255], piksel değerleri olan bir bant gri ölçek dosyası oluşturur. Düz alanlar için, px = 221 (#DDDDDD). NoDataValuepikseller varsayılan notata sahip olurlar 0, ayrıca girdi ve çıktıdaki en koyu siyahtır ve olmalıdır 1. Hiçbir opaklık bandı tanımlanmadığında, opaklık% 100'dür .

gdaldem hillshade input.tif hillshade.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges

hillshade.tmp.tif

2. opaklık bandını tanımlamak ve kontrol etmek istiyoruz!

Hedefler

Bir gri tonlamalı grup istiyoruz -b 1, orası gölgelik. Gdal dışında px = [1-255] gibi sürekli aralıklı gri bir banttır. İlgili olmayan alanları (# 2) kesebilir veya onu px = 1'e göre karartıp opaklık bandına (# 3) güvenebiliriz.

Biz istiyoruz bir donukluk bandı -b 2 , genellikle DEM ait invert veya ilgili bir fonksiyonu. İlgili olmayan alanları mahvedebiliriz (# 2). Bu, px = [1-255] gibi sürekli bir opasite aralığı olmalıdır, aksi halde zerafet yoktur.

gdal_calchem A, B, C ... giriş dosyalarından pikseller üzerinde matematik yapmak hem de A<2201 (true) veya 0 (false) döndüren gibi boolean değerleri kontrol etmek için kullanılabilir . Bu şartlı hesabı sağlar. Koşul yanlışsa, denklemin ilgili kısmı geçersiz kılınır.

1. Gri hillshade şeffaf yaptı

Aşağıdakiler, standart gdal hillshadegri tonlar ve gittikçe saydam hale getirilen beyaz alanlarla çok iyi bir iki bantlı sonuç sağlar :

# hillshade px=A, opacity is its invert: px=255-A
gdal_calc.py -A ./hillshade.tmp.tif  --outfile=./opacity.tif --calc="255-A"
# assigns to relevant bands -b 1 and -b 2
gdalbuildvrt -separate ./final.vrt ./hillshade.tmp.tif ./opacity.tif

hillshade.tmp.tif # 1, opacity.tif # 1, final.tif

2. Sözde mahsulle optimizasyon (-b 1 & -b 2)

-b 1Opaklık -b 2eklendiğinde piksellerin 2 / 3'ü (gri tonlamalı) çıplak gözle görünmez hale gelir , ancak bu pikseller çeşitli daha beyaz -b 1ve düşük opaklık -b 2değerlerini korur . Daha [255,1]iyi bir sıkıştırma oranı sağlamak için tüm beyaz şeffaf pikseller yapılabilir :

# filter the color band, keep greyness of relevant shadows below limit
gdal_calc.py -A ./hillshade.tmp.tif  --outfile=./color_crop.tmp.tif \
    --calc="255*(A>220) +      A*(A<=220)"
# filter the opacity band, keep opacity of relevant shadows below limit
gdal_calc.py -A ./hillshade.tmp.tif  --outfile=./opacity_crop.tmp.tif \
    --calc="  1*(A>220) +(256-A)*(A<=220)"
# gdalbuildvrt -separate ./final.vrt ./color_crop.tmp.tif ./opacity_crop.tmp.tif
# gdal_translate -co COMPRESS=LZW -co ALPHA=YES ./final.vrt ./final_crop.tif

# 2, color.tif (kırpılmış) # 2, opacity.tif (kırpılmış) # 2, final_crop.tif

3. Daha fazla -b 1 optimizasyonu (kırpma + karalamak)

Güvenebileceğiniz ilerici bir opaklık bandımız -b 2olduğundan, -b 1pikselleri beyaz px = 255 ile 255*(A>220)veya siyah px = 1 ile yapabiliriz 1*(A>220).

gdal_calc.py -A ./hillshade.tmp.tif  --outfile=./color.tmp.tif \
   --calc="255*(A>220) + 1*(A<=220)"
# gdal_calc.py -A ./hillshade.tmp.tif  --outfile=./opacity_crop.tmp.tif \
#  --calc="  1*(A>220) +(256-A)*(A<=220)".
# gdalbuildvrt -separate ./final.vrt ./color.tmp.tif ./opacity_crop.tif
# gdal_translate -co COMPRESS=LZW -co ALPHA=YES ./final.vrt ./final.tif

# 3, color.tif # 2, opacity.tif (kırpılmış) # 3, final.tif

Bu sonuç, daha güçlü gölgeler göstermektedir .

Sonuç

Saydam bir tepe gölgesi oluşturmak, düzlüğün eski gri alanlarını ve ilişkili istenmeyen ancak her yerde bulunan solma-solma etkisini ortadan kaldırmak için hemen bir hedefe sahiptir . İstenen yan ürün nihai görsel ürün üzerinde daha fazla kontrol sahibi. Açıklanan işlem çoğu gri ve tüm beyaz pikselleri kaldırır. Renkli arka plan düz görüntüsü, saydamdan siyaha tepe tonları tarafından bindirildiğinde seçilen renklerini koruyacak, yalnızca gölgeli alanlar kararacaktır. # 2 (solda) ve # 3 (sağda) işlemlerinin karşılaştırılması.

Genel bakış:

# 2 (solda) ve # 3 (sağda) işlemlerinin karşılaştırılması, genel görünüm.

Zum, lütfen gölgeleri fark et (en önce vs sonra):

# 2 (solda) ve # 3 (sağda) işlemlerinin karşılaştırılması, detaylar görünümü.

Daha fazla optimizasyon

Beyaz alanlar : 3D hisleri arttırmak için en aydınlanmış bölgeleri de tutmak isteyebilirsiniz. Kelimenin tam anlamıyla bu mevcut yaklaşımın küçük eşik değişimleriyle simetrik olması, ardından her iki çıkışın bir gdal_calc aracılığıyla birleştirilmesi olacaktır. Ova% 100 şeffaf, en karanlık gölgeler ve en aydınlık alanları opak yapacaktır.

Düzeltme: Daha iyi bir sonuç elde etmek için giriş tepe gölgesi önceden düzeltilebilir, bkz. GRASS ile DEM'in pürüzsüzleştirilmesi ?

Kompozit tepe gölgesi ( Kompozit tepe gölgesi nasıl oluşturulur? ).

Kabarık tepe gölgesi de ilginçtir ( anlatma )

notlar

  • Düzlük eşiği olarak gdal hillshadeçıkış düz alanları işaretleme, px = 221 (#dddddd = [221.221.221]) 'dir. Ayrıca, tepe gölgesinin px = 221 görüntüleri, gölgeleri eğimli (A <221) ve ışık eğimleri (A> 221) pikselleri arasında böler.
  • Px = [170-220] 'deki bir işlem eşiği , iyi olduğu kanıtlanmış, göze çarpan gölgelerin% 100'üne yakındır ve bu, kabartma alanın% 15-35'ine zar zor durur.
  • Dosya boyutu> Sıkıştırma: final.tif # 1, # 2, # 3 tanesi sıkıştırılmadan ~ 1.3MB, sonra sıkıştırmadan sonra ~ 0.3-0.16MB,% 80 tasarruf!
  • Dosya boyutu> kırpma: # 1 .326KB'den kırpma rengi ve opaklığı (# 2) 310 kb'ye, karartma rengi (# 3) 160 kb'ye kadar. Dosya boyutunda kırpma efekti, px = 220'de eşik değerinde% 5 ile% 50 arasında azalma ve girişim arasındadır.

2
Cesaret verici +1
Hugolpz

2
Öğretici bitti. İngilizcem bozulabilir, gelişmekte özgürsün.
Hugolpz

3
Kendinize cevap vermek zorunda kalmanıza rağmen, bu konu, gölgelemeyle ilgili birçok soruya dokunarak mükemmel bir öğretici. Aferin!
Kersten

Eğitimin sadece iş. Harika iş. Lütfen soruma cevap vermeyi düşünebilir misiniz => burada ? Bu tür GeoTIFF, alfa bantlı gri tonlamalı için .ovr oluşturmak mümkün mü?
Sandthorn

1
Merhaba @sandthorn, bu sevgime rağmen artık bu alanda değilim. Cevabı bulmanın maliyeti benim için-2018’den daha yüksek olacaktır. Umarım benim sorunum için doğru yöne işaret ediyorum!
Hugolpz

7

Gri olmayan bir tuvalin aynı sonucunu diğer katmanlarla birleştirmeye daha uygun hale getirmenin bir başka yolu da gdaldem'deki 'birleşik' seçeneğidir.

Bir eğim ve tepe gölgesi gerçekleştirir ve ikisini bir işlemde birleştirir. 0 eğim alanları beyazdır. 90 derecelik eğim alanları, eğim gölgesi için siyahtır ve tepe gölge katmanı tarafından bir miktar aydınlatma eklenmiştir.

gdaldem hillshade -combined -compute_edges infile outfile.tif

Sonra bunu diğer katmanlara göre 'asmak' için çarpım katmanı birleştirme modu kullanın.

Standart / Kombine tepe paylaşımı

Standart Tepe Gölgelendirme

Kombine gölgelendirme, OSM taban katmanı ile çarpılmıştır (yaklaşık% 50 opaklık) Kombine gölgeleme OSM taban katmanı ile çarpıldı


2

gdal+ converttabanlı iş akışı

İyi görsel sonuçlar veren bir gdal+ convertçözümü var. Bu çözümün sorunu, daha sonra geri yüklemeniz gereken convertcoğrafi bilgileri yok etmektir. Çalıştırılacak eylem sayısını artırır.

# Basic crop
gdal_translate -projwin 67 35.92 99 5 ../data/noaa/ETOPO1_Ice_g_geotiff.tif crop_xl.tmp.tif
# Grey-based hillshade
gdaldem hillshade crop_xl.tmp.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
# create a transparent hillshade:
convert shadedrelief.tmp.tif -fuzz 7% -fill "#FFFFFF" -opaque "#DDDDDD"  whited.jpg # makes all grey values white to lighten the filesize
convert whited.jpg -alpha copy -channel alpha -negate +channel trans.png # <=== TRICK HERE.
# Restore georeferencing & reproject            
gdal_translate -a_ullr 67 35.92 99 5 trans.png trans.tmp.gis.tif
gdalwarp -s_srs EPSG:4326 -t_srs ESPG:3857 ./trans.tmp.gis.tif ./trans_reproj.tmp.gis.tif
# Compress from 11MB to 2MB:
gdal_translate -co COMPRESS=LZW -co ALPHA=YES ./trans_reproj.tmp.gis.tif ./trans.gis.tif

Komut 4 açıklaması için bakınız: https://stackoverflow.com/a/23018544/1974961

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.