Comment créer un ombrage composite?

10

Le concept de l' ombrage composite est de combiner plusieurs ombrages avec une orientation solaire différente pour éviter les angles morts. Il nécessite de fusionner 3 images ombrées avec 315⁰ (lumière du soleil NW, couche par défaut), + 355⁰ couche, + 275⁰ rayons du soleil, respectivement. Cela augmente les détails et l'élégance, comme indiqué ci- dessous . Une description complète non SIG est ici .

entrez la description de l'image ici

En utilisant n'importe quel fichier srtm, les 3 ombrages initiaux peuvent être effectués via:

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
Hugolpz
la source

Réponses:

9

La source liée mentionne "changer son mode de fusion en <Multiplier>" , donc l'opération à faire n'est pas une simple moyenne des ombrages d'entrée (pour cela, voir aussi Comment faire la moyenne de gdal_hillshades? ). C'est autre chose. Pourtant, créons les 3 ombrages de différentes directions du soleil:

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

entrez la description de l'image ici

Conserver la valeur la plus basse de A, B, C

Le premier algorithme que j'ai pensé est de filtrer et de conserver les pixels les plus sombres, alias les pixels avec des valeurs plus faibles parmi les entrées A, B, CA booléennes peuvent le faire:

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

La zone dominée par les ombres représente désormais plus que le côté opposé d'un lignt central, elle a été augmentée de 40⁰ de chaque côté. Pas comme le lien fourni, cet algorithme actuel semble avoir trop perdu la zone d'éclairement.

Angle de 315±30⁰(variation d'angle plus petite) plutôt que le courant 315±40⁰ferait mieux.

Le diagramme ci-dessous est la base de l'équation. Il montre les sources lumineuses A, B, C et les comparaisons booléennes pour les valeurs de pixels A, B, C dans chaque partie. Les lignes d'égalité nécessitent une attention particulière pour être incluses dans le booléen. Les lignes médianes ont une valeur 221pour la source de lumière perpendiculaire. Pensez aux zones d'influence , la source de lumière la plus proche est la principale influence et la plus éloignée la plus faible.

entrez la description de l'image ici

Conserver les valeurs extrêmes pour A, B, C

Un autre algorithme booléen pourrait consister à conserver les valeurs les plus extrêmes, à la fois les pixels les plus sombres et les plus blancs. Le diagramme suivant aide à comprendre la formule booléenne. Pour chaque sixième du cercle, il identifie la valeur à conserver de A, B, C et un booléen pour sélectionner la zone triangulaire plus la ligne d'égalité dans le sens horaire, et seulement cela . Il donne (du haut et dans le sens horaire):

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

entrez la description de l'image ici

Si les variations d'angles ne sont pas trop importantes, cela pourrait donner de bons résultats.

Autres booléens

Vous pouvez créer des booléens plus complexes pour couvrir l'ensemble des cercles en utilisant n'importe quelle combinaison des segments de bordure. Il reste important qu'une seule valeur parmi A, B, C soit conservée pour un segment.

Multiplier

J'ai fait plusieurs tentatives infructueuses de multiplyvaleurs de pixels sans formule éprouvée ni succès final. @Radouxju a souligné que (a*b*c)^(1/3)(moyenne GÉOMÉTRIQUE) au lieu de la moyenne ARITHMÉTIQUE (a*b*c)/(255*255)peut fonctionner. La moyenne géométrique est inférieure ou égale à la moyenne arithmétique, ce qui accentue l'obscurité des zones ombragées. Je ne l'ai pas encore testé.

Hugolpz
la source
J'ai essayé de résumer mon apprentissage conceptuel sur le composite et comment quelqu'un pouvait le personnaliser. La vraie formule de "multiplier" me reste inconnue.
Hugolpz
Pourquoi ne pas simplement multiplier les valeurs et redimensionner les résultats?
whuber
Je n'ai pas essayé! Quelle formule le ferait, (A*B*C)/(255*255)?
Hugolpz
1
Ce serait un bon début :-).
whuber
1
n'est pas "multiplier" en utilisant la moyenne GÉOMÉTRIQUE au lieu de la moyenne ARITHMÉTIQUE. (a b c) ^ (1/3). La moyenne géométrique est inférieure ou égale à la moyenne arithmétique, ce qui accentue l'obscurité des zones ombragées.
radouxju
0

Un outil qui peut le faire (entre autres) est la visualisation basée sur les facteurs Sky-View ( http://iaps.zrc-sazu.si/en/svf#v ). Calculez plusieurs paramètres d'un terrain. C'est sacrément bon.

Dimitris Poursanidis
la source
-1

Le numpy de Gdal_calc semble avoir plus d'opérateurs :

+ 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

Je n'ai pas trouvé d'exemples clairs et appropriés sur la façon dont les opérateurs exotiques devraient être utilisés. Si vous avez quelque chose, n'hésitez pas à partager.

Hugolpz
la source