J'obtiens d'élégants ombrages transparents via une combinaison gdal
et convert
. Comparé à un ombrage à base de gris couramment utilisé, de tels ombrages transparents sont très cool car ils peuvent être placés entre l'arrière-plan de la carte et d'autres couches supérieures (routes, bâtiments) pour donner une impression 3D quels que soient le type et la couleur de l'arrière-plan.
Comment ça marche
L'astuce: à partir d'un ombrage de gris produit par l'ombrage gdal hillshade
, l'astuce consiste à prendre les valeurs du canal gris, à inverser chaque valeur et à transférer ce résultat dans un nouveau canal d'opacité. Le pixel noir [0,0,0] devient [0,0,0,255] (opacité = 255), le pixel gris [120,120,120] devient inférieur devenant [120,120,120,135] (opacité = 135, aussi appelé 255-120), pixel blanc [255,255,255] devenir transparent [255,255,255,0] (opacité = 0, autrement dit 255-255) et ainsi de suite. Les teintes des collines sont opaques et noires , les plaines deviennent progressivement (blanches) transparentes . Conceptuellement, l'équation de la bande de pixel est quelque chose de tel:
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 !
Pour une vidéo décontractée sur cette approche, expliquée par un concepteur de Photoshop, voir Ajouter un relief ombré à Photoshop (16 minutes).
Question
En prenant un ombrage dérivé de gris ETOPO ou SRTM ( gdaldem hillshade crop_xl.tmp.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
, fichier disponible au téléchargement ici ) comme entrée ...
... Comment faire le truc cité supérieur via gdal ou un autre moyen non destructeur de SIG sur de tels fichiers .tif?
Notez que je souhaite conserver les propriétés SIG (géolocalisation).
gdaldem hillshade etopo_crop.tif shadedrelief.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
gdal_tranlate
qu'avec une combinaison de -b band , -mask band , -expand grey | rgb | rgba avec la formuleopacity=-(px_grey_value)+255
peut être la voie à suivre, mais je n'ai jamais touché à des groupes et je suis encore assez désemparé.Réponses:
Coquille de noix
Chaque série de 3 images ci-dessous doit être lue telle que "gris (bande) + opacité (bande) = résultat transparent" . Vous pouvez tester ces processus en quelques minutes via le fichier makehile hébergé par github associé . Le processus n ° 3 est celui que je recommande, avec un seuil compris entre 170 (conserve les ombres fortes) et 220 (conserve toutes les ombres). Le processus 3 fournit les ombres les plus fortes et évite les effets gris-blanchissant. Adaptez l'opacité globale du calque résultant en fonction de vos besoins. Les équations dans
--calc="<equation>"
peuvent être améliorées si nécessaire, en utilisantgdal_calc
.Pour une vidéo décontractée sur cette approche, expliquée par un concepteur de Photoshop, voir Ajouter un relief ombré à Photoshop (16 minutes).
Contexte
gdaldem hillshade
produit un fichier d’échelle de gris à une bande avec une plage de valeurs en pixels = [1-255], allant des ombres les plus sombres au pixel le plus éclairé. Pour les zones plates, px = 221 (#DDDDDD).NoDataValue
les pixels reçoivent par défaut la valeur nodatavalue0
; le noir le plus foncé en entrée et en sortie est et devrait être1
. Si aucune bande d'opacité n'est définie, l' opacité est de 100% .Nous voulons définir et contrôler un 2ème groupe d'opacité!
Objectifs
Nous voulons un groupe de niveaux de gris
-b 1
, c'est l' ombre de la colline. En dehors de gdal, c'est une bande grise avec une plage continue telle que px = [1-255]. Nous pouvons rogner les zones non pertinentes (# 2) ou les noircir en px = 1 et utiliser la bande d'opacité (# 3).Nous voulons une bande d'opacité
-b 2
, généralement l'invert de l'ombre de la colline ou une fonction associée à celle-ci. Nous pouvons supprimer les zones non pertinentes (n ° 2). Ce doit être une gamme d'opacités telles que px = [1-255], sinon il n'y a pas d'élégance.gdal_calc
peut être utilisé pour faire des calculs sur les pixels des fichiers d'entrée A, B, C ... et vérifier les valeurs booléennes telles queA<220
, qui renvoie 1 (vrai) ou 0 (faux). Cela permet le calcul conditionnel. Si la condition est fausse, la partie liée de l'équation est annulée.1. ombrage gris transparent
Ce qui suit donne de très bons résultats avec deux bandes avec les
gdal hillshade
gris standard et des zones plus blanches rendues de plus en plus transparentes:2. Optimisation via pseudo-crop (-b 1 & -b 2)
Les 2/3 des pixels
-b 1
activés (niveaux de gris) deviennent invisibles à l'œil nu lorsque l'opacité-b 2
est ajoutée. Cependant, ces pixels conservent diverses valeurs d'-b 1
opacité plus blanche et plus faible-b 2
. Ils peuvent être tous les[255,1]
pixels transparents blancs , permettant un meilleur taux de compression:3. Optimisation ultérieure de -b 1 (recadrage + noircissement)
Puisque nous avons une bande d'opacité progressive
-b 2
sur laquelle nous pouvons compter, nous pourrions créer des-b 1
pixels blancs px = 255 via255*(A>220)
ou noirs px = 1 via1*(A>220)
.Ce résultat montre des ombres plus fortes .
Résultat
Créer un abat-jour transparent ayant pour objectif immédiat de supprimer les anciennes zones grises de la plaine et l’effet de vieillissement dégradé indésirable mais omniprésent . Le sous-produit souhaité est un contrôle accru sur le produit visuel final. Le processus décrit supprime la plupart des pixels gris et blancs. L'image d'arrière-plan unie colorée conservera ses couleurs choisies lorsqu'elle sera superposée par les ombrages de collines transparents à noirs, seules les zones ombragées seront assombries. Comparaison du processus n ° 2 (à gauche) et n ° 3 (à droite) ci-dessous.
Vue d'ensemble:
Zoom, remarquez les ombres (avant vs après):
Optimisations supplémentaires
Zones blanches : On peut également souhaiter conserver les zones les plus éclairées pour augmenter les sensations 3D. Ce serait littéralement la symétrie de cette approche actuelle avec des changements mineurs de seuil, puis une fusion des deux sorties via gdal_calc. La plaine serait 100% transparente, les ombres les plus sombres et les zones éclairées les plus claires sont opaques.
Lissage: L'ombrage d'entrée peut être pré-lissé pour obtenir un meilleur résultat final, voir Lissage de DEM avec GRASS?
Ombrage composite ( Comment créer un ombrage composite? ).
L'ombrage accidenté est également intéressant ( description )
Remarques
gdal hillshade
sortie est px = 221 (#DDDDDD = [221,221,221]), marquant les zones plates. De plus, px = 221 de l’ombrage divise les images entre les pentes dans l’ombre (A <221) et les pentes dans l’éclairage (A> 221).la source
L'option 'combinée' de gdaldem est un autre moyen d'obtenir le même résultat avec une toile non grise plus appropriée pour la combinaison avec d'autres couches.
Il effectue une pente et l'ombre de la colline et combine les deux en une seule opération. Les zones de 0 pente sont blanches. Les zones de pente à 90 degrés sont noires pour l'ombre de la pente, avec une illumination ajoutée par la couche d'ombrage.
gdaldem hillshade -combined -compute_edges infile outfile.tif
Ensuite, utilisez un mode de composition multicouche pour le "draper" par-dessus d'autres couches.
Ombrage Standard / Combiné
Ombrage combiné multiplié par la couche de base OSM (opacité environ 50%)
la source
gdal
+convert
Flux de travail baséIl existe une solution
gdal
+convert
qui donne de bons résultats visuels. Le problème avec cette solution est queconvert
détruit les informations géographiques que vous devez ensuite restaurer. Cela augmente le nombre d'actions à exécuter.Pour l'explication de la commande 4, voir: https://stackoverflow.com/a/23018544/1974961
la source