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 utilisant gdal_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 nodatavalue 0
; le noir le plus foncé en entrée et en sortie est et devrait être 1
. Si aucune bande d'opacité n'est définie, l' opacité est de 100% .
gdaldem hillshade input.tif hillshade.tmp.tif -s 111120 -z 5 -az 315 -alt 60 -compute_edges
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 que A<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:
# 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
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:
# 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
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 via 255*(A>220)
ou noirs px = 1 via 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
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
- Le seuil de surface plate en
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).
- Un seuil de traitement à px = [170-220] aussi bon s’est révélé, il garde près de 100% des ombres visibles des yeux, qui représentent à peine 15 à 35% de la surface en relief.
- Taille du fichier> Compression: final.tif sur # 1, # 2, # 3: environ 1,3 Mo sans compression, puis environ 0,3 à 0,16 Mo après compression, soit une économie de 80%!
- Taille du fichier> Recadrage : à partir de .326Ko en n ° 1, rognage des couleurs et de l'opacité (# 2) jusqu'à 310kb, couleur noircie (# 3) jusqu'à 160kb. L'effet de rognage sur la taille du fichier est compris entre 5 et 50% de réduction avec le seuil à px = 220 et mon entrée.