@@ -432,14 +432,6 @@ void Geocode<T>::geocodeInterp(
432
432
out_geo_dem_array.fill (std::numeric_limits<float >::quiet_NaN ());
433
433
}
434
434
435
- // First and last line of the data block in radar coordinates
436
- int azimuthFirstLine = radar_grid.length () - 1 ;
437
- int azimuthLastLine = 0 ;
438
-
439
- // First and last pixel of the data block in radar coordinates
440
- int rangeFirstPixel = radar_grid.width () - 1 ;
441
- int rangeLastPixel = 0 ;
442
-
443
435
// load a block of DEM for the current geocoded grid
444
436
isce3::geometry::DEMInterpolator demInterp = isce3::geocode::loadDEM (
445
437
demRaster, geogrid, lineStart, geoBlockLength, geogrid.width (),
@@ -450,17 +442,17 @@ void Geocode<T>::geocodeInterp(
450
442
std::valarray<double > radarX (blockSize);
451
443
std::valarray<double > radarY (blockSize);
452
444
453
- int localAzimuthFirstLine = radar_grid.length () - 1 ;
454
- int localAzimuthLastLine = 0 ;
455
- int localRangeFirstPixel = radar_grid.width () - 1 ;
456
- int localRangeLastPixel = 0 ;
445
+ int azimuthFirstLine = radar_grid.length () - 1 ;
446
+ int azimuthLastLine = 0 ;
447
+ int rangeFirstPixel = radar_grid.width () - 1 ;
448
+ int rangeLastPixel = 0 ;
457
449
458
450
// Loop over lines, samples of the output grid
459
451
#pragma omp parallel for reduction( \
460
452
min \
461
- : localAzimuthFirstLine, localRangeFirstPixel ) \
453
+ : azimuthFirstLine, rangeFirstPixel ) \
462
454
reduction (max \
463
- : localAzimuthLastLine, localRangeLastPixel )
455
+ : azimuthLastLine, rangeLastPixel )
464
456
465
457
for (size_t kk = 0 ; kk < geoBlockLength * geogrid.width (); ++kk) {
466
458
@@ -525,14 +517,14 @@ void Geocode<T>::geocodeInterp(
525
517
rdrX >= radar_grid.width ())
526
518
continue ;
527
519
528
- localAzimuthFirstLine = std::min (
529
- localAzimuthFirstLine , static_cast <int >(std::floor (rdrY)));
530
- localAzimuthLastLine = std::max (localAzimuthLastLine ,
520
+ azimuthFirstLine = std::min (
521
+ azimuthFirstLine , static_cast <int >(std::floor (rdrY)));
522
+ azimuthLastLine = std::max (azimuthLastLine ,
531
523
static_cast <int >(std::ceil (rdrY) - 1 ));
532
- localRangeFirstPixel = std::min (
533
- localRangeFirstPixel , static_cast <int >(std::floor (rdrX)));
534
- localRangeLastPixel = std::max (
535
- localRangeLastPixel , static_cast <int >(std::ceil (rdrX) - 1 ));
524
+ rangeFirstPixel = std::min (
525
+ rangeFirstPixel , static_cast <int >(std::floor (rdrX)));
526
+ rangeLastPixel = std::max (
527
+ rangeLastPixel , static_cast <int >(std::ceil (rdrX) - 1 ));
536
528
537
529
// store the adjusted X and Y indices
538
530
radarX[blockLine * geogrid.width () + pixel] = rdrX;
@@ -558,11 +550,15 @@ void Geocode<T>::geocodeInterp(
558
550
geogrid.width (), geoBlockLength, 1 );
559
551
}
560
552
561
- // Get min and max swath extents from among all threads
562
- azimuthFirstLine = std::min (azimuthFirstLine, localAzimuthFirstLine);
563
- azimuthLastLine = std::max (azimuthLastLine, localAzimuthLastLine);
564
- rangeFirstPixel = std::min (rangeFirstPixel, localRangeFirstPixel);
565
- rangeLastPixel = std::max (rangeLastPixel, localRangeLastPixel);
553
+ // Add extra margin for interpolation
554
+ int interp_margin = 5 ;
555
+ azimuthFirstLine = std::max (azimuthFirstLine - interp_margin, 0 );
556
+ rangeFirstPixel = std::max (rangeFirstPixel - interp_margin, 0 );
557
+
558
+ azimuthLastLine = std::min (azimuthLastLine + interp_margin,
559
+ static_cast <int >(radar_grid.length () - 1 ));
560
+ rangeLastPixel = std::min (rangeLastPixel + interp_margin,
561
+ static_cast <int >(radar_grid.width () - 1 ));
566
562
567
563
if (azimuthFirstLine > azimuthLastLine ||
568
564
rangeFirstPixel > rangeLastPixel)
@@ -735,7 +731,8 @@ inline void Geocode<T>::_interpolate(
735
731
736
732
size_t length = geoDataBlock.length ();
737
733
size_t width = geoDataBlock.width ();
738
- int extraMargin = isce3::core::SINC_HALF;
734
+ // Add extra margin for interpolation
735
+ int interp_margin = 5 ;
739
736
740
737
double offsetY =
741
738
azimuthFirstLine / radar_grid.prf () + radar_grid.sensingStart ();
@@ -753,9 +750,9 @@ inline void Geocode<T>::_interpolate(
753
750
double rdrY = radarY[i * width + j] - azimuthFirstLine;
754
751
double rdrX = radarX[i * width + j] - rangeFirstPixel;
755
752
756
- if (rdrX < extraMargin || rdrY < extraMargin ||
757
- rdrX >= (radarBlockWidth - extraMargin ) ||
758
- rdrY >= (radarBlockLength - extraMargin )) {
753
+ if (rdrX < interp_margin || rdrY < interp_margin ||
754
+ rdrX >= (radarBlockWidth - interp_margin ) ||
755
+ rdrY >= (radarBlockLength - interp_margin )) {
759
756
760
757
// set NaN values according to T_out, i.e. real (NaN) or complex
761
758
// (NaN, NaN)
0 commit comments