Hello,

I've been looking over the docs and the code, but I'm still a little confused 
about how masking and/or no data are handled during resampling in GDAL. I'm 
interested mostly in the `cubic` and `average` resamples, but I assume the 
answers will apply to the other modes just as well.

In my understanding:
 * `cubic` will happily include "no data" values in the computation, likely 
outputting not very useful results
 * `average` will ignore no data input pixels; but how does average pick the 
weights? The `gdal_translate` docs say "Starting with GDAL 3.1, this is a 
weighted average taking into account properly the weight of source pixels not 
contributing fully to the target pixel". I assume that's mostly unrelated.
 * the `-srcnodata` docs and `gdalwarpkernel.cpp` suggest that masked pixels 
are not included in the computation (unlike those of no data?)
I know two ways of handling masked/no data pixels during resampling:
 * ignore them and rescale the remaining weights of the input pixels (e.g. a 
4x4 grid in the `cubic` case), outputting no data if there's no valid pixel 
among the inputs -- this seems "ideal"
 * output no data if any of the input (e.g. 4x4 grid) pixels are no data
The latter method can be simulated in a reasonably easy way by making a 
validity mask, resampling it with the same method, then thresholding it to get 
a new mask which only keeps the "pure" pixels. It might even be possible (but 
maybe not too easy) to implement do this with a VRT. But its disadvantage is 
that it tends to expand the invalid areas.

So my main question if there's a supported way to handle this in GDAL (using 
band masks?), and what does it do (will I get the "ideal" result from above?).

Regards,
Laurentiu Nicola
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to