isce3 0.25.0
Loading...
Searching...
No Matches
RTC.h
1#pragma once
2
3#include "forward.h"
4#include <isce3/core/forward.h>
5#include <isce3/io/forward.h>
6#include <isce3/product/forward.h>
7
8#include <limits>
9
10#include <pyre/journal.h>
11
12#include <isce3/core/Constants.h>
13#include <isce3/core/blockProcessing.h>
14#include <isce3/core/LUT2d.h>
15#include <isce3/error/ErrorCode.h>
16
17namespace isce3 { namespace geometry {
18
23 BETA_NAUGHT = 0,
24 SIGMA_NAUGHT_ELLIPSOID = 1,
25};
26
31 SIGMA_NAUGHT = 0,
32 GAMMA_NAUGHT = 1,
33};
34
36enum rtcAreaMode { AREA = 0, AREA_FACTOR = 1 };
37
40enum rtcAlgorithm { RTC_BILINEAR_DISTRIBUTION = 0, RTC_AREA_PROJECTION = 1 };
41
59
97 const isce3::core::Orbit& orbit, const isce3::core::LUT2d<double>& dop,
98 isce3::io::Raster& input_raster, isce3::io::Raster& dem_raster,
99 isce3::io::Raster& output_raster,
100 rtcInputTerrainRadiometry input_terrain_radiometry =
101 rtcInputTerrainRadiometry::BETA_NAUGHT,
102 rtcOutputTerrainRadiometry output_terrain_radiometry =
103 rtcOutputTerrainRadiometry::GAMMA_NAUGHT,
104 int exponent = 0, rtcAreaMode rtc_area_mode = rtcAreaMode::AREA_FACTOR,
105 rtcAlgorithm rtc_algorithm = rtcAlgorithm::RTC_AREA_PROJECTION,
106 rtcAreaBetaMode rtc_area_beta_mode = rtcAreaBetaMode::AUTO,
107 double geogrid_upsampling = std::numeric_limits<double>::quiet_NaN(),
108 float rtc_min_value_db = std::numeric_limits<float>::quiet_NaN(),
109 double abs_cal_factor = 1,
110 float clip_min = std::numeric_limits<float>::quiet_NaN(),
111 float clip_max = std::numeric_limits<float>::quiet_NaN(),
112 isce3::io::Raster* out_sigma = nullptr,
113 const isce3::core::LUT2d<double>& az_time_correction = {},
114 const isce3::core::LUT2d<double>& slant_range_correction = {},
115 isce3::io::Raster* input_rtc = nullptr,
116 isce3::io::Raster* output_rtc = nullptr,
117 isce3::core::MemoryModeBlocksY rtc_memory_mode =
118 isce3::core::MemoryModeBlocksY::AutoBlocksY);
119
120
155void computeRtc(const isce3::product::RadarGridParameters& radarGrid,
156 const isce3::core::Orbit& orbit, const isce3::core::LUT2d<double>& dop,
157 isce3::io::Raster& dem, isce3::io::Raster& output_raster,
158 rtcInputTerrainRadiometry inputTerrainRadiometry =
159 rtcInputTerrainRadiometry::BETA_NAUGHT,
160 rtcOutputTerrainRadiometry outputTerrainRadiometry =
161 rtcOutputTerrainRadiometry::GAMMA_NAUGHT,
162 rtcAreaMode rtc_area_mode = rtcAreaMode::AREA_FACTOR,
163 rtcAlgorithm rtc_algorithm = rtcAlgorithm::RTC_AREA_PROJECTION,
164 rtcAreaBetaMode rtc_area_beta_mode = rtcAreaBetaMode::AUTO,
165 double geogrid_upsampling = std::numeric_limits<double>::quiet_NaN(),
166 float rtc_min_value_db = std::numeric_limits<float>::quiet_NaN(),
167 isce3::io::Raster* out_sigma = nullptr,
168 const isce3::core::LUT2d<double>& az_time_correction = {},
169 const isce3::core::LUT2d<double>& slant_range_correction = {},
170 isce3::core::MemoryModeBlocksY rtc_memory_mode =
171 isce3::core::MemoryModeBlocksY::AutoBlocksY,
172 isce3::core::dataInterpMethod interp_method =
173 isce3::core::dataInterpMethod::BIQUINTIC_METHOD,
174 double threshold = 1e-8, int num_iter = 100, double delta_range = 1e-8,
175 const long long min_block_size = isce3::core::DEFAULT_MIN_BLOCK_SIZE,
176 const long long max_block_size = isce3::core::DEFAULT_MAX_BLOCK_SIZE);
177
225void computeRtc(isce3::io::Raster& dem_raster, isce3::io::Raster& output_raster,
226 const isce3::product::RadarGridParameters& radarGrid,
227 const isce3::core::Orbit& orbit, const isce3::core::LUT2d<double>& dop,
228 const double y0, const double dy, const double x0, const double dx,
229 const int geogrid_length, const int geogrid_width, const int epsg,
230 rtcInputTerrainRadiometry inputTerrainRadiometry =
231 rtcInputTerrainRadiometry::BETA_NAUGHT,
232 rtcOutputTerrainRadiometry outputTerrainRadiometry =
233 rtcOutputTerrainRadiometry::GAMMA_NAUGHT,
234 rtcAreaMode rtc_area_mode = rtcAreaMode::AREA_FACTOR,
235 rtcAlgorithm rtc_algorithm = rtcAlgorithm::RTC_AREA_PROJECTION,
236 rtcAreaBetaMode rtc_area_beta_mode = rtcAreaBetaMode::AUTO,
237 double geogrid_upsampling = std::numeric_limits<double>::quiet_NaN(),
238 float rtc_min_value_db = std::numeric_limits<float>::quiet_NaN(),
239 isce3::io::Raster* out_geo_rdr = nullptr,
240 isce3::io::Raster* out_geo_grid = nullptr,
241 isce3::io::Raster* out_sigma = nullptr,
242 const isce3::core::LUT2d<double>& az_time_correction = {},
243 const isce3::core::LUT2d<double>& slant_range_correction = {},
244 isce3::core::MemoryModeBlocksY rtc_memory_mode =
245 isce3::core::MemoryModeBlocksY::AutoBlocksY,
246 isce3::core::dataInterpMethod interp_method =
247 isce3::core::dataInterpMethod::BIQUINTIC_METHOD,
248 double threshold = 1e-8, int num_iter = 100, double delta_range = 1e-8,
249 const long long min_block_size = isce3::core::DEFAULT_MIN_BLOCK_SIZE,
250 const long long max_block_size = isce3::core::DEFAULT_MAX_BLOCK_SIZE);
251
280void computeRtcBilinearDistribution(isce3::io::Raster& dem_raster,
281 isce3::io::Raster& output_raster,
282 const isce3::product::RadarGridParameters& radarGrid,
283 const isce3::core::Orbit& orbit, const isce3::core::LUT2d<double>& dop,
284 const isce3::product::GeoGridParameters& geogrid,
285 rtcInputTerrainRadiometry input_terrain_radiometry =
286 rtcInputTerrainRadiometry::BETA_NAUGHT,
287 rtcOutputTerrainRadiometry output_terrain_radiometry =
288 rtcOutputTerrainRadiometry::GAMMA_NAUGHT,
289 rtcAreaMode rtc_area_mode = rtcAreaMode::AREA_FACTOR,
290 double geogrid_upsampling = std::numeric_limits<double>::quiet_NaN(),
291 float rtc_min_value_db = std::numeric_limits<float>::quiet_NaN(),
292 isce3::io::Raster* out_sigma = nullptr,
293 double threshold = 1e-8, int num_iter = 100, double delta_range = 1e-8,
294 const isce3::core::LUT2d<double>& az_time_correction = {},
295 const isce3::core::LUT2d<double>& slant_range_correction = {});
296
337void computeRtcAreaProj(isce3::io::Raster& dem,
338 isce3::io::Raster& output_raster,
339 const isce3::product::RadarGridParameters& radarGrid,
340 const isce3::core::Orbit& orbit, const isce3::core::LUT2d<double>& dop,
341 const isce3::product::GeoGridParameters& geogrid,
342 rtcInputTerrainRadiometry input_terrain_radiometry =
343 rtcInputTerrainRadiometry::BETA_NAUGHT,
344 rtcOutputTerrainRadiometry output_terrain_radiometry =
345 rtcOutputTerrainRadiometry::GAMMA_NAUGHT,
346 rtcAreaMode rtc_area_mode = rtcAreaMode::AREA_FACTOR,
347 rtcAreaBetaMode rtc_area_beta_mode = rtcAreaBetaMode::AUTO,
348 double geogrid_upsampling = std::numeric_limits<double>::quiet_NaN(),
349 float rtc_min_value_db = std::numeric_limits<float>::quiet_NaN(),
350 isce3::io::Raster* out_geo_rdr = nullptr,
351 isce3::io::Raster* out_geo_grid = nullptr,
352 isce3::io::Raster* out_sigma = nullptr,
353 const isce3::core::LUT2d<double>& az_time_correction = {},
354 const isce3::core::LUT2d<double>& slant_range_correction = {},
355 isce3::core::MemoryModeBlocksY rtc_memory_mode =
356 isce3::core::MemoryModeBlocksY::AutoBlocksY,
357 isce3::core::dataInterpMethod interp_method =
358 isce3::core::dataInterpMethod::BIQUINTIC_METHOD,
359 double threshold = 1e-8, int num_iter = 100, double delta_range = 1e-8,
360 const long long min_block_size = isce3::core::DEFAULT_MIN_BLOCK_SIZE,
361 const long long max_block_size = isce3::core::DEFAULT_MAX_BLOCK_SIZE);
362
363void areaProjIntegrateSegment(double y1, double y2, double x1, double x2,
364 int length, int width, isce3::core::Matrix<double>& w_arr,
365 double& w_total, int plane_orientation);
366
367double
368computeUpsamplingFactor(const DEMInterpolator& dem_interp,
369 const isce3::product::RadarGridParameters& radar_grid,
370 const isce3::core::Ellipsoid& ellps);
371
373 rtcInputTerrainRadiometry input_terrain_radiometry);
375 rtcOutputTerrainRadiometry output_terrain_radiometry);
376std::string get_rtc_area_mode_str(rtcAreaMode rtc_area_mode);
377std::string get_rtc_area_beta_mode_str(rtcAreaBetaMode rtc_area_beta_mode);
378std::string get_rtc_algorithm_str(rtcAlgorithm rtc_algorithm);
379
380void print_parameters(pyre::journal::info_t& channel,
381 const isce3::product::RadarGridParameters& radar_grid,
382 rtcInputTerrainRadiometry input_terrain_radiometry,
383 rtcOutputTerrainRadiometry output_terrain_radiometry,
384 rtcAreaMode rtc_area_mode,
385 rtcAreaBetaMode rtc_area_beta_mode,
386 double geogrid_upsampling,
387 float rtc_min_value_db);
388}} // namespace isce3::geometry
Data structure to store 2D Lookup table.
Definition LUT2d.h:20
Sequence of platform ephemeris samples (state vectors) with uniform temporal spacing,...
Definition Orbit.h:44
Definition DEMInterpolator.h:25
Data structure meant to handle Raster I/O operations.
Definition Raster.h:32
Definition RadarGridParameters.h:16
The isce3::geometry namespace.
Definition boundingbox.h:15
std::string get_input_terrain_radiometry_str(rtcInputTerrainRadiometry input_terrain_radiometry)
Convert enum input terrain radiometry to string.
Definition RTC.cpp:1787
void computeRtcBilinearDistribution(isce3::io::Raster &dem_raster, isce3::io::Raster &output_raster, const isce3::product::RadarGridParameters &radar_grid, const isce3::core::Orbit &orbit, const isce3::core::LUT2d< double > &input_dop, const isce3::product::GeoGridParameters &geogrid, rtcInputTerrainRadiometry input_terrain_radiometry, rtcOutputTerrainRadiometry output_terrain_radiometry, rtcAreaMode rtc_area_mode, double upsample_factor, float rtc_min_value_db, isce3::io::Raster *out_sigma, double threshold, int num_iter, double delta_range, const isce3::core::LUT2d< double > &az_time_correction, const isce3::core::LUT2d< double > &slant_range_correction)
Generate radiometric terrain correction (RTC) area or area normalization factor using the Bilinear Di...
Definition RTC.cpp:722
std::string get_rtc_area_mode_str(rtcAreaMode rtc_area_mode)
Convert enum rtc_area_mode to string.
Definition RTC.cpp:1827
std::string get_rtc_algorithm_str(rtcAlgorithm rtc_algorithm)
Convert enum output_mode to string.
Definition RTC.cpp:1864
rtcAreaBetaMode
Enumeration type to indicate RTC area beta mode (option only available for rtcAlgorithm....
Definition RTC.h:45
@ PIXEL_AREA
estimate the beta surface reference area A_beta using the pixel area, which is the product of the ran...
Definition RTC.h:51
@ PROJECTION_ANGLE
estimate the beta surface reference area A_beta using the projection angle method: A_beta = A_sigma *...
Definition RTC.h:55
@ AUTO
auto mode.
Definition RTC.h:46
std::string get_output_terrain_radiometry_str(rtcOutputTerrainRadiometry output_terrain_radiometry)
Convert enum output terrain radiometry to string.
Definition RTC.cpp:1807
void applyRtc(const isce3::product::RadarGridParameters &radar_grid, const isce3::core::Orbit &orbit, const isce3::core::LUT2d< double > &input_dop, isce3::io::Raster &input_raster, isce3::io::Raster &dem_raster, isce3::io::Raster &output_raster, rtcInputTerrainRadiometry input_terrain_radiometry, rtcOutputTerrainRadiometry output_terrain_radiometry, int exponent, rtcAreaMode rtc_area_mode, rtcAlgorithm rtc_algorithm, rtcAreaBetaMode rtc_area_beta_mode, double geogrid_upsampling, float rtc_min_value_db, double abs_cal_factor, float clip_min, float clip_max, isce3::io::Raster *out_sigma, const isce3::core::LUT2d< double > &az_time_correction, const isce3::core::LUT2d< double > &slant_range_correction, isce3::io::Raster *input_rtc, isce3::io::Raster *output_rtc, isce3::core::MemoryModeBlocksY rtc_memory_mode)
Apply radiometric terrain correction (RTC) over an input raster.
Definition RTC.cpp:294
rtcInputTerrainRadiometry
Enumeration type to indicate input terrain radiometry (for RTC)
Definition RTC.h:22
void computeRtcAreaProj(isce3::io::Raster &dem_raster, isce3::io::Raster &output_raster, const isce3::product::RadarGridParameters &radar_grid, const isce3::core::Orbit &orbit, const isce3::core::LUT2d< double > &input_dop, const isce3::product::GeoGridParameters &geogrid, rtcInputTerrainRadiometry input_terrain_radiometry, rtcOutputTerrainRadiometry output_terrain_radiometry, rtcAreaMode rtc_area_mode, rtcAreaBetaMode rtc_area_beta_mode, double geogrid_upsampling, float rtc_min_value_db, isce3::io::Raster *out_geo_rdr, isce3::io::Raster *out_geo_grid, isce3::io::Raster *out_sigma, const isce3::core::LUT2d< double > &az_time_correction, const isce3::core::LUT2d< double > &slant_range_correction, isce3::core::MemoryModeBlocksY rtc_memory_mode, isce3::core::dataInterpMethod interp_method, double threshold, int num_iter, double delta_range, const long long min_block_size, const long long max_block_size)
Generate radiometric terrain correction (RTC) area or area normalization factor using the area projec...
Definition RTC.cpp:1601
rtcAlgorithm
Enumeration type to select RTC algorithm (RTC_BILINEAR_DISTRIBUTION or RTC_AREA_PROJECTION)
Definition RTC.h:40
void computeRtc(const isce3::product::RadarGridParameters &radar_grid, const isce3::core::Orbit &orbit, const isce3::core::LUT2d< double > &input_dop, isce3::io::Raster &dem_raster, isce3::io::Raster &output_raster, rtcInputTerrainRadiometry input_terrain_radiometry, rtcOutputTerrainRadiometry output_terrain_radiometry, rtcAreaMode rtc_area_mode, rtcAlgorithm rtc_algorithm, rtcAreaBetaMode rtc_area_beta_mode, double geogrid_upsampling, float rtc_min_value_db, isce3::io::Raster *out_sigma, const isce3::core::LUT2d< double > &az_time_correction, const isce3::core::LUT2d< double > &slant_range_correction, isce3::core::MemoryModeBlocksY rtc_memory_mode, isce3::core::dataInterpMethod interp_method, double threshold, int num_iter, double delta_range, const long long min_block_size, const long long max_block_size)
Generate radiometric terrain correction (RTC) area or area normalization factor.
Definition RTC.cpp:436
rtcAreaMode
Enumeration type to indicate RTC area mode (AREA or AREA_FACTOR)
Definition RTC.h:36
std::string get_rtc_area_beta_mode_str(rtcAreaBetaMode rtc_area_beta_mode)
Convert enum output_mode to string.
Definition RTC.cpp:1844
rtcOutputTerrainRadiometry
Enumeration type to indicate output terrain radiometry (for RTC)
Definition RTC.h:30
base interpolator is an abstract base class
Definition BinarySearchFunc.cpp:5

Generated for ISCE3.0 by doxygen 1.13.2.