cars 1.0.0rc2__cp312-cp312-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cars might be problematic. Click here for more details.
- cars/__init__.py +86 -0
- cars/applications/__init__.py +40 -0
- cars/applications/application.py +117 -0
- cars/applications/application_constants.py +29 -0
- cars/applications/application_template.py +146 -0
- cars/applications/auxiliary_filling/__init__.py +29 -0
- cars/applications/auxiliary_filling/abstract_auxiliary_filling_app.py +105 -0
- cars/applications/auxiliary_filling/auxiliary_filling_algo.py +475 -0
- cars/applications/auxiliary_filling/auxiliary_filling_from_sensors_app.py +632 -0
- cars/applications/auxiliary_filling/auxiliary_filling_wrappers.py +90 -0
- cars/applications/dem_generation/__init__.py +30 -0
- cars/applications/dem_generation/abstract_dem_generation_app.py +116 -0
- cars/applications/dem_generation/bulldozer_config/base_config.yaml +42 -0
- cars/applications/dem_generation/bulldozer_dem_app.py +641 -0
- cars/applications/dem_generation/bulldozer_memory.py +55 -0
- cars/applications/dem_generation/dem_generation_algo.py +107 -0
- cars/applications/dem_generation/dem_generation_constants.py +32 -0
- cars/applications/dem_generation/dem_generation_wrappers.py +323 -0
- cars/applications/dense_match_filling/__init__.py +30 -0
- cars/applications/dense_match_filling/abstract_dense_match_filling_app.py +242 -0
- cars/applications/dense_match_filling/fill_disp_algo.py +113 -0
- cars/applications/dense_match_filling/fill_disp_constants.py +39 -0
- cars/applications/dense_match_filling/fill_disp_wrappers.py +83 -0
- cars/applications/dense_match_filling/zero_padding_app.py +302 -0
- cars/applications/dense_matching/__init__.py +30 -0
- cars/applications/dense_matching/abstract_dense_matching_app.py +261 -0
- cars/applications/dense_matching/census_mccnn_sgm_app.py +1461 -0
- cars/applications/dense_matching/cpp/__init__.py +0 -0
- cars/applications/dense_matching/cpp/dense_matching_cpp.cp312-win_amd64.dll.a +0 -0
- cars/applications/dense_matching/cpp/dense_matching_cpp.cp312-win_amd64.pyd +0 -0
- cars/applications/dense_matching/cpp/dense_matching_cpp.py +94 -0
- cars/applications/dense_matching/cpp/includes/dense_matching.hpp +58 -0
- cars/applications/dense_matching/cpp/meson.build +9 -0
- cars/applications/dense_matching/cpp/src/bindings.cpp +13 -0
- cars/applications/dense_matching/cpp/src/dense_matching.cpp +207 -0
- cars/applications/dense_matching/dense_matching_algo.py +401 -0
- cars/applications/dense_matching/dense_matching_constants.py +89 -0
- cars/applications/dense_matching/dense_matching_wrappers.py +951 -0
- cars/applications/dense_matching/disparity_grid_algo.py +597 -0
- cars/applications/dense_matching/loaders/__init__.py +23 -0
- cars/applications/dense_matching/loaders/config_census_sgm_default.json +31 -0
- cars/applications/dense_matching/loaders/config_census_sgm_homogeneous.json +30 -0
- cars/applications/dense_matching/loaders/config_census_sgm_mountain_and_vegetation.json +30 -0
- cars/applications/dense_matching/loaders/config_census_sgm_shadow.json +30 -0
- cars/applications/dense_matching/loaders/config_census_sgm_sparse.json +36 -0
- cars/applications/dense_matching/loaders/config_census_sgm_urban.json +30 -0
- cars/applications/dense_matching/loaders/config_mapping.json +13 -0
- cars/applications/dense_matching/loaders/config_mccnn.json +28 -0
- cars/applications/dense_matching/loaders/global_land_cover_map.tif +0 -0
- cars/applications/dense_matching/loaders/pandora_loader.py +593 -0
- cars/applications/dsm_filling/__init__.py +32 -0
- cars/applications/dsm_filling/abstract_dsm_filling_app.py +101 -0
- cars/applications/dsm_filling/border_interpolation_app.py +278 -0
- cars/applications/dsm_filling/bulldozer_config/base_config.yaml +44 -0
- cars/applications/dsm_filling/bulldozer_filling_app.py +288 -0
- cars/applications/dsm_filling/exogenous_filling_app.py +341 -0
- cars/applications/dsm_merging/__init__.py +28 -0
- cars/applications/dsm_merging/abstract_dsm_merging_app.py +101 -0
- cars/applications/dsm_merging/weighted_fusion_app.py +639 -0
- cars/applications/grid_correction/__init__.py +30 -0
- cars/applications/grid_correction/abstract_grid_correction_app.py +103 -0
- cars/applications/grid_correction/grid_correction_app.py +557 -0
- cars/applications/grid_generation/__init__.py +30 -0
- cars/applications/grid_generation/abstract_grid_generation_app.py +142 -0
- cars/applications/grid_generation/epipolar_grid_generation_app.py +327 -0
- cars/applications/grid_generation/grid_generation_algo.py +388 -0
- cars/applications/grid_generation/grid_generation_constants.py +46 -0
- cars/applications/grid_generation/transform_grid.py +88 -0
- cars/applications/ground_truth_reprojection/__init__.py +30 -0
- cars/applications/ground_truth_reprojection/abstract_ground_truth_reprojection_app.py +137 -0
- cars/applications/ground_truth_reprojection/direct_localization_app.py +629 -0
- cars/applications/ground_truth_reprojection/ground_truth_reprojection_algo.py +275 -0
- cars/applications/point_cloud_outlier_removal/__init__.py +30 -0
- cars/applications/point_cloud_outlier_removal/abstract_outlier_removal_app.py +385 -0
- cars/applications/point_cloud_outlier_removal/outlier_removal_algo.py +392 -0
- cars/applications/point_cloud_outlier_removal/outlier_removal_constants.py +43 -0
- cars/applications/point_cloud_outlier_removal/small_components_app.py +522 -0
- cars/applications/point_cloud_outlier_removal/statistical_app.py +528 -0
- cars/applications/rasterization/__init__.py +30 -0
- cars/applications/rasterization/abstract_pc_rasterization_app.py +183 -0
- cars/applications/rasterization/rasterization_algo.py +534 -0
- cars/applications/rasterization/rasterization_constants.py +38 -0
- cars/applications/rasterization/rasterization_wrappers.py +639 -0
- cars/applications/rasterization/simple_gaussian_app.py +1152 -0
- cars/applications/resampling/__init__.py +28 -0
- cars/applications/resampling/abstract_resampling_app.py +187 -0
- cars/applications/resampling/bicubic_resampling_app.py +760 -0
- cars/applications/resampling/resampling_algo.py +590 -0
- cars/applications/resampling/resampling_constants.py +36 -0
- cars/applications/resampling/resampling_wrappers.py +309 -0
- cars/applications/sensors_subsampling/__init__.py +32 -0
- cars/applications/sensors_subsampling/abstract_subsampling_app.py +109 -0
- cars/applications/sensors_subsampling/rasterio_subsampling_app.py +420 -0
- cars/applications/sensors_subsampling/subsampling_algo.py +108 -0
- cars/applications/sparse_matching/__init__.py +30 -0
- cars/applications/sparse_matching/abstract_sparse_matching_app.py +599 -0
- cars/applications/sparse_matching/sift_app.py +724 -0
- cars/applications/sparse_matching/sparse_matching_algo.py +360 -0
- cars/applications/sparse_matching/sparse_matching_constants.py +66 -0
- cars/applications/sparse_matching/sparse_matching_wrappers.py +282 -0
- cars/applications/triangulation/__init__.py +32 -0
- cars/applications/triangulation/abstract_triangulation_app.py +227 -0
- cars/applications/triangulation/line_of_sight_intersection_app.py +1243 -0
- cars/applications/triangulation/pc_transform.py +552 -0
- cars/applications/triangulation/triangulation_algo.py +371 -0
- cars/applications/triangulation/triangulation_constants.py +38 -0
- cars/applications/triangulation/triangulation_wrappers.py +259 -0
- cars/bundleadjustment.py +750 -0
- cars/cars.py +179 -0
- cars/conf/__init__.py +23 -0
- cars/conf/geoid/egm96.grd +0 -0
- cars/conf/geoid/egm96.grd.hdr +15 -0
- cars/conf/input_parameters.py +156 -0
- cars/conf/mask_cst.py +35 -0
- cars/core/__init__.py +23 -0
- cars/core/cars_logging.py +402 -0
- cars/core/constants.py +191 -0
- cars/core/constants_disparity.py +50 -0
- cars/core/datasets.py +140 -0
- cars/core/geometry/__init__.py +27 -0
- cars/core/geometry/abstract_geometry.py +1119 -0
- cars/core/geometry/shareloc_geometry.py +598 -0
- cars/core/inputs.py +568 -0
- cars/core/outputs.py +176 -0
- cars/core/preprocessing.py +722 -0
- cars/core/projection.py +843 -0
- cars/core/roi_tools.py +215 -0
- cars/core/tiling.py +774 -0
- cars/core/utils.py +164 -0
- cars/data_structures/__init__.py +23 -0
- cars/data_structures/cars_dataset.py +1544 -0
- cars/data_structures/cars_dict.py +74 -0
- cars/data_structures/corresponding_tiles_tools.py +186 -0
- cars/data_structures/dataframe_converter.py +185 -0
- cars/data_structures/format_transformation.py +297 -0
- cars/devibrate.py +689 -0
- cars/extractroi.py +264 -0
- cars/orchestrator/__init__.py +23 -0
- cars/orchestrator/achievement_tracker.py +125 -0
- cars/orchestrator/cluster/__init__.py +37 -0
- cars/orchestrator/cluster/abstract_cluster.py +250 -0
- cars/orchestrator/cluster/abstract_dask_cluster.py +381 -0
- cars/orchestrator/cluster/dask_cluster_tools.py +103 -0
- cars/orchestrator/cluster/dask_config/README.md +94 -0
- cars/orchestrator/cluster/dask_config/dask.yaml +21 -0
- cars/orchestrator/cluster/dask_config/distributed.yaml +70 -0
- cars/orchestrator/cluster/dask_config/jobqueue.yaml +26 -0
- cars/orchestrator/cluster/dask_config/reference_confs/dask-schema.yaml +137 -0
- cars/orchestrator/cluster/dask_config/reference_confs/dask.yaml +26 -0
- cars/orchestrator/cluster/dask_config/reference_confs/distributed-schema.yaml +1009 -0
- cars/orchestrator/cluster/dask_config/reference_confs/distributed.yaml +273 -0
- cars/orchestrator/cluster/dask_config/reference_confs/jobqueue.yaml +212 -0
- cars/orchestrator/cluster/dask_jobqueue_utils.py +204 -0
- cars/orchestrator/cluster/local_dask_cluster.py +116 -0
- cars/orchestrator/cluster/log_wrapper.py +728 -0
- cars/orchestrator/cluster/mp_cluster/__init__.py +27 -0
- cars/orchestrator/cluster/mp_cluster/mp_factorizer.py +212 -0
- cars/orchestrator/cluster/mp_cluster/mp_objects.py +535 -0
- cars/orchestrator/cluster/mp_cluster/mp_tools.py +93 -0
- cars/orchestrator/cluster/mp_cluster/mp_wrapper.py +505 -0
- cars/orchestrator/cluster/mp_cluster/multiprocessing_cluster.py +986 -0
- cars/orchestrator/cluster/mp_cluster/multiprocessing_profiler.py +399 -0
- cars/orchestrator/cluster/pbs_dask_cluster.py +207 -0
- cars/orchestrator/cluster/sequential_cluster.py +139 -0
- cars/orchestrator/cluster/slurm_dask_cluster.py +234 -0
- cars/orchestrator/memory_tools.py +47 -0
- cars/orchestrator/orchestrator.py +755 -0
- cars/orchestrator/orchestrator_constants.py +29 -0
- cars/orchestrator/registry/__init__.py +23 -0
- cars/orchestrator/registry/abstract_registry.py +143 -0
- cars/orchestrator/registry/compute_registry.py +106 -0
- cars/orchestrator/registry/id_generator.py +116 -0
- cars/orchestrator/registry/replacer_registry.py +213 -0
- cars/orchestrator/registry/saver_registry.py +363 -0
- cars/orchestrator/registry/unseen_registry.py +118 -0
- cars/orchestrator/tiles_profiler.py +279 -0
- cars/pipelines/__init__.py +26 -0
- cars/pipelines/conf_resolution/conf_final_resolution.yaml +5 -0
- cars/pipelines/conf_resolution/conf_first_resolution.yaml +4 -0
- cars/pipelines/conf_resolution/conf_intermediate_resolution.yaml +2 -0
- cars/pipelines/default/__init__.py +26 -0
- cars/pipelines/default/default_pipeline.py +1088 -0
- cars/pipelines/filling/__init__.py +26 -0
- cars/pipelines/filling/filling.py +981 -0
- cars/pipelines/formatting/__init__.py +26 -0
- cars/pipelines/formatting/formatting.py +186 -0
- cars/pipelines/merging/__init__.py +26 -0
- cars/pipelines/merging/merging.py +439 -0
- cars/pipelines/parameters/__init__.py +0 -0
- cars/pipelines/parameters/advanced_parameters.py +256 -0
- cars/pipelines/parameters/advanced_parameters_constants.py +68 -0
- cars/pipelines/parameters/application_parameters.py +72 -0
- cars/pipelines/parameters/depth_map_inputs.py +0 -0
- cars/pipelines/parameters/dsm_inputs.py +349 -0
- cars/pipelines/parameters/dsm_inputs_constants.py +25 -0
- cars/pipelines/parameters/output_constants.py +52 -0
- cars/pipelines/parameters/output_parameters.py +438 -0
- cars/pipelines/parameters/sensor_inputs.py +859 -0
- cars/pipelines/parameters/sensor_inputs_constants.py +51 -0
- cars/pipelines/parameters/sensor_loaders/__init__.py +29 -0
- cars/pipelines/parameters/sensor_loaders/basic_classif_loader.py +86 -0
- cars/pipelines/parameters/sensor_loaders/basic_image_loader.py +98 -0
- cars/pipelines/parameters/sensor_loaders/pivot_classif_loader.py +90 -0
- cars/pipelines/parameters/sensor_loaders/pivot_image_loader.py +105 -0
- cars/pipelines/parameters/sensor_loaders/sensor_loader.py +93 -0
- cars/pipelines/parameters/sensor_loaders/sensor_loader_template.py +71 -0
- cars/pipelines/parameters/sensor_loaders/slurp_classif_loader.py +86 -0
- cars/pipelines/pipeline.py +119 -0
- cars/pipelines/pipeline_constants.py +38 -0
- cars/pipelines/pipeline_template.py +135 -0
- cars/pipelines/subsampling/__init__.py +26 -0
- cars/pipelines/subsampling/subsampling.py +358 -0
- cars/pipelines/surface_modeling/__init__.py +26 -0
- cars/pipelines/surface_modeling/surface_modeling.py +2098 -0
- cars/pipelines/tie_points/__init__.py +26 -0
- cars/pipelines/tie_points/tie_points.py +536 -0
- cars/starter.py +167 -0
- cars-1.0.0rc2.dist-info/DELVEWHEEL +2 -0
- cars-1.0.0rc2.dist-info/METADATA +289 -0
- cars-1.0.0rc2.dist-info/RECORD +225 -0
- cars-1.0.0rc2.dist-info/WHEEL +4 -0
- cars-1.0.0rc2.dist-info/entry_points.txt +8 -0
- cars.libs/libgcc_s_seh-1-b2494fcbd4d80cf2c98fdd5261f6d850.dll +0 -0
- cars.libs/libstdc++-6-e9b0d12ae0e9555bbae55e8dfd08c3f7.dll +0 -0
- cars.libs/libwinpthread-1-7882d1b093714ccdfaf4e0789a817792.dll +0 -0
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# coding: utf8
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2020 Centre National d'Etudes Spatiales (CNES).
|
|
5
|
+
#
|
|
6
|
+
# This file is part of CARS
|
|
7
|
+
# (see https://github.com/CNES/cars).
|
|
8
|
+
#
|
|
9
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
# you may not use this file except in compliance with the License.
|
|
11
|
+
# You may obtain a copy of the License at
|
|
12
|
+
#
|
|
13
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
#
|
|
15
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
# pylint: disable=too-many-lines
|
|
21
|
+
"""
|
|
22
|
+
CARS dsm inputs
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
import logging
|
|
26
|
+
|
|
27
|
+
import numpy as np
|
|
28
|
+
from json_checker import Checker, Or
|
|
29
|
+
|
|
30
|
+
# CARS imports
|
|
31
|
+
import cars.pipelines.parameters.dsm_inputs_constants as dsm_cst
|
|
32
|
+
from cars.core import constants as cst
|
|
33
|
+
from cars.core import inputs
|
|
34
|
+
from cars.core.geometry.abstract_geometry import AbstractGeometry
|
|
35
|
+
from cars.core.utils import make_relative_path_absolute
|
|
36
|
+
from cars.pipelines.parameters import sensor_inputs as sens_inp
|
|
37
|
+
from cars.pipelines.parameters import sensor_inputs_constants as sens_cst
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def check_dsm_inputs(conf, config_dir=None):
|
|
41
|
+
"""
|
|
42
|
+
Check the inputs given
|
|
43
|
+
|
|
44
|
+
:param conf: configuration of inputs
|
|
45
|
+
:type conf: dict
|
|
46
|
+
:param config_dir: directory of used json/yaml, if
|
|
47
|
+
user filled paths with relative paths
|
|
48
|
+
:type config_dir: str
|
|
49
|
+
|
|
50
|
+
:return: overloader inputs
|
|
51
|
+
:rtype: dict
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
overloaded_conf = {}
|
|
55
|
+
|
|
56
|
+
# Overload some optional parameters
|
|
57
|
+
overloaded_conf[dsm_cst.DSMS] = {}
|
|
58
|
+
|
|
59
|
+
overloaded_conf[sens_cst.ROI] = conf.get(sens_cst.ROI, None)
|
|
60
|
+
|
|
61
|
+
overloaded_conf[sens_cst.INITIAL_ELEVATION] = (
|
|
62
|
+
sens_inp.get_initial_elevation(
|
|
63
|
+
conf.get(sens_cst.INITIAL_ELEVATION, None)
|
|
64
|
+
)
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
overloaded_conf[sens_cst.SENSORS] = conf.get(sens_cst.SENSORS, None)
|
|
68
|
+
|
|
69
|
+
overloaded_conf[sens_cst.PAIRING] = conf.get(sens_cst.PAIRING, None)
|
|
70
|
+
|
|
71
|
+
# Validate inputs
|
|
72
|
+
inputs_schema = {
|
|
73
|
+
dsm_cst.DSMS: dict,
|
|
74
|
+
sens_cst.ROI: Or(str, dict, None),
|
|
75
|
+
sens_cst.INITIAL_ELEVATION: Or(dict, None),
|
|
76
|
+
sens_cst.SENSORS: Or(dict, None),
|
|
77
|
+
sens_cst.PAIRING: Or([[str]], None),
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
checker_inputs = Checker(inputs_schema)
|
|
81
|
+
checker_inputs.validate(overloaded_conf)
|
|
82
|
+
|
|
83
|
+
# Validate depth maps
|
|
84
|
+
|
|
85
|
+
dsm_schema = {
|
|
86
|
+
cst.DSM_CLASSIF: Or(str, None),
|
|
87
|
+
cst.DSM_ALT: Or(str, None),
|
|
88
|
+
cst.DSM_ALT_INF: Or(str, None),
|
|
89
|
+
cst.DSM_ALT_SUP: Or(str, None),
|
|
90
|
+
cst.DSM_WEIGHTS_SUM: Or(str, None),
|
|
91
|
+
cst.DSM_MSK: Or(str, None),
|
|
92
|
+
cst.DSM_NB_PTS: Or(str, None),
|
|
93
|
+
cst.DSM_NB_PTS_IN_CELL: Or(str, None),
|
|
94
|
+
cst.DSM_MEAN: Or(str, None),
|
|
95
|
+
cst.DSM_STD_DEV: Or(str, None),
|
|
96
|
+
cst.DSM_INF_MEAN: Or(str, None),
|
|
97
|
+
cst.DSM_INF_STD: Or(str, None),
|
|
98
|
+
cst.DSM_SUP_MEAN: Or(str, None),
|
|
99
|
+
cst.DSM_SUP_STD: Or(str, None),
|
|
100
|
+
cst.DSM_AMBIGUITY: Or(str, None),
|
|
101
|
+
cst.DSM_PERFORMANCE_MAP: Or(str, None),
|
|
102
|
+
cst.DSM_SOURCE_PC: Or(str, None),
|
|
103
|
+
cst.DSM_FILLING: Or(str, None),
|
|
104
|
+
cst.DSM_COLOR: Or(str, None),
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
checker_pc = Checker(dsm_schema)
|
|
108
|
+
for dsm_key in conf[dsm_cst.DSMS]:
|
|
109
|
+
# Get depth maps with default
|
|
110
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key] = {}
|
|
111
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_ALT] = conf[
|
|
112
|
+
dsm_cst.DSMS
|
|
113
|
+
][dsm_key].get("dsm", None)
|
|
114
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_CLASSIF] = conf[
|
|
115
|
+
dsm_cst.DSMS
|
|
116
|
+
][dsm_key].get("merging_classification", None)
|
|
117
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_COLOR] = conf[
|
|
118
|
+
dsm_cst.DSMS
|
|
119
|
+
][dsm_key].get("image", None)
|
|
120
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_MSK] = conf[
|
|
121
|
+
dsm_cst.DSMS
|
|
122
|
+
][dsm_key].get("mask", None)
|
|
123
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_ALT_INF] = conf[
|
|
124
|
+
dsm_cst.DSMS
|
|
125
|
+
][dsm_key].get("dsm_inf", None)
|
|
126
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_ALT_SUP] = conf[
|
|
127
|
+
dsm_cst.DSMS
|
|
128
|
+
][dsm_key].get("dsm_sup", None)
|
|
129
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_WEIGHTS_SUM] = conf[
|
|
130
|
+
dsm_cst.DSMS
|
|
131
|
+
][dsm_key].get("weights", None)
|
|
132
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_NB_PTS] = conf[
|
|
133
|
+
dsm_cst.DSMS
|
|
134
|
+
][dsm_key].get("dsm_n_pts", None)
|
|
135
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_NB_PTS_IN_CELL] = conf[
|
|
136
|
+
dsm_cst.DSMS
|
|
137
|
+
][dsm_key].get("dsm_pts_in_cell", None)
|
|
138
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_MEAN] = conf[
|
|
139
|
+
dsm_cst.DSMS
|
|
140
|
+
][dsm_key].get("dsm_mean", None)
|
|
141
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_STD_DEV] = conf[
|
|
142
|
+
dsm_cst.DSMS
|
|
143
|
+
][dsm_key].get("dsm_std", None)
|
|
144
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_INF_MEAN] = conf[
|
|
145
|
+
dsm_cst.DSMS
|
|
146
|
+
][dsm_key].get("dsm_inf_mean", None)
|
|
147
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_INF_STD] = conf[
|
|
148
|
+
dsm_cst.DSMS
|
|
149
|
+
][dsm_key].get("dsm_inf_std", None)
|
|
150
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_SUP_MEAN] = conf[
|
|
151
|
+
dsm_cst.DSMS
|
|
152
|
+
][dsm_key].get("dsm_sup_mean", None)
|
|
153
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_SUP_STD] = conf[
|
|
154
|
+
dsm_cst.DSMS
|
|
155
|
+
][dsm_key].get("dsm_sup_std", None)
|
|
156
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_AMBIGUITY] = conf[
|
|
157
|
+
dsm_cst.DSMS
|
|
158
|
+
][dsm_key].get("ambiguity", None)
|
|
159
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_PERFORMANCE_MAP] = conf[
|
|
160
|
+
dsm_cst.DSMS
|
|
161
|
+
][dsm_key].get("performance_map", None)
|
|
162
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_SOURCE_PC] = conf[
|
|
163
|
+
dsm_cst.DSMS
|
|
164
|
+
][dsm_key].get("contributing_pair", None)
|
|
165
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_FILLING] = conf[
|
|
166
|
+
dsm_cst.DSMS
|
|
167
|
+
][dsm_key].get("merging_filling", None)
|
|
168
|
+
|
|
169
|
+
# validate
|
|
170
|
+
checker_pc.validate(overloaded_conf[dsm_cst.DSMS][dsm_key])
|
|
171
|
+
|
|
172
|
+
# Modify to absolute path
|
|
173
|
+
if config_dir is not None:
|
|
174
|
+
modify_to_absolute_path(config_dir, overloaded_conf)
|
|
175
|
+
else:
|
|
176
|
+
logging.debug(
|
|
177
|
+
"path of config file was not given,"
|
|
178
|
+
"relative path are not transformed to absolute paths"
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
for dsm_key in conf[dsm_cst.DSMS]:
|
|
182
|
+
# check sizes
|
|
183
|
+
check_input_size(
|
|
184
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.INDEX_DSM_ALT],
|
|
185
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.DSM_CLASSIF],
|
|
186
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.INDEX_DSM_COLOR],
|
|
187
|
+
overloaded_conf[dsm_cst.DSMS][dsm_key][cst.INDEX_DSM_MASK],
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
# Check srtm dir
|
|
191
|
+
sens_inp.check_srtm(
|
|
192
|
+
overloaded_conf[sens_cst.INITIAL_ELEVATION][sens_cst.DEM_PATH]
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
check_phasing(conf[dsm_cst.DSMS])
|
|
196
|
+
|
|
197
|
+
overloaded_conf[sens_cst.LOADERS] = sens_inp.check_loaders(
|
|
198
|
+
conf.get(sens_cst.LOADERS, {})
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
classif_loader = overloaded_conf[sens_cst.LOADERS][
|
|
202
|
+
sens_cst.INPUT_CLASSIFICATION
|
|
203
|
+
]
|
|
204
|
+
|
|
205
|
+
overloaded_conf[sens_cst.FILLING] = sens_inp.check_filling(
|
|
206
|
+
conf.get(sens_cst.FILLING, {}), classif_loader
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
if sens_cst.SENSORS in conf and conf[sens_cst.SENSORS] is not None:
|
|
210
|
+
sens_inp.check_sensors(conf, overloaded_conf, config_dir)
|
|
211
|
+
|
|
212
|
+
return overloaded_conf
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def check_geometry_plugin(conf_inputs, conf_geom_plugin):
|
|
216
|
+
"""
|
|
217
|
+
Check the geometry plugin with inputs
|
|
218
|
+
:param conf_geom_plugin: name of geometry plugin
|
|
219
|
+
:type conf_geom_plugin: str
|
|
220
|
+
:param conf_inputs: checked configuration of inputs
|
|
221
|
+
:type conf_inputs: type
|
|
222
|
+
|
|
223
|
+
:return: geometry plugin with dem
|
|
224
|
+
"""
|
|
225
|
+
if conf_geom_plugin is None:
|
|
226
|
+
conf_geom_plugin = "SharelocGeometry"
|
|
227
|
+
|
|
228
|
+
dem_path = conf_inputs[sens_cst.INITIAL_ELEVATION][sens_cst.DEM_PATH]
|
|
229
|
+
|
|
230
|
+
if dem_path is None:
|
|
231
|
+
return conf_geom_plugin, None
|
|
232
|
+
|
|
233
|
+
# Initialize a geometry plugin with elevation information
|
|
234
|
+
geom_plugin_with_dem_and_geoid = (
|
|
235
|
+
AbstractGeometry( # pylint: disable=abstract-class-instantiated
|
|
236
|
+
conf_geom_plugin,
|
|
237
|
+
dem=dem_path,
|
|
238
|
+
geoid=conf_inputs[sens_cst.INITIAL_ELEVATION][sens_cst.GEOID],
|
|
239
|
+
default_alt=sens_cst.CARS_DEFAULT_ALT,
|
|
240
|
+
)
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
return conf_geom_plugin, geom_plugin_with_dem_and_geoid
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
def check_input_size(dsm, classif, color, mask):
|
|
247
|
+
"""
|
|
248
|
+
Check dsm, mask, color, classif given
|
|
249
|
+
|
|
250
|
+
Images must have same size
|
|
251
|
+
|
|
252
|
+
:param dsm: phased dsm path
|
|
253
|
+
:type dsm: str
|
|
254
|
+
:param classif: classif path
|
|
255
|
+
:type classif: str
|
|
256
|
+
:param color: color path
|
|
257
|
+
:type color: str
|
|
258
|
+
:param mask: mask path
|
|
259
|
+
:type mask: str
|
|
260
|
+
"""
|
|
261
|
+
|
|
262
|
+
if inputs.rasterio_get_nb_bands(dsm) != 1:
|
|
263
|
+
raise RuntimeError("{} is not mono-band image".format(dsm))
|
|
264
|
+
|
|
265
|
+
for path in [mask, color, classif]:
|
|
266
|
+
if path is not None:
|
|
267
|
+
if inputs.rasterio_get_size(dsm) != inputs.rasterio_get_size(path):
|
|
268
|
+
raise RuntimeError(
|
|
269
|
+
"The image {} and {} "
|
|
270
|
+
"do not have the same size".format(dsm, path)
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
def modify_to_absolute_path(config_dir, overloaded_conf):
|
|
275
|
+
"""
|
|
276
|
+
Modify input file path to absolute path
|
|
277
|
+
|
|
278
|
+
:param config_dir: directory of the json configuration
|
|
279
|
+
:type config_dir: str
|
|
280
|
+
:param overloaded_conf: overloaded configuration json
|
|
281
|
+
:dict overloaded_conf: dict
|
|
282
|
+
"""
|
|
283
|
+
for dsm_key in overloaded_conf[dsm_cst.DSMS]:
|
|
284
|
+
dsms = overloaded_conf[dsm_cst.DSMS][dsm_key]
|
|
285
|
+
for tag in [
|
|
286
|
+
cst.INDEX_DSM_ALT,
|
|
287
|
+
cst.DSM_CLASSIF,
|
|
288
|
+
cst.INDEX_DSM_COLOR,
|
|
289
|
+
cst.INDEX_DSM_MASK,
|
|
290
|
+
cst.DSM_FILLING,
|
|
291
|
+
]:
|
|
292
|
+
if dsms[tag] is not None:
|
|
293
|
+
dsms[tag] = make_relative_path_absolute(dsms[tag], config_dir)
|
|
294
|
+
|
|
295
|
+
if overloaded_conf[sens_cst.ROI] is not None:
|
|
296
|
+
if isinstance(overloaded_conf[sens_cst.ROI], str):
|
|
297
|
+
overloaded_conf[sens_cst.ROI] = make_relative_path_absolute(
|
|
298
|
+
overloaded_conf[sens_cst.ROI], config_dir
|
|
299
|
+
)
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
def check_phasing(dsm_dict):
|
|
303
|
+
"""
|
|
304
|
+
Check if the dsm are phased, and if resolution and epsg code are equivalent
|
|
305
|
+
|
|
306
|
+
:param dsm_dict: list of phased dsm
|
|
307
|
+
:type dsm_dict: dict
|
|
308
|
+
"""
|
|
309
|
+
|
|
310
|
+
ref_key = next(iter(dsm_dict))
|
|
311
|
+
ref_epsg = inputs.rasterio_get_epsg_code(dsm_dict[ref_key]["dsm"])
|
|
312
|
+
ref_profile = inputs.rasterio_get_profile(dsm_dict[ref_key]["dsm"])
|
|
313
|
+
ref_transform = list(ref_profile["transform"])
|
|
314
|
+
ref_res_x = ref_transform[0]
|
|
315
|
+
ref_res_y = ref_transform[4]
|
|
316
|
+
ref_bounds = inputs.rasterio_get_bounds(dsm_dict[ref_key]["dsm"])
|
|
317
|
+
|
|
318
|
+
for dsm_key in dsm_dict:
|
|
319
|
+
if dsm_key == ref_key:
|
|
320
|
+
continue
|
|
321
|
+
|
|
322
|
+
epsg = inputs.rasterio_get_epsg_code(dsm_dict[dsm_key]["dsm"])
|
|
323
|
+
profile = inputs.rasterio_get_profile(dsm_dict[ref_key]["dsm"])
|
|
324
|
+
transform = list(profile["transform"])
|
|
325
|
+
res_x = transform[0]
|
|
326
|
+
res_y = transform[4]
|
|
327
|
+
bounds = inputs.rasterio_get_bounds(dsm_dict[dsm_key]["dsm"])
|
|
328
|
+
|
|
329
|
+
if epsg != ref_epsg:
|
|
330
|
+
raise RuntimeError(
|
|
331
|
+
f"EPSG mismatch: DSM {dsm_key} has EPSG {epsg}, "
|
|
332
|
+
f"expected {ref_epsg}."
|
|
333
|
+
)
|
|
334
|
+
|
|
335
|
+
if ref_res_x != res_x or ref_res_y != res_y:
|
|
336
|
+
raise RuntimeError(
|
|
337
|
+
f"Resolution mismatch: DSM {dsm_key} has resolution "
|
|
338
|
+
f"{(res_x, res_y)}, expected {(ref_res_x, ref_res_y)}."
|
|
339
|
+
)
|
|
340
|
+
|
|
341
|
+
# Compare the left_bottom corner
|
|
342
|
+
diff = ref_bounds[0:2] - bounds[0:2]
|
|
343
|
+
resolution = np.array([ref_res_x, -ref_res_y])
|
|
344
|
+
res_ratio = diff / resolution
|
|
345
|
+
|
|
346
|
+
if ~np.all(np.equal(res_ratio, res_ratio.astype(int))) and ~np.all(
|
|
347
|
+
np.equal(1 / res_ratio, (1 / res_ratio).astype(int))
|
|
348
|
+
):
|
|
349
|
+
raise RuntimeError(f"DSM {dsm_key} and {ref_key} are not phased")
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# coding: utf8
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2020 Centre National d'Etudes Spatiales (CNES).
|
|
5
|
+
#
|
|
6
|
+
# This file is part of CARS
|
|
7
|
+
# (see https://github.com/CNES/cars).
|
|
8
|
+
#
|
|
9
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
# you may not use this file except in compliance with the License.
|
|
11
|
+
# You may obtain a copy of the License at
|
|
12
|
+
#
|
|
13
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
#
|
|
15
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
#
|
|
21
|
+
"""
|
|
22
|
+
CARS phased dsms to full resolution dsm pipeline constants file
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
DSMS = "dsms"
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# coding: utf8
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2020 Centre National d'Etudes Spatiales (CNES).
|
|
5
|
+
#
|
|
6
|
+
# This file is part of CARS
|
|
7
|
+
# (see https://github.com/CNES/cars).
|
|
8
|
+
#
|
|
9
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
# you may not use this file except in compliance with the License.
|
|
11
|
+
# You may obtain a copy of the License at
|
|
12
|
+
#
|
|
13
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
#
|
|
15
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
"""
|
|
23
|
+
This module contains the output constants
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
# Pipeline output keys
|
|
27
|
+
OUT_DIRECTORY = "directory"
|
|
28
|
+
PRODUCT_LEVEL = "product_level"
|
|
29
|
+
INFO_FILENAME = "metadata.yaml"
|
|
30
|
+
OUT_GEOID = "geoid"
|
|
31
|
+
EPSG = "epsg"
|
|
32
|
+
RESOLUTION = "resolution"
|
|
33
|
+
SAVE_BY_PAIR = "save_by_pair"
|
|
34
|
+
AUXILIARY = "auxiliary"
|
|
35
|
+
|
|
36
|
+
# Auxiliary keys
|
|
37
|
+
AUX_IMAGE = "image"
|
|
38
|
+
AUX_WEIGHTS = "weights"
|
|
39
|
+
AUX_MASK = "mask"
|
|
40
|
+
AUX_CLASSIFICATION = "classification"
|
|
41
|
+
AUX_PERFORMANCE_MAP = "performance_map"
|
|
42
|
+
AUX_FILLING = "filling"
|
|
43
|
+
AUX_CONTRIBUTING_PAIR = "contributing_pair"
|
|
44
|
+
AUX_AMBIGUITY = "ambiguity"
|
|
45
|
+
|
|
46
|
+
AUX_DEM_MIN = "dem_min"
|
|
47
|
+
AUX_DEM_MAX = "dem_max"
|
|
48
|
+
AUX_DEM_MEDIAN = "dem_median"
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
# Output tree constants
|
|
52
|
+
DSM_DIRECTORY = "dsm"
|