Obtengo elegantes sombreados transparentes mediante una combinación gdal
y convert
. En comparación con el sombreado basado en gris que se usa comúnmente, estos sombreados transparentes son muy geniales porque se pueden colocar entre el fondo del mapa y otras capas superiores (carreteras, edificios) para proporcionar una sensación 3D independientemente del tipo y color del fondo.
Cómo funciona
El truco: comenzando con una sombra de escala de grises producida por gdal hillshade
, el truco consiste en tomar los valores del canal gris, invertir cada valor y transferir este resultado a un nuevo canal de opacidad. El píxel negro [0,0,0] se convierte en [0,0,0,255] (opacidad = 255), el píxel gris [120,120,120] se vuelve más bajo [120,120,120,135] (opacidad = 135, también conocido como 255-120), el píxel blanco [255,255,255] hacerse transparente [255,255,255,0] (opacidad = 0, también conocido como 255-255) y así sucesivamente. Los tonos de las colinas son opacos y negros , las llanuras se vuelven progresivamente (blancas) transparentes . Conceptualmente, la ecuación de banda del píxel es algo así:
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 !
Para ver un video relajado sobre este enfoque, explicado por un diseñador de Photoshop, vea Agregar relieve sombreado en Photoshop (16 minutos).
Pregunta
Tomar un ETOPO o SRTM derivada de sombreado a base de gris ( gdaldem hillshade crop_xl.tmp.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
, archivos disponibles para descargar aquí ) como entrada ...
... ¿Cómo hacer el truco citado superior a través de gdal u otra forma no destructiva de GIS en tales archivos .tif?
Tenga en cuenta que deseo mantener las propiedades SIG (geolocalización).
gdaldem hillshade etopo_crop.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
gdal_tranlate
con una combinación de -b band , -mask band , -expand gray | rgb | rgba junto con la fórmulaopacity=-(px_grey_value)+255
puede ser el camino a seguir, pero nunca toqué las bandas y todavía estoy bastante despistado.Respuestas:
Cáscara de nuez
Cada conjunto de 3 imágenes a continuación debe leerse como "gris (banda) + opacidad (banda) = resultado transparente" . Puede probar estos procesos en minutos a través del archivo MAKE hospedado github asociado . El proceso n. ° 3 es el que recomiendo, con un umbral entre 170 (mantiene sombras fuertes) y 220 (mantiene todas las sombras). El proceso 3 proporciona las sombras más fuertes y evita el efecto de blanqueamiento grisáceo. Adapte la opacidad general de la capa resultante según sea necesario. Las ecuaciones también
--calc="<equation>"
pueden mejorarse según sea necesario, utilizandogdal_calc
.Para ver un video relajado sobre este enfoque, explicado por un diseñador de Photoshop, vea Agregar relieve sombreado en Photoshop (16 minutos).
Fondo
gdaldem hillshade
produce un archivo de escala de grises de una banda con un rango de valores de píxeles = [1-255], es decir, desde las sombras más oscuras hasta el píxel más iluminado. Para áreas planas, px = 221 (#DDDDDD).NoDataValue
los píxeles obtienen el valor de nodata predeterminado0
, también, el negro más oscuro en la entrada y en la salida es y debería ser1
. Sin una banda de opacidad definida, la opacidad es del 100% .¡Queremos definir y controlar una segunda banda de opacidad!
Objetivos
Queremos una banda en escala de grises
-b 1
, es el sombreado. Fuera de gdal, es una banda gris con rango continuo como px = [1-255]. Podemos recortar áreas no relevantes (# 2), o oscurecerlo a px = 1 y confiar en la banda de opacidad (# 3).Queremos una banda de opacidad
-b 2
, generalmente la inversión de la sombra o una función relacionada de eso. Podemos recortar áreas no relevantes (# 2). Debe ser un rango continuo de opacidades como px = [1-255], de lo contrario, no hay elegancia.gdal_calc
se puede usar para hacer cálculos matemáticos en píxeles de los archivos de entrada A, B, C ... y verificar valores booleanos comoA<220
, que devuelve 1 (verdadero) o 0 (falso). Esto permite el cálculo condicional. Si la condición es falsa, la parte relacionada de la ecuación se anula.1. Sombreado gris hecho transparente
Lo siguiente proporciona resultados muy buenos de dos bandas con los
gdal hillshade
grises estándar y las áreas más blancas cada vez más transparentes:2. Optimización mediante pseudocultivo (-b 1 y -b 2)
2/3 de los píxeles en
-b 1
(escala de grises) se vuelven invisibles a simple vista cuando-b 2
se agrega la opacidad , sin embargo, estos píxeles mantienen varios valores de-b 1
opacidad más blancos y bajos-b 2
. Se pueden hacer todos los[255,1]
píxeles transparentes blancos , lo que permite una mejor tasa de compresión:3. Optimización adicional -b 1 (recorte + ennegrecimiento)
Dado que tenemos una banda de opacidad progresiva
-b 2
en la que podemos confiar, podríamos hacer-b 1
píxeles, ya sea blanco px = 255255*(A>220)
o negro px = 11*(A>220)
.Este resultado muestra sombras más fuertes .
Resultado
Crear un sombreado transparente tiene como objetivo inmediato eliminar las antiguas áreas grises de la llanura y el efecto de desvanecimiento canoso no deseado pero ubicuo asociado . El subproducto deseado es un mayor control sobre el producto visual final. El proceso descrito elimina la mayoría de los píxeles grises y todos los blancos. La imagen plana de fondo colorido mantendrá los colores elegidos cuando se superpongan las sombras transparentes a negras, solo las áreas sombreadas se oscurecerán. Comparación del proceso # 2 (izquierda) y # 3 (derecha) a continuación.
Visión general :
Zoom, observe las sombras (antes vs después):
Otras optimizaciones
Áreas blancas : también es posible que desee mantener las áreas más iluminadas para aumentar la sensación 3D. Literalmente sería la simétrica de este enfoque actual con pequeños cambios de umbral, luego una fusión de ambas salidas a través de gdal_calc. La llanura sería 100% transparente, las sombras más oscuras y las áreas iluminadas más claras opacas.
Suavizado: el sombreado de entrada se puede suavizar previamente para obtener un mejor resultado final, consulte ¿ Suavizar DEM usando GRASS?
Sombreado compuesto ( ¿Cómo crear sombreado compuesto? ).
Bumped hillhade también es interesante ( descripción )
Notas
gdal hillshade
salida es px = 221 (#DDDDDD = [221,221,221]), marcando áreas planas. Además, el sombreado px = 221 divide las imágenes entre las pendientes en la sombra (A <221) y las pendientes en la luz (A> 221) píxeles.fuente
Otra forma de obtener el mismo resultado de un lienzo no gris más adecuado para combinar con otras capas es la opción 'combinada' en gdaldem.
Realiza una inclinación y sombra de la colina y combina las dos en una operación. Las áreas de pendiente 0 son blancas. Las áreas de pendiente de 90 grados son negras para la sombra de la pendiente, con algo de iluminación agregada por la capa sombreada.
gdaldem hillshade -combined -compute_edges infile outfile.tif
Luego use un modo de composición de capas múltiples para "cubrir" esto sobre otras capas.
Sombreado estándar / combinado
Sombreado combinado multiplicado con la capa base de OSM (opacidad alrededor del 50%)
fuente
gdal
+convert
flujo de trabajo basadoHay una solución
gdal
+convert
que da buenos resultados visuales. El problema con esta solución es queconvert
destruye la información geográfica que luego debe restaurar. Aumenta el número de acciones para ejecutar.Para la explicación del comando 4, consulte: https://stackoverflow.com/a/23018544/1974961
fuente