Le jeudi 03 novembre 2016 18:19:36, Daniele Romagnoli a écrit : > Hi List, > I was checking a gdalwarp (GDAL 2.1.2) invokation with a colleague and I > have a question. > > I know that when warping a geotiff with internal NODATA_VALUES=0 0 0 > metadata, only RGB pixels = 0 0 0 are handled as nodata whilst pixels like > "0 2 4", "50 0 0" will not right? > > In the past, I had issues using -scrnodata 0 instead of embedded > NODATA_VALUES=0 0 0, getting results with sparse nodata around due to > band_i = 0 being interpreted as a nodata pixels. This is why I usually > suggest to define the NODATA_VALUES metadata to make sure only the exact > triplet is handled as nodata. > > However, today we have processed a simple UTM RGB dataset (without > NODATA_VALUES metadata defined) using this command: > gdalwarp -t_srs EPSG:4326 -srcnodata 0 -dstnodata None -dstalpha > > And the result is properly rendered: the alpha mask is zero only where the > input pixels are "0 0 0" which is exactly what we needed. > Do something has been changed in the latest versions? Is the alpha band > mask being set to zero only when all input pixels are zero?
Hi Daniele, This is a good question, and I would have thought the same as you. But when digging further, the nodata values must be indeed fully matched for all components to consider a pixel as transparent. And this has been the case for the last 11 years :-)) : https://trac.osgeo.org/gdal/changeset/8286 My confusion came from the fact that the default behaviour of the warping engine used by gdalwarp is not that one (see UNIFIED_SRC_NODATA option in http://www.gdal.org/structGDALWarpOptions.html#a0ed77f9917bb96c7a9aabd73d4d06e08), but gdalwarp override it to have the UNIFIED_SRC_NODATA=YES behaviour. I've also just added support in trunk to be able to specify UNIFIED_SRC_NODATA=NO explicitly if wished. See : Let create a dataset with a single pixel R,G,B=10,20,30 with gdal_translate byte.tif rgb.tif -b 1 -b 1 -b 1 -scale_1 0 255 10 10 \ -scale_2 0 255 20 20 -scale_3 0 255 30 30 -srcwin 0 0 1 1 By default: gdalwarp rgb.tif out.tif -overwrite -srcnodata 10 -dstnodata None -dstalpha lead to (R,G,B,A)=(10,20,30,255) And (in trunk): gdalwarp rgb.tif out.tif -overwrite -srcnodata 10 -dstnodata None -dstalpha \ -wo UNIFIED_SRC_NODATA=NO -wo INIT_DEST=127 lead to (R,G,B,A)=(127,20,30,255) ==> Nodata is applied band per band, and alpha is considered to be 255 as soon as at least one band is valid. Even -- Spatialys - Geospatial professional services http://www.spatialys.com _______________________________________________ gdal-dev mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/gdal-dev
