如何创建复合山体阴影?


10

复合山坡的概念是将多个具有不同阳光方向的山坡结合起来,以避免盲点。它需要将3个山体阴影图像分别与315⁰(NW阳光,默认层),+355⁰层和+275⁰阳光合并。如下所示,这增加了细节和美观。此处提供了完整的非GIS 描述

在此处输入图片说明

使用任何srtm文件,可以通过以下三种方式完成3个初始山体阴影:

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

Answers:


9

链接的源提到“将其融合模式更改为<乘>”,因此要做的操作不是输入山形阴影的简单平均(为此,另请参见如何平均gdal_hillshades?)。这是另一回事。但是,让我们创建3个不同的阳光方向山体阴影:

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的最小值

我第一个算法是过滤并保留最暗的像素,也就是输入A,B,CA布尔值中值较低的像素可以做到这一点:

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))"

现在,阴影占主导的区域比一个中央结的相对侧多,每侧增加了40°。不像所提供的链接那样,这种当前算法似乎失去了太多的启发领域。

角度315±30⁰(较小的角度变化)而不是电流315±40⁰会更好。

下图是公式的基础。它显示了光源A,B,C,以及每个部分中像素值A,B,C的布尔比较。等号线需要特别注意才能包含在布尔值中。中线具有221垂直光源的值。考虑一下影响区域,最接近的光源是主要影响因素,最远的是最弱的影响因素。

在此处输入图片说明

保持A,B,C的极值

另一种布尔算法可能是保持最极端的值,即最暗和最白的像素。下图有助于了解布尔公式。对于圆的每六分之一,它将标识要从A,B,C保留的值,以及一个布尔值以选择三角形区域以及顺时针等距线,仅此一个。它给出(从顶部到顺时针方向):

--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,B,C中的一个值仅保留一个段仍然很重要。

我进行了几次失败的尝试尝试multiply像素值进行像素化,但均未获得成功的公式或最终的成功。@Radouxju指出,(a*b*c)^(1/3)(GEOMETRIC均值)可以代替ARITHMETIC均值(a*b*c)/(255*255)。几何平均值小于或等于算术平均值,这加重了阴影区域的黑暗度。我还没有测试。


我试图总结关于复合材料的概念性学习以及有人如何对其进行自定义。我不知道“乘”的真正公式。
Hugolpz 2015年

为什么不只是将这些值相乘并重新缩放结果呢?
ub

还没尝试!哪个公式可以做到(A*B*C)/(255*255)
Hugolpz 2015年

1
那将是一个不错的开始:-)。

1
不是使用GEOMETRIC平均值而不是ARITHMETIC平均值“相乘”。(a b c)^(1/3)。几何平均值小于或等于算术平均值,这加重了阴影区域的黑暗度。
radouxju

0

可以执行此操作的工具(其中包括)是“基于天视因数的可视化”(http://iaps.zrc-sazu.si/en/svf#v)。计算地形的几个参数。该死的好。


-1

Gdal_calc的numpy似乎有更多的运算符

+ 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

对于如何使用奇异运算符,我还没有找到正确的例子。如果有什么,随时分享。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.