One of the key operations for SLC co-registration is resampling SLC images from one geometry to another. Resampling is the process of moving pixels from one place in an image to another in a new image while accounting for fractional pixel indices via interpolation. Currently, we represent the transformation with a pixel-by-pixel map of "range" offsets (i.e., offsets in the horizontal direction) and "azimuth" offsets (i.e., offsets in the vertical direction):
\[ I^\prime\left(x, y\right) = I\left(x, y, \Delta x, \Delta y\right) \]
where \(I^\prime()\) represents the resampled image, \(I()\) represents the original image, \(x\) and \(y\) are the image coordinates in the output geometry, and \(\Delta x\) and \(\Delta y\) are the offsets between the input and output geometries. For SLC co-registration, in addition to resampling of the complex pixel data, the user may also need to account for non-zero carrier phases in the azimuth direction (e.g., for native Doppler images) and flattening of the complex phase to account for differences in center frequency between the image and a master image. The isce3::image::ResampSlc class contains all relevant operations for SLC co-registration.
For the basic task of image resampling without carrier phase or flattening considerations, let's look at the following example. Here, we have a crop of an Envisat SLC, azimuth offsets that represent a contraction of the image in the vertical dimension, and range offsets that represent a shearing in the horizontal dimension.
The following is example code to perform the resampling.
First, we created isce3::io::Raster objects for all input rasters: the input SLC image, the pixel-by-pixel range offsets, and the pixel-by-pixel azimuth offsets. We then created an output SLC image with the output geometry determined by the either the range or azimuth offset raster. These objects are then passed to a default isce3::image::ResampSlc instance to perform the resampling. After resampling, we obtain the following image:
If the user wishes to account for SLCs with native Doppler frequencies in the azimuth direction and flattening with respect to a master SLC, the following code can be used.