From 0cdfd245278dcc4b6f1ba27fb3a7ebff3581b808 Mon Sep 17 00:00:00 2001 From: Philip Manke Date: Mon, 10 Nov 2025 11:00:54 +0100 Subject: [PATCH 1/4] update for pansharpening changes --- interface/cuvis.hpp | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/interface/cuvis.hpp b/interface/cuvis.hpp index 4d241a0..aa9d7dd 100644 --- a/interface/cuvis.hpp +++ b/interface/cuvis.hpp @@ -301,10 +301,10 @@ namespace cuvis * */ pan_sharpening_algorithm_t pan_algorithm; - /** - * @copydoc cuvis_viewer_settings_t.blend_opacity - */ - double blend_opacity; + /** + * @copydoc cuvis_viewer_settings_t.pre_pan_sharpen_cube + */ + bool pre_pan_sharpen_cube; /** @brief Add the pan image to the output (default: @ref false) * @@ -456,14 +456,9 @@ namespace cuvis */ std::string userplugin; - /** - * @copydoc cuvis_viewer_settings_t.pre_pan_sharpen_cube - */ - bool pre_pan_sharpen_cube; - - /** - * @copydoc cuvis_viewer_settings_t.complete - */ + /** + * @copydoc cuvis_viewer_settings_t.complete + */ bool complete; /** @@ -471,6 +466,7 @@ namespace cuvis */ bool pan_failback; }; + /** @brief processing arguments */ struct ProcessingArgs { @@ -1368,7 +1364,7 @@ namespace cuvis using view_data_t = std::map; public: - Viewer(ViewArgs const& args); + Viewer(GeneralExportArgs const& generalArgs, ViewArgs const& args); view_data_t apply(Measurement const& mesu); /** @brief Expert: Return the current handle of the wrapper class */ @@ -2244,10 +2240,10 @@ namespace cuvis } } - inline Viewer::Viewer(ViewArgs const& args) + inline Viewer::Viewer(GeneralExportArgs const& generalArgs, ViewArgs const& args) { CUVIS_VIEWER viewer; - chk(cuvis_viewer_create(&viewer, args)); + chk(cuvis_viewer_create(&viewer, generalArgs, args)); _viewer = std::shared_ptr(new CUVIS_VIEWER{viewer}, [](CUVIS_VIEWER* handle) { cuvis_viewer_free(handle); delete handle; @@ -2895,7 +2891,7 @@ namespace cuvis add_pan(false), add_fullscale_pan(false), permissive(false), - blend_opacity(0.0) + pre_pan_sharpen_cube(true) {} inline GeneralExportArgs::operator cuvis_export_general_settings_t() const @@ -2907,10 +2903,10 @@ namespace cuvis ges.pan_scale = pan_scale; ges.pan_interpolation_type = pan_interpolation_type; ges.pan_algorithm = pan_algorithm; + ges.pre_pan_sharpen_cube = static_cast(pre_pan_sharpen_cube); ges.add_pan = static_cast(add_pan); ges.add_fullscale_pan = static_cast(add_fullscale_pan); ges.permissive = static_cast(permissive); - ges.blend_opacity = blend_opacity; return ges; } @@ -2953,18 +2949,13 @@ namespace cuvis return proc_args; } - inline ViewArgs::ViewArgs() : userplugin(), complete(false), pre_pan_sharpen_cube(false), pan_failback(true) {} + inline ViewArgs::ViewArgs() : userplugin(), complete(false), pan_failback(true) {} inline ViewArgs::operator cuvis_viewer_settings_t() const { cuvis_viewer_settings_t args; args.userplugin = userplugin.c_str(); - args.pan_scale = pan_scale; - args.pan_interpolation_type = pan_interpolation_type; - args.pan_algorithm = pan_algorithm; - args.pre_pan_sharpen_cube = pre_pan_sharpen_cube; args.complete = complete; - args.blend_opacity = blend_opacity; args.pan_failback = pan_failback ? 1 : 0; return args; @@ -2973,6 +2964,7 @@ namespace cuvis { cuvis_export_view_settings_t args; args.userplugin = userplugin.c_str(); + args.complete = complete ? 1 : 0; args.pan_failback = pan_failback ? 1 : 0; return args; From 3aa33fdd853b823230d8ddb7f57d3f2af4c58838 Mon Sep 17 00:00:00 2001 From: Philip Manke Date: Wed, 12 Nov 2025 14:33:12 +0100 Subject: [PATCH 2/4] simplify settings for viewer --- interface/cuvis.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/cuvis.hpp b/interface/cuvis.hpp index aa9d7dd..1362227 100644 --- a/interface/cuvis.hpp +++ b/interface/cuvis.hpp @@ -1364,7 +1364,7 @@ namespace cuvis using view_data_t = std::map; public: - Viewer(GeneralExportArgs const& generalArgs, ViewArgs const& args); + Viewer(ViewArgs const& args); view_data_t apply(Measurement const& mesu); /** @brief Expert: Return the current handle of the wrapper class */ @@ -2240,10 +2240,10 @@ namespace cuvis } } - inline Viewer::Viewer(GeneralExportArgs const& generalArgs, ViewArgs const& args) + inline Viewer::Viewer(ViewArgs const& args) { CUVIS_VIEWER viewer; - chk(cuvis_viewer_create(&viewer, generalArgs, args)); + chk(cuvis_viewer_create(&viewer, args, args)); _viewer = std::shared_ptr(new CUVIS_VIEWER{viewer}, [](CUVIS_VIEWER* handle) { cuvis_viewer_free(handle); delete handle; From 5def443d64e67cb471cd4fe800e9ba30c3efdb14 Mon Sep 17 00:00:00 2001 From: Philip Manke Date: Fri, 12 Dec 2025 12:13:35 +0100 Subject: [PATCH 3/4] Add new pansharpening settings --- interface/cuvis.hpp | 85 ++++++++++++++++++++++++++++++++------------- 1 file changed, 61 insertions(+), 24 deletions(-) diff --git a/interface/cuvis.hpp b/interface/cuvis.hpp index 1362227..49f0efc 100644 --- a/interface/cuvis.hpp +++ b/interface/cuvis.hpp @@ -44,6 +44,7 @@ namespace cuvis struct ProcessingArgs; + struct PanSharpeningArgs; struct SaveArgs; struct TiffArgs; struct EnviArgs; @@ -256,20 +257,17 @@ namespace cuvis std::shared_ptr _ref; }; - /** @brief Export Settings common to all exporters + /** @brief Settings defining Pansharpening and channel selection for all exporters * * The options of this structure can be set for any @ref Exporter. However, not all options are respected by the @ref Exporter. * */ - struct GeneralExportArgs + struct PanSharpeningArgs { /** Constructor to create default parameters */ - GeneralExportArgs(); + PanSharpeningArgs(); /** convert to C - SDK settings structure */ - operator cuvis_export_general_settings_t() const; - - /** The directory where the files should be exported to (default: ".") */ - std::filesystem::path export_dir; + operator cuvis_pansharpening_settings_t() const; /** @brief The selection of spectral channels to be exproted. (default : "all") * @@ -311,6 +309,22 @@ namespace cuvis * @copydoc cuvis_export_general_settings_t.add_pan * */ bool add_pan; + }; + + /** @brief Export Settings common to all exporters + * + * The options of this structure can be set for any @ref Exporter. However, not all options are respected by the @ref Exporter. + * */ + struct GeneralExportArgs + { + /** Constructor to create default parameters */ + GeneralExportArgs(); + + /** convert to C - SDK settings structure */ + operator cuvis_export_general_settings_t() const; + + /** The directory where the files should be exported to (default: ".") */ + std::filesystem::path export_dir; /** @brief Add a full-resolution pan image to the export (default: @ref false) * @@ -318,11 +332,14 @@ namespace cuvis * */ bool add_fullscale_pan; - /** @brief Set @ref Expor ter to permisive mode (default: @ref false) + /** @brief Set @ref Exporter to permisive mode (default: @ref false) * * @copydoc cuvis_export_general_settings_t.permissive * */ bool permissive; + + /** @brief Settings to define Pansharpening and channel selection */ + struct PanSharpeningArgs pansharpening_settings; }; /** @brief Options for saving cu3s/cu3 files @@ -2243,7 +2260,7 @@ namespace cuvis inline Viewer::Viewer(ViewArgs const& args) { CUVIS_VIEWER viewer; - chk(cuvis_viewer_create(&viewer, args, args)); + chk(cuvis_viewer_create(&viewer, args)); _viewer = std::shared_ptr(new CUVIS_VIEWER{viewer}, [](CUVIS_VIEWER* handle) { cuvis_viewer_free(handle); delete handle; @@ -2881,35 +2898,48 @@ namespace cuvis return _data[((y)*_width + (x)) * _channels + (z)]; } - inline GeneralExportArgs::GeneralExportArgs() - : export_dir("."), - channel_selection("all"), + inline PanSharpeningArgs::PanSharpeningArgs() + : channel_selection("all"), spectra_multiplier(1), pan_scale(0.0), pan_interpolation_type(pan_sharpening_interpolation_type_Linear), pan_algorithm(pan_sharpening_algorithm_CubertMacroPixel), add_pan(false), - add_fullscale_pan(false), - permissive(false), pre_pan_sharpen_cube(true) {} + inline GeneralExportArgs::GeneralExportArgs() : export_dir("."), add_fullscale_pan(false), permissive(false), pansharpening_settings({}) + {} + inline GeneralExportArgs::operator cuvis_export_general_settings_t() const { cuvis_export_general_settings_t ges({}); + std::strncpy(ges.pansharpening_settings.channel_selection, pansharpening_settings.channel_selection.c_str(), CUVIS_MAXBUF); + ges.pansharpening_settings.spectra_multiplier = pansharpening_settings.spectra_multiplier; + ges.pansharpening_settings.pan_scale = pansharpening_settings.pan_scale; + ges.pansharpening_settings.pan_interpolation_type = pansharpening_settings.pan_interpolation_type; + ges.pansharpening_settings.pan_algorithm = pansharpening_settings.pan_algorithm; + ges.pansharpening_settings.pre_pan_sharpen_cube = pansharpening_settings.pre_pan_sharpen_cube ? 1 : 0; + ges.pansharpening_settings.add_pan = pansharpening_settings.add_pan ? 1 : 0; std::strncpy(ges.export_dir, export_dir.string().c_str(), CUVIS_MAXBUF); - std::strncpy(ges.channel_selection, channel_selection.c_str(), CUVIS_MAXBUF); - ges.spectra_multiplier = spectra_multiplier; - ges.pan_scale = pan_scale; - ges.pan_interpolation_type = pan_interpolation_type; - ges.pan_algorithm = pan_algorithm; - ges.pre_pan_sharpen_cube = static_cast(pre_pan_sharpen_cube); - ges.add_pan = static_cast(add_pan); - ges.add_fullscale_pan = static_cast(add_fullscale_pan); - ges.permissive = static_cast(permissive); + ges.add_fullscale_pan = add_fullscale_pan ? 1 : 0; + ges.permissive = permissive ? 1 : 0; return ges; } + inline PanSharpeningArgs::operator cuvis_pansharpening_settings_t() const + { + cuvis_pansharpening_settings_t pss({}); + std::strncpy(pss.channel_selection, channel_selection.c_str(), CUVIS_MAXBUF); + pss.spectra_multiplier = spectra_multiplier; + pss.pan_scale = pan_scale; + pss.pan_interpolation_type = pan_interpolation_type; + pss.pan_algorithm = pan_algorithm; + pss.pre_pan_sharpen_cube = static_cast(pre_pan_sharpen_cube); + pss.add_pan = static_cast(add_pan); + return pss; + } + inline SaveArgs::SaveArgs() : merge_mode(session_merge_mode_t::session_merge_mode_Default), allow_overwrite(false), @@ -2957,6 +2987,13 @@ namespace cuvis args.userplugin = userplugin.c_str(); args.complete = complete; args.pan_failback = pan_failback ? 1 : 0; + std::strncpy(args.pansharpening_settings.channel_selection, pansharpening_settings.channel_selection.c_str(), CUVIS_MAXBUF); + args.pansharpening_settings.spectra_multiplier = pansharpening_settings.spectra_multiplier; + args.pansharpening_settings.pan_scale = pansharpening_settings.pan_scale; + args.pansharpening_settings.pan_interpolation_type = pansharpening_settings.pan_interpolation_type; + args.pansharpening_settings.pan_algorithm = pansharpening_settings.pan_algorithm; + args.pansharpening_settings.pre_pan_sharpen_cube = pansharpening_settings.pre_pan_sharpen_cube ? 1 : 0; + args.pansharpening_settings.add_pan = pansharpening_settings.add_pan ? 1 : 0; return args; } @@ -2966,7 +3003,7 @@ namespace cuvis args.userplugin = userplugin.c_str(); args.complete = complete ? 1 : 0; args.pan_failback = pan_failback ? 1 : 0; - + return args; } From b0996f86ad1e894aa5c135a6e40921adc643cae1 Mon Sep 17 00:00:00 2001 From: Philip Manke Date: Fri, 12 Dec 2025 17:51:53 +0100 Subject: [PATCH 4/4] Add DPC functions --- interface/cuvis.hpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/interface/cuvis.hpp b/interface/cuvis.hpp index 49f0efc..eccbeb1 100644 --- a/interface/cuvis.hpp +++ b/interface/cuvis.hpp @@ -1262,6 +1262,12 @@ namespace cuvis void register_state_change_callback(state_callback_t callback, bool output_initial_state = true); void reset_state_change_callback(); + bool get_dead_pixel_correction_available() const; + + bool get_dead_pixel_correction_enabled() const; + + void set_dead_pixel_correction_enabled(bool enable); + #define ACQ_STUB_0a(funname, sdkname, type_ifcae, type_wrapped) \ type_wrapped get_##funname() const \ { \ @@ -2462,6 +2468,24 @@ namespace cuvis } } + + inline bool AcquisitionContext::get_dead_pixel_correction_available() const { + CUVIS_INT available; + chk(cuvis_acq_cont_dead_pixel_correction_available_get(*_acqCont, &available)); + return available != 0; + } + + inline bool AcquisitionContext::get_dead_pixel_correction_enabled() const { + CUVIS_INT enabled; + chk(cuvis_acq_cont_dead_pixel_correction_enabled_get(*_acqCont, &enabled)); + return enabled != 0; + } + inline void AcquisitionContext::set_dead_pixel_correction_enabled(bool enable) + { + CUVIS_INT value = enable ? 1 : 0; + chk(cuvis_acq_cont_dead_pixel_correction_enabled_set(*_acqCont, value)); + } + inline Measurement const& Exporter::apply(Measurement const& mesu) const { chk(cuvis_exporter_apply(*_exporter, *mesu._mesu));