From c87c21dc03140bcca71b6c51d348b23a24cd84d5 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Wed, 24 Feb 2021 16:14:59 -0500 Subject: [PATCH] Cleanup, fixes --- VERSION | 2 +- opendm/remote.py | 3 +-- opendm/shots.py | 7 ++++--- opendm/types.py | 4 ++-- run.py | 1 - stages/dataset.py | 1 - stages/mvstex.py | 6 +++--- stages/odm_georeferencing.py | 38 +++++++++++++++++------------------- 8 files changed, 29 insertions(+), 33 deletions(-) diff --git a/VERSION b/VERSION index 35cee72d..79a61441 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.4.3 +2.4.4 diff --git a/opendm/remote.py b/opendm/remote.py index d520f653..8ab94002 100644 --- a/opendm/remote.py +++ b/opendm/remote.py @@ -505,8 +505,7 @@ class ToolchainTask(Task): "odm_orthophoto/odm_orthophoto_feathered.tif", "odm_dem", "odm_report", - "odm_georeferencing", - "odm_georeferencing_25d"]) + "odm_georeferencing"]) else: log.ODM_INFO("Already processed toolchain for %s" % submodel_name) handle_result() \ No newline at end of file diff --git a/opendm/shots.py b/opendm/shots.py index 4fbc285a..45e0f6f8 100644 --- a/opendm/shots.py +++ b/opendm/shots.py @@ -81,11 +81,12 @@ def get_geojson_shots_from_opensfm(reconstruction_file, utm_offset=None, pseudo_ else: # Rotation is already in the proper CRS rotation = shot['rotation'] + translation = shot['translation'] # Just add UTM offset - translation = [shot['translation'][0] + utm_offset[0], - shot['translation'][1] + utm_offset[1], - shot['translation'][2]] + trans_coords = [translation[0] + utm_offset[0], + translation[1] + utm_offset[1], + translation[2]] feats.append({ 'type': 'Feature', diff --git a/opendm/types.py b/opendm/types.py index 3d0ad6e7..abd9ced1 100644 --- a/opendm/types.py +++ b/opendm/types.py @@ -220,7 +220,6 @@ class ODM_Tree(object): self.odm_texturing = os.path.join(self.root_path, 'odm_texturing') self.odm_25dtexturing = os.path.join(self.root_path, 'odm_texturing_25d') self.odm_georeferencing = os.path.join(self.root_path, 'odm_georeferencing') - self.odm_25dgeoreferencing = os.path.join(self.root_path, 'odm_georeferencing_25d') self.odm_filterpoints = os.path.join(self.root_path, 'odm_filterpoints') self.odm_orthophoto = os.path.join(self.root_path, 'odm_orthophoto') self.odm_report = os.path.join(self.root_path, 'odm_report') @@ -260,7 +259,8 @@ class ODM_Tree(object): self.odm_geo_file = geo_file or io.find('geo.txt', self.root_path) self.odm_georeferencing_proj = 'proj.txt' - self.odm_georeferencing_model_txt_geo = 'odm_georeferencing_model_geo.txt' + self.odm_georeferencing_model_txt_geo = os.path.join( + self.odm_georeferencing, 'odm_georeferencing_model_geo.txt') self.odm_georeferencing_xyz_file = os.path.join( self.odm_georeferencing, 'odm_georeferenced_model.csv') self.odm_georeferencing_model_laz = os.path.join( diff --git a/run.py b/run.py index 44f8bb79..edf8c380 100755 --- a/run.py +++ b/run.py @@ -51,7 +51,6 @@ if __name__ == '__main__': os.system("rm -rf " + " ".join([ quote(os.path.join(args.project_path, "odm_georeferencing")), - quote(os.path.join(args.project_path, "odm_georeferencing_25d")), quote(os.path.join(args.project_path, "odm_meshing")), quote(os.path.join(args.project_path, "odm_orthophoto")), quote(os.path.join(args.project_path, "odm_dem")), diff --git a/stages/dataset.py b/stages/dataset.py index 9ef0b7be..ae503e07 100644 --- a/stages/dataset.py +++ b/stages/dataset.py @@ -84,7 +84,6 @@ class ODMLoadDatasetStage(types.ODM_Stage): # define paths and create working directories system.mkdir_p(tree.odm_georeferencing) - if not args.use_3dmesh: system.mkdir_p(tree.odm_25dgeoreferencing) log.ODM_INFO('Loading dataset from: %s' % images_dir) diff --git a/stages/mvstex.py b/stages/mvstex.py index 33c451f6..815bc1de 100644 --- a/stages/mvstex.py +++ b/stages/mvstex.py @@ -27,7 +27,7 @@ class ODMMvsTexStage(types.ODM_Stage): 'nadir': False, 'primary': primary, 'nvm_file': nvm_file, - 'labeling_file': os.path.join(tree.odm_texturing, "odm_textured_model_labeling.vec") if subdir else None + 'labeling_file': os.path.join(tree.odm_texturing, "odm_textured_model_geo_labeling.vec") if subdir else None }] if not args.use_3dmesh: @@ -37,7 +37,7 @@ class ODMMvsTexStage(types.ODM_Stage): 'nadir': True, 'primary': primary, 'nvm_file': nvm_file, - 'labeling_file': os.path.join(tree.odm_25dtexturing, "odm_textured_model_labeling.vec") if subdir else None + 'labeling_file': os.path.join(tree.odm_25dtexturing, "odm_textured_model_geo_labeling.vec") if subdir else None }] if reconstruction.multi_camera: @@ -80,7 +80,7 @@ class ODMMvsTexStage(types.ODM_Stage): # mvstex definitions kwargs = { 'bin': context.mvstex_path, - 'out_dir': os.path.join(r['out_dir'], "odm_textured_model"), + 'out_dir': os.path.join(r['out_dir'], "odm_textured_model_geo"), 'model': r['model'], 'dataTerm': self.params.get('data_term'), 'outlierRemovalType': self.params.get('outlier_rem_type'), diff --git a/stages/odm_georeferencing.py b/stages/odm_georeferencing.py index 89556359..d83b8c7c 100644 --- a/stages/odm_georeferencing.py +++ b/stages/odm_georeferencing.py @@ -16,29 +16,27 @@ class ODMGeoreferencingStage(types.ODM_Stage): tree = outputs['tree'] reconstruction = outputs['reconstruction'] - if io.file_exists(tree.odm_georeferencing_model_laz) or self.rerun(): - kwargs = { - 'inputFile': tree.filtered_point_cloud, - 'outputFile': tree.odm_georeferencing_model_laz, - } - cmd = ('pdal translate -i "{inputFile}" ' - '-o \"{outputFile}\" ' - 'ferry ' - '--filters.ferry.dimensions="views => UserData" ' - '--writers.las.compression="lazip" '.format(**kwargs)) + if not io.file_exists(tree.odm_georeferencing_model_laz) or self.rerun(): + cmd = ('pdal translate -i "%s" -o \"%s\"' % (tree.filtered_point_cloud, tree.odm_georeferencing_model_laz)) + stages = ["ferry"] + params = [ + '--filters.ferry.dimensions="views => UserData"', + '--writers.las.compression="lazip"', + ] if reconstruction.is_georeferenced(): log.ODM_INFO("Georeferencing point cloud") - kwargs = { - 'offset_x': reconstruction.georef.utm_east_offset, - 'offset_y': reconstruction.georef.utm_north_offset, - 'srs': reconstruction.georef.proj4() - } - system.run(cmd + '--writers.las.offset_x={offset_x} ' - '--writers.las.offset_y={offset_y} ' - '--writers.las.offset_z=0 ' - '--writers.las.a_srs="{srs}" '.format(**kwargs)) + stages.append("transformation") + params += [ + '--filters.transformation.matrix="1 0 0 %s 0 1 0 %s 0 0 1 0 0 0 0 1"' % reconstruction.georef.utm_offset(), + '--writers.las.offset_x=%s' % reconstruction.georef.utm_east_offset, + '--writers.las.offset_y=%s' % reconstruction.georef.utm_north_offset, + '--writers.las.offset_z=0', + '--writers.las.a_srs="%s"' % reconstruction.georef.proj4() + ] + + system.run(cmd + ' ' + ' '.join(stages) + ' ' + ' '.join(params)) self.update_progress(50) @@ -64,7 +62,7 @@ class ODMGeoreferencingStage(types.ODM_Stage): args.crop = 0 else: log.ODM_INFO("Converting point cloud (non-georeferenced)") - system.run(cmd) + system.run(cmd + ' ' + ' '.join(stages) + ' ' + ' '.join(params)) point_cloud.post_point_cloud_steps(args, tree) else: