pytroll / satpy

Python package for earth-observing satellite data processing
http://satpy.readthedocs.org/en/latest/
GNU General Public License v3.0
1.08k stars 298 forks source link

Allow generic_image reader to set fill value on reading #2928

Open strandgren opened 1 month ago

strandgren commented 1 month ago

While looking into https://github.com/pytroll/satpy/pull/2923 I went through the generic_image reader code. All the images with A channel are converted to floats and NaNs are placed to the no data pixels. If there's no A but the image has a nodatavals metadata item present and nodata_handling is set to "fill_value" the image is kept as integer data. I'm not sure PNG supports the no data value (or fill value).

Maybe the generic_image reader should have a feature to force a fill_value that would replace the A band whether there is a fill value in the original image or not.

Originally posted by @pnuu in https://github.com/pytroll/satpy/issues/2897#issuecomment-2406692422

pnuu commented 1 month ago

I did some format testing.

Saving to PNG with fill_value=0 using Satpy and reading the image back with rasterio, we can see that nodatavals are (None, None, None).

I think what we'd need is a set_fill_value kwarg that is used to set the nodatavals. A single value or a tuple. Then in .get_dataset() -> ._mask_image_data() we'd need to handle discarding of the A band for the case where set_fill_value is given.