cars 1.0.0rc1__cp313-cp313-musllinux_1_2_i686.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 +74 -0
- cars/applications/__init__.py +37 -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 +104 -0
- cars/applications/auxiliary_filling/auxiliary_filling_algo.py +475 -0
- cars/applications/auxiliary_filling/auxiliary_filling_from_sensors_app.py +630 -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 +655 -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 +1460 -0
- cars/applications/dense_matching/cpp/__init__.py +0 -0
- cars/applications/dense_matching/cpp/dense_matching_cpp.cpython-313-i386-linux-musl.so +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 +588 -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 +270 -0
- cars/applications/dsm_filling/bulldozer_config/base_config.yaml +44 -0
- cars/applications/dsm_filling/bulldozer_filling_app.py +279 -0
- cars/applications/dsm_filling/exogenous_filling_app.py +333 -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_correction_app.py +496 -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 +527 -0
- cars/applications/point_cloud_outlier_removal/statistical_app.py +531 -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 +634 -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 +762 -0
- cars/applications/resampling/resampling_algo.py +614 -0
- cars/applications/resampling/resampling_constants.py +36 -0
- cars/applications/resampling/resampling_wrappers.py +309 -0
- cars/applications/sparse_matching/__init__.py +30 -0
- cars/applications/sparse_matching/abstract_sparse_matching_app.py +498 -0
- cars/applications/sparse_matching/sift_app.py +735 -0
- cars/applications/sparse_matching/sparse_matching_algo.py +360 -0
- cars/applications/sparse_matching/sparse_matching_constants.py +68 -0
- cars/applications/sparse_matching/sparse_matching_wrappers.py +238 -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 +757 -0
- cars/cars.py +177 -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 +1541 -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 +244 -0
- cars/orchestrator/cluster/abstract_dask_cluster.py +375 -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 +1075 -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 +873 -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/orchestrator.py +905 -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 +2 -0
- cars/pipelines/conf_resolution/conf_intermediate_resolution.yaml +2 -0
- cars/pipelines/default/__init__.py +26 -0
- cars/pipelines/default/default_pipeline.py +786 -0
- cars/pipelines/parameters/__init__.py +0 -0
- cars/pipelines/parameters/advanced_parameters.py +417 -0
- cars/pipelines/parameters/advanced_parameters_constants.py +69 -0
- cars/pipelines/parameters/application_parameters.py +71 -0
- cars/pipelines/parameters/depth_map_inputs.py +0 -0
- cars/pipelines/parameters/dsm_inputs.py +918 -0
- cars/pipelines/parameters/dsm_inputs_constants.py +25 -0
- cars/pipelines/parameters/output_constants.py +52 -0
- cars/pipelines/parameters/output_parameters.py +454 -0
- cars/pipelines/parameters/sensor_inputs.py +842 -0
- cars/pipelines/parameters/sensor_inputs_constants.py +49 -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 +31 -0
- cars/pipelines/pipeline_template.py +139 -0
- cars/pipelines/unit/__init__.py +26 -0
- cars/pipelines/unit/unit_pipeline.py +2850 -0
- cars/starter.py +167 -0
- cars-1.0.0rc1.dist-info/METADATA +292 -0
- cars-1.0.0rc1.dist-info/RECORD +202 -0
- cars-1.0.0rc1.dist-info/WHEEL +5 -0
- cars-1.0.0rc1.dist-info/entry_points.txt +8 -0
- cars.libs/libgcc_s-1257a076.so.1 +0 -0
- cars.libs/libstdc++-0530927c.so.6.0.32 +0 -0
|
File without changes
|
|
Binary file
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"""
|
|
2
|
+
this module contains the headers of the dense_matching_cpp module.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
# pylint: skip-file
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def estimate_right_classif_on_left(
|
|
9
|
+
right_classif,
|
|
10
|
+
disp_map,
|
|
11
|
+
disp_mask,
|
|
12
|
+
disp_min,
|
|
13
|
+
disp_max,
|
|
14
|
+
classification_fusion_margin=-1,
|
|
15
|
+
):
|
|
16
|
+
"""
|
|
17
|
+
Estimate right classif on left image
|
|
18
|
+
|
|
19
|
+
:param right_classif: right classification
|
|
20
|
+
:type right_classif: np ndarray
|
|
21
|
+
:param disp_map: disparity map
|
|
22
|
+
:type disp_map: np ndarray
|
|
23
|
+
:param disp_mask: disparity mask
|
|
24
|
+
:type disp_mask: np ndarray
|
|
25
|
+
:param disp_min: disparity min
|
|
26
|
+
:type disp_min: int
|
|
27
|
+
:param disp_max: disparity max
|
|
28
|
+
:type disp_max: int
|
|
29
|
+
|
|
30
|
+
:return: right classif on left image
|
|
31
|
+
:rtype: np nadarray
|
|
32
|
+
"""
|
|
33
|
+
...
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def mask_left_classif_from_right_mask(
|
|
37
|
+
left_classif,
|
|
38
|
+
right_mask,
|
|
39
|
+
disp_min,
|
|
40
|
+
disp_max,
|
|
41
|
+
classification_fusion_margin=-1,
|
|
42
|
+
):
|
|
43
|
+
"""
|
|
44
|
+
Mask left classif with right mask.
|
|
45
|
+
|
|
46
|
+
:param left_classif: right classification
|
|
47
|
+
:type left_classif: np ndarray
|
|
48
|
+
:param right_mask: right mask
|
|
49
|
+
:type right_mask: np ndarray
|
|
50
|
+
:param disp_min: disparity min
|
|
51
|
+
:type disp_min: np.array type int
|
|
52
|
+
:param disp_max: disparity max
|
|
53
|
+
:type disp_max: np.array type int
|
|
54
|
+
|
|
55
|
+
:return: masked left classif
|
|
56
|
+
:rtype: np nadarray
|
|
57
|
+
"""
|
|
58
|
+
...
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def estimate_right_grid_disp_int(disp_min_grid, disp_max_grid):
|
|
62
|
+
"""
|
|
63
|
+
Estimate right grid min and max for int inputs.
|
|
64
|
+
Correspond to the range of pixels that can be correlated
|
|
65
|
+
from left -> right.
|
|
66
|
+
If no left pixels can be associated to right, use global values
|
|
67
|
+
|
|
68
|
+
:param disp_min_grid: left disp min grid
|
|
69
|
+
:type disp_min_grid: numpy ndarray
|
|
70
|
+
:param disp_max_grid: left disp max grid
|
|
71
|
+
:type disp_max_grid: numpy ndarray
|
|
72
|
+
|
|
73
|
+
:return: disp_min_right_grid, disp_max_right_grid
|
|
74
|
+
:rtype: numpy ndarray, numpy ndarray
|
|
75
|
+
"""
|
|
76
|
+
return None, None
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def estimate_right_grid_disp_float(disp_min_grid, disp_max_grid):
|
|
80
|
+
"""
|
|
81
|
+
Estimate right grid min and max for float inputs.
|
|
82
|
+
Correspond to the range of pixels that can be correlated
|
|
83
|
+
from left -> right.
|
|
84
|
+
If no left pixels can be associated to right, use global values
|
|
85
|
+
|
|
86
|
+
:param disp_min_grid: left disp min grid
|
|
87
|
+
:type disp_min_grid: numpy ndarray
|
|
88
|
+
:param disp_max_grid: left disp max grid
|
|
89
|
+
:type disp_max_grid: numpy ndarray
|
|
90
|
+
|
|
91
|
+
:return: disp_min_right_grid, disp_max_right_grid
|
|
92
|
+
:rtype: numpy ndarray, numpy ndarray
|
|
93
|
+
"""
|
|
94
|
+
return None, None
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
#ifndef DENSE_MATCHING_HPP
|
|
2
|
+
#define DENSE_MATCHING_HPP
|
|
3
|
+
|
|
4
|
+
#include <pybind11/numpy.h>
|
|
5
|
+
#include <pybind11/stl.h>
|
|
6
|
+
#include <pybind11/pybind11.h>
|
|
7
|
+
|
|
8
|
+
namespace py = pybind11;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @brief Estimate right classif on left image
|
|
12
|
+
*
|
|
13
|
+
* @param right_classif right classification
|
|
14
|
+
* @param disp_map disparity map
|
|
15
|
+
* @param disp_mask disparity mask
|
|
16
|
+
* @param disp_min disparity min
|
|
17
|
+
* @param disp_max disparity max
|
|
18
|
+
* @return right classif on left image
|
|
19
|
+
*/
|
|
20
|
+
py::array_t<bool> estimate_right_classif_on_left(
|
|
21
|
+
py::array_t<bool> right_classif,
|
|
22
|
+
py::array_t<float> disp_map,
|
|
23
|
+
std::optional<py::array_t<bool>> disp_mask,
|
|
24
|
+
int disp_min,
|
|
25
|
+
int disp_max,
|
|
26
|
+
int classification_fusion_margin
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @brief Mask left classif with right mask
|
|
31
|
+
*
|
|
32
|
+
* @param left_classif left classification
|
|
33
|
+
* @param right_mask right mask
|
|
34
|
+
* @param disp_min disparity min
|
|
35
|
+
* @param disp_max disparity max
|
|
36
|
+
* @return masked left classif
|
|
37
|
+
*/
|
|
38
|
+
py::array_t<bool> mask_left_classif_from_right_mask(
|
|
39
|
+
py::array_t<bool> left_classif,
|
|
40
|
+
py::array_t<bool> right_mask,
|
|
41
|
+
py::array_t<int> disp_min,
|
|
42
|
+
py::array_t<int> disp_max,
|
|
43
|
+
int classification_fusion_margin
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @brief Estimate right grid disparities from left grid disparities
|
|
48
|
+
*
|
|
49
|
+
* @param disp_min_grid left disparity minimum grid
|
|
50
|
+
* @param disp_max_grid left disparity maximum grid
|
|
51
|
+
* @return pair of right grid minimum and maximum disparities
|
|
52
|
+
*/
|
|
53
|
+
template<typename T> std::pair<py::array_t<T>, py::array_t<T>> estimate_right_grid_disp(
|
|
54
|
+
py::array_t<T> disp_min_grid,
|
|
55
|
+
py::array_t<T> disp_max_grid
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
#endif // DENSE_MATCHING_HPP
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#include "dense_matching.hpp"
|
|
2
|
+
#include <pybind11/pybind11.h>
|
|
3
|
+
|
|
4
|
+
namespace py = pybind11;
|
|
5
|
+
|
|
6
|
+
PYBIND11_MODULE(dense_matching_cpp, m) {
|
|
7
|
+
m.doc() = "cars's pybind11 dense matching module"; // optional module docstring
|
|
8
|
+
|
|
9
|
+
m.def("estimate_right_classif_on_left", &estimate_right_classif_on_left, "");
|
|
10
|
+
m.def("mask_left_classif_from_right_mask", &mask_left_classif_from_right_mask, "");
|
|
11
|
+
m.def("estimate_right_grid_disp_int", &estimate_right_grid_disp<int>, "");
|
|
12
|
+
m.def("estimate_right_grid_disp_float", &estimate_right_grid_disp<float>, "");
|
|
13
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
#include <pybind11/numpy.h>
|
|
2
|
+
#include <pybind11/stl.h>
|
|
3
|
+
#include <pybind11/pybind11.h>
|
|
4
|
+
#include <cmath>
|
|
5
|
+
#include <optional>
|
|
6
|
+
|
|
7
|
+
namespace py = pybind11;
|
|
8
|
+
|
|
9
|
+
py::array_t<bool> estimate_right_classif_on_left(
|
|
10
|
+
py::array_t<bool> right_classif,
|
|
11
|
+
py::array_t<float> disp_map,
|
|
12
|
+
std::optional<py::array_t<bool>> disp_mask,
|
|
13
|
+
int disp_min,
|
|
14
|
+
int disp_max,
|
|
15
|
+
int classification_fusion_margin
|
|
16
|
+
) {
|
|
17
|
+
auto r_right_classif = right_classif.unchecked<3>();
|
|
18
|
+
auto r_disp_map = disp_map.unchecked<2>();
|
|
19
|
+
|
|
20
|
+
size_t n_bands = r_right_classif.shape(0);
|
|
21
|
+
size_t n_row = r_right_classif.shape(1);
|
|
22
|
+
size_t n_col = r_right_classif.shape(2);
|
|
23
|
+
|
|
24
|
+
bool use_disp_mask = disp_mask.has_value();
|
|
25
|
+
std::unique_ptr<py::detail::unchecked_reference<bool, 2>> r_disp_mask;
|
|
26
|
+
if (use_disp_mask) {
|
|
27
|
+
r_disp_mask = std::make_unique<py::detail::unchecked_reference<bool, 2>>(
|
|
28
|
+
disp_mask.value().unchecked<2>()
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
py::array_t<bool> left_from_right_classif = py::array_t<bool>({n_bands, n_row, n_col});
|
|
33
|
+
auto rw_left_from_right_classif = left_from_right_classif.mutable_unchecked<3>();
|
|
34
|
+
|
|
35
|
+
for (size_t row = 0; row < n_row; row++) {
|
|
36
|
+
for (size_t col = 0; col < n_col; col++) {
|
|
37
|
+
|
|
38
|
+
// find classif
|
|
39
|
+
float fdisp = r_disp_map(row, col);
|
|
40
|
+
bool valid = use_disp_mask ? r_disp_mask->operator()(row, col) : !std::isnan(fdisp);
|
|
41
|
+
|
|
42
|
+
if (valid) {
|
|
43
|
+
// direct value
|
|
44
|
+
int disp = static_cast<int>(std::floor(fdisp));
|
|
45
|
+
|
|
46
|
+
for (size_t band = 0; band < n_bands; band++) {
|
|
47
|
+
rw_left_from_right_classif(
|
|
48
|
+
band, row, col
|
|
49
|
+
) = r_right_classif(band, row, col+disp);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// else: estimate with global range
|
|
56
|
+
for (size_t band = 0; band < n_bands; band++) {
|
|
57
|
+
|
|
58
|
+
bool found = false;
|
|
59
|
+
int margin_min = disp_min;
|
|
60
|
+
int margin_max = disp_max;
|
|
61
|
+
if (classification_fusion_margin != -1) {
|
|
62
|
+
margin_min = -classification_fusion_margin;
|
|
63
|
+
margin_max = classification_fusion_margin;
|
|
64
|
+
}
|
|
65
|
+
for (
|
|
66
|
+
size_t col_classif = std::max(0, static_cast<int>(col)+margin_min);
|
|
67
|
+
col_classif < std::min(
|
|
68
|
+
static_cast<int>(n_col),
|
|
69
|
+
static_cast<int>(col)+margin_max
|
|
70
|
+
);
|
|
71
|
+
col_classif++
|
|
72
|
+
) {
|
|
73
|
+
if (r_right_classif(band, row, col_classif)) {
|
|
74
|
+
found = true;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
rw_left_from_right_classif(band, row, col) = found;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return left_from_right_classif;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
py::array_t<bool> mask_left_classif_from_right_mask(
|
|
88
|
+
py::array_t<bool> left_classif,
|
|
89
|
+
py::array_t<bool> right_mask,
|
|
90
|
+
py::array_t<int> disp_min,
|
|
91
|
+
py::array_t<int> disp_max,
|
|
92
|
+
int classification_fusion_margin
|
|
93
|
+
) {
|
|
94
|
+
|
|
95
|
+
auto rw_left_classif = left_classif.mutable_unchecked<3>();
|
|
96
|
+
auto r_right_mask = right_mask.unchecked<2>();
|
|
97
|
+
auto r_disp_min = disp_min.unchecked<2>();
|
|
98
|
+
auto r_disp_max = disp_max.unchecked<2>();
|
|
99
|
+
|
|
100
|
+
size_t n_bands = rw_left_classif.shape(0);
|
|
101
|
+
size_t n_row = rw_left_classif.shape(1);
|
|
102
|
+
size_t n_col = rw_left_classif.shape(2);
|
|
103
|
+
|
|
104
|
+
for (size_t row = 0; row < n_row; row++) {
|
|
105
|
+
for (size_t col = 0; col < n_col; col++) {
|
|
106
|
+
|
|
107
|
+
// estimate with global range
|
|
108
|
+
bool all_masked = true;
|
|
109
|
+
int margin_min = r_disp_min(row, col);
|
|
110
|
+
int margin_max = r_disp_max(row, col);
|
|
111
|
+
if (classification_fusion_margin != -1) {
|
|
112
|
+
margin_min = -classification_fusion_margin;
|
|
113
|
+
margin_max = classification_fusion_margin;
|
|
114
|
+
}
|
|
115
|
+
size_t lower_bound = std::max(0, static_cast<int>(col)+margin_min);
|
|
116
|
+
size_t upper_bound = std::min(
|
|
117
|
+
static_cast<int>(n_col),
|
|
118
|
+
static_cast<int>(col)+margin_max
|
|
119
|
+
);
|
|
120
|
+
for (size_t col_classif = lower_bound; col_classif < upper_bound; col_classif++) {
|
|
121
|
+
if (!r_right_mask(row, col_classif)) {
|
|
122
|
+
all_masked = false;
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (all_masked) {
|
|
128
|
+
// Remove classif
|
|
129
|
+
for (size_t band = 0; band < n_bands; band++) {
|
|
130
|
+
rw_left_classif(band, row, col) = false;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return left_classif;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
template<typename T> std::pair<py::array_t<T>, py::array_t<T>> estimate_right_grid_disp(
|
|
140
|
+
py::array_t<T> disp_min_grid,
|
|
141
|
+
py::array_t<T> disp_max_grid
|
|
142
|
+
) {
|
|
143
|
+
|
|
144
|
+
auto r_disp_min_grid = disp_min_grid.template unchecked<2>();
|
|
145
|
+
auto r_disp_max_grid = disp_max_grid.template unchecked<2>();
|
|
146
|
+
|
|
147
|
+
size_t n_row = r_disp_min_grid.shape(0);
|
|
148
|
+
size_t n_col = r_disp_min_grid.shape(1);
|
|
149
|
+
|
|
150
|
+
T global_left_min = std::numeric_limits<T>::max();
|
|
151
|
+
// min is smallest positive value for floats, instead use lowest
|
|
152
|
+
T global_left_max = std::numeric_limits<T>::lowest();
|
|
153
|
+
for (size_t row = 0; row < n_row; row++) {
|
|
154
|
+
for (size_t col = 0; col < n_col; col++) {
|
|
155
|
+
global_left_min = std::min(global_left_min, r_disp_min_grid(row, col));
|
|
156
|
+
global_left_max = std::max(global_left_max, r_disp_max_grid(row, col));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
py::array_t<T> disp_min_right_grid({n_row, n_col});
|
|
161
|
+
py::array_t<T> disp_max_right_grid({n_row, n_col});
|
|
162
|
+
auto rw_disp_min_right_grid = disp_min_right_grid.template mutable_unchecked<2>();
|
|
163
|
+
auto rw_disp_max_right_grid = disp_max_right_grid.template mutable_unchecked<2>();
|
|
164
|
+
|
|
165
|
+
for (size_t row = 0; row < n_row; row++) {
|
|
166
|
+
for (size_t col = 0; col < n_col; col++) {
|
|
167
|
+
T min_right = static_cast<T>(n_col);
|
|
168
|
+
T max_right = 0;
|
|
169
|
+
bool is_correlated_left = false;
|
|
170
|
+
|
|
171
|
+
for (size_t left_col = 0; left_col < n_col; left_col++) {
|
|
172
|
+
T left_min = r_disp_min_grid(row, left_col) + static_cast<T>(left_col);
|
|
173
|
+
T left_max = r_disp_max_grid(row, left_col) + static_cast<T>(left_col);
|
|
174
|
+
|
|
175
|
+
if (left_min <= static_cast<T>(col) && static_cast<T>(col) <= left_max) {
|
|
176
|
+
is_correlated_left = true;
|
|
177
|
+
min_right = std::min(
|
|
178
|
+
min_right,
|
|
179
|
+
static_cast<T>(left_col) - static_cast<T>(col)
|
|
180
|
+
);
|
|
181
|
+
max_right = std::max(
|
|
182
|
+
max_right,
|
|
183
|
+
static_cast<T>(left_col) - static_cast<T>(col)
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (is_correlated_left) {
|
|
189
|
+
rw_disp_min_right_grid(row, col) = min_right;
|
|
190
|
+
rw_disp_max_right_grid(row, col) = max_right;
|
|
191
|
+
} else {
|
|
192
|
+
rw_disp_min_right_grid(row, col) = -global_left_max;
|
|
193
|
+
rw_disp_max_right_grid(row, col) = -global_left_min;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
return std::make_pair(disp_min_right_grid, disp_max_right_grid);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// force compiler to create functions for int and float
|
|
202
|
+
template std::pair<py::array_t<int>, py::array_t<int>> estimate_right_grid_disp<int>(
|
|
203
|
+
py::array_t<int>, py::array_t<int>
|
|
204
|
+
);
|
|
205
|
+
template std::pair<py::array_t<float>, py::array_t<float>> estimate_right_grid_disp<float>(
|
|
206
|
+
py::array_t<float>, py::array_t<float>
|
|
207
|
+
);
|