[Gdal-dev] Nodata bitmasks / null processing
Howard Butler
hobu.inc at gmail.com
Mon Aug 6 21:42:34 EDT 2007
Frank,
I prefer Option 4, which is to treat bitmasks as just another
RasterBand for each "data" RasterBand. Something like
bitmask = GetBand(1).GetBitmask()
Why I like this approach:
- Familiarity to mentally challenged raster coders like myself. I
know how to work with a RasterBand. I can make the mental leap to
the bitmasks being a RasterBand with just on/off booleans.
- Support for other language bindings with this approach is simple.
- It would limit API additions.
- Would it lessen some of the downsides of Option 3 (BitmaskIO)?
I'll let others chime in on the downsides...
Howard
On Aug 4, 2007, at 12:06 PM, Frank Warmerdam wrote:
> Folks,
>
> Currently GDAL supports two mechanisms for identifying nodata/
> transparent
> areas in a raster. One is use of a particular pixel value as a nodata
> value (returned by the GDALRasterBand::GetNodataValue() method) and
> the other
> is by specifying an alpha band with alpha=0 marking transparent areas.
>
> However, a number of file formats support a concept of "nodata
> masks" -
> essentially bitmasks marking areas of the raster that are nodata
> areas. But
> this is accomplished without having to reserve a special marker
> value to be
> the nodata value.
>
> This is the case with GRASS for instance, and the GDAL GRASS driver
> actually
> jumps through hoops to promote byte data to int16 and overlay a
> nodata value.
> However, this is cumbersome and violates the underlying data model
> of the
> format.
>
> This issue also arises with other formats, including a new JPEG
> variation
> with a nodata bitmask appended to the file. I also feel that
> nodata masks
> can offer a better
>
> A client has requested support for nodata bitmasking be
> incorporated into
> GDAL in some appropriate fashion. I can see a few approaches:
>
> 1) Pseudo-Alpha
>
> In this approach the nodata mask is treated as a sort of alpha band
> with
> values of 0 and 255. One downside to this is that alpha bands are not
> clearly associated with a particular band, so if you wanted to have
> distinct nodata bitmasks for each band in a dataset there would be
> no explicit association between particular alpha bands and particular
> original bands.
>
> 2) Data Promotion and NODATA pixel value creation
>
> This is the approached used now in the GDAL GRASS driver. A nodata
> value
> outside the current valid range is created within the driver, and if
> necessary the pixel data type is promoted to a larger type to make
> space
> for this "extra value" value. For instance Byte pixel type would be
> promoted to UInt16 so we could use 256 as our nodata value.
>
> 3) Introduce Explicit Nodata Bitmap API
>
> Extend the GDAL API to include an option for reading a validity
> bitmask
> in the RasterIO() call - or perhaps a new BitmaskIO() method
> paralleling
> the RasterIO() method.
>
> Potentially the default implementation of this method could generate a
> bitmask based on the raster data and nodata pixel values if they are
> present so that applications could use this one method for both
> models.
>
> In one sense this is the cleanest solution, but it is also by far the
> most disruptive. It requires new support in applications that want
> to take advantage of it, further complicates the GDAL API and
> worst, it
> may be very hard to implement properly for formats without
> bitmasks, but
> with complicated resampling or blocking logic.
>
> I am looking for some feedback from the community. In particular I'm
> interested in examples of file formats that include bit masking.
>
> Best regards,
> --
> ---------------------------------------
> +--------------------------------------
> I set the clouds in motion - turn up | Frank Warmerdam,
> warmerdam at pobox.com
> light and sound - activate the windows | http://pobox.com/~warmerdam
> and watch the world go round - Rush | President OSGeo, http://
> osgeo.org
>
> _______________________________________________
> Gdal-dev mailing list
> Gdal-dev at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/gdal-dev
More information about the Gdal-dev
mailing list