kopia lustrzana https://github.com/OpenDroneMap/ODM
Merge pull request #1760 from pierotofy/fastcut
Skip feathered raster generation when possiblepull/1670/head v3.5.1
commit
ae6726e536
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
3.5.0
|
3.5.1
|
||||||
|
|
|
@ -793,3 +793,12 @@ def get_all_submodel_paths(submodels_path, *all_paths):
|
||||||
result.append([os.path.join(submodels_path, f, ap) for ap in all_paths])
|
result.append([os.path.join(submodels_path, f, ap) for ap in all_paths])
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def is_submodel(opensfm_root):
|
||||||
|
# A bit hackish, but works without introducing additional markers / flags
|
||||||
|
# Look at the path of the opensfm directory and see if "submodel_" is part of it
|
||||||
|
parts = os.path.abspath(opensfm_root).split(os.path.sep)
|
||||||
|
|
||||||
|
return (len(parts) >= 2 and parts[-2][:9] == "submodel_") or \
|
||||||
|
os.path.isfile(os.path.join(opensfm_root, "split_merge_stop_at_reconstruction.txt")) or \
|
||||||
|
os.path.isfile(os.path.join(opensfm_root, "features", "empty"))
|
|
@ -7,6 +7,7 @@ from opendm import context
|
||||||
from opendm import types
|
from opendm import types
|
||||||
from opendm import gsd
|
from opendm import gsd
|
||||||
from opendm import orthophoto
|
from opendm import orthophoto
|
||||||
|
from opendm.osfm import is_submodel
|
||||||
from opendm.concurrency import get_max_memory_mb
|
from opendm.concurrency import get_max_memory_mb
|
||||||
from opendm.cutline import compute_cutline
|
from opendm.cutline import compute_cutline
|
||||||
from opendm.utils import double_quote
|
from opendm.utils import double_quote
|
||||||
|
@ -114,6 +115,7 @@ class ODMOrthoPhotoStage(types.ODM_Stage):
|
||||||
|
|
||||||
# Cutline computation, before cropping
|
# Cutline computation, before cropping
|
||||||
# We want to use the full orthophoto, not the cropped one.
|
# We want to use the full orthophoto, not the cropped one.
|
||||||
|
submodel_run = is_submodel(tree.opensfm)
|
||||||
if args.orthophoto_cutline:
|
if args.orthophoto_cutline:
|
||||||
cutline_file = os.path.join(tree.odm_orthophoto, "cutline.gpkg")
|
cutline_file = os.path.join(tree.odm_orthophoto, "cutline.gpkg")
|
||||||
|
|
||||||
|
@ -122,15 +124,18 @@ class ODMOrthoPhotoStage(types.ODM_Stage):
|
||||||
cutline_file,
|
cutline_file,
|
||||||
args.max_concurrency,
|
args.max_concurrency,
|
||||||
scale=0.25)
|
scale=0.25)
|
||||||
|
|
||||||
orthophoto.compute_mask_raster(tree.odm_orthophoto_tif, cutline_file,
|
if submodel_run:
|
||||||
os.path.join(tree.odm_orthophoto, "odm_orthophoto_cut.tif"),
|
orthophoto.compute_mask_raster(tree.odm_orthophoto_tif, cutline_file,
|
||||||
blend_distance=20, only_max_coords_feature=True)
|
os.path.join(tree.odm_orthophoto, "odm_orthophoto_cut.tif"),
|
||||||
|
blend_distance=20, only_max_coords_feature=True)
|
||||||
|
else:
|
||||||
|
log.ODM_INFO("Not a submodel run, skipping mask raster generation")
|
||||||
|
|
||||||
orthophoto.post_orthophoto_steps(args, bounds_file_path, tree.odm_orthophoto_tif, tree.orthophoto_tiles, resolution)
|
orthophoto.post_orthophoto_steps(args, bounds_file_path, tree.odm_orthophoto_tif, tree.orthophoto_tiles, resolution)
|
||||||
|
|
||||||
# Generate feathered orthophoto also
|
# Generate feathered orthophoto also
|
||||||
if args.orthophoto_cutline:
|
if args.orthophoto_cutline and submodel_run:
|
||||||
orthophoto.feather_raster(tree.odm_orthophoto_tif,
|
orthophoto.feather_raster(tree.odm_orthophoto_tif,
|
||||||
os.path.join(tree.odm_orthophoto, "odm_orthophoto_feathered.tif"),
|
os.path.join(tree.odm_orthophoto, "odm_orthophoto_feathered.tif"),
|
||||||
blend_distance=20
|
blend_distance=20
|
||||||
|
|
Ładowanie…
Reference in New Issue