Skip DSM smoothing in 2.5D model with fast-orthophoto

pull/992/head
Piero Toffanin 2019-06-08 19:28:58 -04:00
rodzic 2d1c7e8cf9
commit 96d09996e3
3 zmienionych plików z 16 dodań i 10 usunięć

Wyświetl plik

@ -35,7 +35,8 @@ error = None
def create_dem(input_point_cloud, dem_type, output_type='max', radiuses=['0.56'], gapfill=True,
outdir='', resolution=0.1, max_workers=1, max_tile_size=2048,
verbose=False, decimation=None, keep_unfilled_copy=False):
verbose=False, decimation=None, keep_unfilled_copy=False,
apply_smoothing=True):
""" Create DEM from multiple radii, and optionally gapfill """
global error
error = None
@ -238,9 +239,12 @@ def create_dem(input_point_cloud, dem_type, output_type='max', radiuses=['0.56']
'-co NUM_THREADS={threads} '
'--config GDAL_CACHEMAX {max_memory}% '
'{tiles_vrt} {geotiff}'.format(**kwargs))
post_process(geotiff_path, output_path)
os.remove(geotiff_path)
if apply_smoothing:
median_smoothing(geotiff_path, output_path)
os.remove(geotiff_path)
else:
os.rename(geotiff_path, output_path)
if os.path.exists(geotiff_tmp_path):
if not keep_unfilled_copy:
@ -278,14 +282,14 @@ def compute_euclidean_map(geotiff_path, output_path, overwrite=False):
return output_path
def post_process(geotiff_path, output_path, smoothing_iterations=1):
def median_smoothing(geotiff_path, output_path, smoothing_iterations=1):
""" Apply median smoothing """
start = datetime.now()
if not os.path.exists(geotiff_path):
raise Exception('File %s does not exist!' % geotiff_path)
log.ODM_INFO('Starting post processing (smoothing)...')
log.ODM_INFO('Starting smoothing...')
with rasterio.open(geotiff_path) as img:
nodata = img.nodatavals[0]
@ -324,6 +328,6 @@ def post_process(geotiff_path, output_path, smoothing_iterations=1):
else:
imgout.write(arr.astype(dtype), 1)
log.ODM_INFO('Completed post processing to create %s in %s' % (os.path.relpath(output_path), datetime.now() - start))
log.ODM_INFO('Completed smoothing to create %s in %s' % (os.path.relpath(output_path), datetime.now() - start))
return output_path

Wyświetl plik

@ -7,7 +7,7 @@ from opendm import context
from scipy import signal, ndimage
import numpy as np
def create_25dmesh(inPointCloud, outMesh, dsm_radius=0.07, dsm_resolution=0.05, depth=8, samples=1, maxVertexCount=100000, verbose=False, available_cores=None, method='gridded'):
def create_25dmesh(inPointCloud, outMesh, dsm_radius=0.07, dsm_resolution=0.05, depth=8, samples=1, maxVertexCount=100000, verbose=False, available_cores=None, method='gridded', smooth_dsm=True):
# Create DSM from point cloud
# Create temporary directory
@ -31,7 +31,8 @@ def create_25dmesh(inPointCloud, outMesh, dsm_radius=0.07, dsm_resolution=0.05,
outdir=tmp_directory,
resolution=dsm_resolution,
verbose=verbose,
max_workers=available_cores
max_workers=available_cores,
apply_smoothing=smooth_dsm
)
if method == 'gridded':

Wyświetl plik

@ -68,7 +68,8 @@ class ODMeshingStage(types.ODM_Stage):
samples=self.params.get('samples'),
verbose=self.params.get('verbose'),
available_cores=args.max_concurrency,
method='poisson' if args.fast_orthophoto else 'gridded')
method='poisson' if args.fast_orthophoto else 'gridded',
smooth_dsm=not args.fast_orthophoto)
else:
log.ODM_WARNING('Found a valid ODM 2.5D Mesh file in: %s' %
tree.odm_25dmesh)