7 votos

La fijación de los picos en el DSM de LiDAR?

Tengo un DSM derivados de drone LiDAR que quiero usar como una base para cubrir las imágenes y, junto con un DTM, como base para la estimación de la altura del dosel/volumen.

Por desgracia, el DSM tiene muchos "picos" a lo largo de los límites entre las líneas de vuelo. He invertido el DSM multiplicando por -1, haciendo que las puntas de los sumideros. He determinado que los sumideros >50 pies de profundidad fueron los errores que quiero llenar mientras se hunde <50 pies de profundidad fueron árboles/arbustos que quiero conservar. Pero la FILL herramienta sólo permite la configuración de un z límite para el máximo de la diferencia de elevación entre el lavabo y su punto de vertido para ser llenado.

Quiero establecer la mínima diferencia de elevación a cubrir (por ejemplo, > 50 pies).

3voto

Me he dado una respuesta que se basa en la WhiteboxTools de geoprocesamiento de la biblioteca (de la que yo soy el desarrollador), pero me imagino que usted podría utilizar un trabajo similar en sólo acerca de cualquier SIG. La única manera bastante inusual herramienta es la "Profundidad-In-Sink' de la herramienta.

from whitebox_tools import WhiteboxTools

wbt = WhiteboxTools()
wbt.work_dir = "/path/to/data/"

in_dem = "DEM.tif"

# Invert the DEM
wbt.multiply(in_dem, -1, "iDEM.tif")

# Find the depressions, giving each one a unique ID
wbt.sink("iDEM.tif", "depressions.tif")

# Calcuate the depth-in-sink
wbt.depth_in_sink("iDEM.tif", "depth_in_sink.tif")

# Assign each depression its maximum depth-in-sink value
wbt.extract_raster_statistics("depth_in_sink.tif", "depressions.tif", "max_dis.tif", stat="maximum")

# Threshold max_dis and create Booleans for deep deps vs everything else
wbt.greater_than("max_dis.tif", 50.0, "deep_depressions.tif", incl_equals=True)
wbt.less_than("max_dis.tif", 50.0, "not_deep_depressions.tif")

# Now fill the whole inverted DEM
wbt.fill_depressions("iDEM.tif", "iDEM_filled.tif", fix_flats=False)

# Multiply iDEM_filled by deep_depressions
wbt.multiply("iDEM_filled.tif", "deep_depressions.tif", "temp1.tif")

# Multiply iDEM by not_deep_depressions
wbt.multiply("iDEM.tif", "not_deep_depressions.tif", "temp2.tif")

# Add the two temp rasters together
wbt.add("temp1.tif", "temp2.tif", "temp3.tif")

# Invert the result back into the upward direction
wbt.multiply("temp3.tif", -1, "DEM_spikes_removed.tif")

Si las características son verdaderas puntas (es decir, solo las celdas de la cuadrícula con anómalamente altos valores en comparación con los países vecinos), como es a menudo el caso con LiDAR DEMs, entonces usted podría considerar el uso de una imagen de filtrado de enfoque, en lugar de la depresión-el método de relleno. De filtros que pueden ser de utilidad para este propósito (también disponible en WhiteboxTools) incluyen la AdaptiveFilter, ConservativeSmoothingFilter, LeeFilter, MedianFilter, o la OlympicFilter. Si el DEM es bastante ruidoso, usted podría considerar la posibilidad de aplicar la FeaturePreservingDenoise herramienta. Todas estas herramientas pueden ayudar a mejorar su DEM con una sola operación en comparación con el enfoque anterior. Sin embargo, si tu picos son 'grasa' (varias celdas en tamaño) y, a continuación, la depresión, el llenado de un enfoque que puede ser mejor.

Por último, usted podría considerar la posibilidad de que en lugar de filtrado de estos puntos de la nube de puntos LiDAR de que el DSM fue creado. El LidarRemoveOutliers herramienta eliminará LiDAR puntos que superan una determinada diferencia de altura de la elevación promedio dentro de un barrio. Esto podría ser un método muy eficaz.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X