Bağlantılı kaynak "füzyon modunu <Çarpma> olarak değiştirin" ifadesinden bahseder, bu nedenle yapılacak işlem basit bir girdi yamaçları ortalaması değildir (bunun için gdal_hillshades nasıl ortalamalandırılır? ). Başka bir şey. Yine de, 3 farklı güneş ışığı yönü tepesi oluşturalım:
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
A, B, C'nin en düşük değerini koru
İlk algoritma, en karanlık pikselleri, yani A, B, CA boolean girişleri arasında daha düşük değerlere sahip pikselleri filtrelemek ve saklamaktır:
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))"
Gölgelerin egemen olduğu alan şimdi bir merkezi ligntin karşı tarafından daha fazlasını oluşturuyor, her iki tarafta da 40⁰ arttı. Bağlantı sağlandığı gibi, bu mevcut algoritma aydınlanma alanını çok fazla kaybetmiş gibi görünüyor.
Açısı 315±30⁰
akımı yerine o (küçük açı değişimi) 315±40⁰
daha güzel yapardı.
Aşağıdaki şema denklemin temelidir. Her bölümde A, B, C piksel değerleri için A, B, C ve Boole karşılaştırmalarını gösterir. Eşitlik çizgilerinin Boole'ye dahil edilmesi için özel bir dikkat gösterilmesi gerekir. Ortanca çizgiler 221
dikey ışık kaynağı için değer taşır. Etki alanlarını düşünün , en yakın ışık kaynağı ana etkidir ve en zayıf etki en uzundur.
A, B, C için uç değerleri koruyun
Başka bir Boole algoritması, en karanlık ve en beyaz pikseller olmak üzere en uç değerleri korumak olabilir. Aşağıdaki şema Boolean formülü hakkında yardımcı olur. Çemberin her altıncı için, ve üçgen şekilli boşluk artı saat eşitlik hattını seçmek için A, B, C, ve bir Boolean tutmak için değerini tanımlayan sadece bu . Verir (üstten ve saat yönünde):
--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)"
Açı değişimleri çok önemli değilse, iyi sonuçlar verebilir.
Diğer Booleanlar
Kenarlık segmentlerinin herhangi bir kombinasyonunu kullanarak tüm daireleri kapsayacak şekilde daha karmaşık Boole oluşturabilirsiniz. Bir segment için A, B, C'den sadece bir değerin tutulması önemlidir .
Çarpmak
Yaptığım birkaç failled girişimleri için multiply
kanıtlanmış bir formül ne de nihai başarı olmadan piksel değerlerinin. @Radouxju (a*b*c)^(1/3)
, ARİTMETİK ortalama yerine (GEOMETRİK ortalama) (a*b*c)/(255*255)
işe yarayabileceğini belirtti. Geometrik ortalama, gölgeli alanların koyuluğunu vurgulayan aritmetik ortalamaya daha düşük veya eşittir. Henüz test etmedim.