[gdal-dev] alpha mask to data value
William Kyngesburye
woklist at kyngchaos.com
Fri Apr 4 07:08:47 PDT 2014
On Apr 3, 2014, at 4:29 PM, Even Rouault <even.rouault at mines-paris.org> wrote:
> Le jeudi 03 avril 2014 23:22:17, William Kyngesburye a écrit :
>> On Apr 2, 2014, at 6:10 PM, William Kyngesburye <woklist at kyngchaos.com>
> wrote:
>>>
>>> I think this explains another issue I saw at one point when I had ovelap
>>> when merging 2 rasters: the pixels of the top raster covered the pixels
>>> of the lower at the band level, which caused the band of the lower to
>>> show through when the upper band was 255, and resulted in a wild color
>>> mix. ie:
>>>
>>> result 127 127 127 (grey) but should have been 255 127 127
>>> ^
>>> upper 255 127 127 (pink)
>>> ^
>>> lower 127 127 127 (grey)
>>>
>>> I think I'll save the nodata flattening to white until the end, after
>>> merging.
>>
>> Well, now I'm running into another problem I had previously, which is also
>> why I wanted change the alpha mask to a nodata value: I can't get a vrt to
>> recognize the alpha bands as nodata.
>>
>> If I use a simple gdalbuildvrt with a collection of images with alpha
>> masks, gdal tells me:
>>
>> Band 1 Block=128x128 Type=Byte, ColorInterp=Red
>> Mask Flags: PER_DATASET ALPHA
>> Band 2 Block=128x128 Type=Byte, ColorInterp=Green
>> Mask Flags: PER_DATASET ALPHA
>> Band 3 Block=128x128 Type=Byte, ColorInterp=Blue
>> Mask Flags: PER_DATASET ALPHA
>> Band 4 Block=128x128 Type=Byte, ColorInterp=Alpha
>>
>> Which looks correct. But displaying in QGIS I get an alpha mask with the
>> overlap areas null.
>>
>> Same if I gdal_translate that to geotiff, (photoshop checkered background):
>>
>>
>>
>> I tried changing the alpha band in the vrt to a mask band as described in
>> the vrt tutorial docs
>>
>> <MaskBand>
>> <VRTRasterBand dataType="Byte">
>> <SimpleSource>
>> <SourceBand>mask,1</SourceBand>
>> ...
>> </SimpleSource>
>> </VRTRasterBand>
>> </MaskBand>
>>
>> and then there is no mask/nodata at all. Though converting to geotif gives
>> me an extra .msk file.
>>
>> also tried for the mask band:
>>
>> <SourceBand>4</SourceBand>
>>
>> with same results.
>
> Yes, (regular) VRT does not do any blending. The last file in the list takes
> precedence over the previous one in case of overlapping.
> gdalwarp is the solution for that (or warped VRT).
>
> You may want to try -wo UNIFIED_SRC_NODATA=YES as a gdalwarp option so that
> only the "255 255 255" triplet is considered as the nodata value.
>
> Extract from code (I would have pointed to the html doc if the server wasn't
> out of service for now ):
>
> * - UNIFIED_SRC_NODATA=YES/[NO]: By default nodata masking values considered
> * independently for each band. However, sometimes it is desired to treat all
> * bands as nodata if and only if, all bands match the corresponding nodata
> * values. To get this behavior set this option to YES.
-wo UNIFIED_SRC_NODATA=YES works on a nodata value vrt. So I do all the work (clean, rectify, project) with alpha-masked tifs, then convert to nodata values for the the vrt (because it doesn't like alpha masks), back to alpha mask tif for the whole merged image using the UNIFIED_SRC_NODATA and INIT_DEST options, then strip out the alpha band to get a white background. phwew!
It stills seems like there is something wrong with a vrt and alpha nodata bands. I understand how it overlays each source over the previous ones. So, it should take into account the nodata mask in what form it is for a source, then overlay the remaining pixels on the full image. This is what it does when the sources have nodata values. But when the sources have alpha nodata masks (if I leave the generated vrt alone and don't change it to a MaskBand), it appears to instead combine the alpha bands and data bands separately and apply the merged alpha band to the merged data bands.
Is this normal (and why)? Or a bug?
-----
William Kyngesburye <kyngchaos*at*kyngchaos*dot*com>
http://www.kyngchaos.com/
"I ache, therefore I am. Or in my case - I am, therefore I ache."
- Marvin
More information about the gdal-dev
mailing list