GDAL – How to Use gdal_retile on RGBI (4 Band) GeoTIFFs While Preserving Band Information

bandgdalmulti-band

I want to retile large GeoTIFFs with 4 bands: R = Red, G = Green, B = Blue, NIR = Near Infra Read; in short "RGBI" if I understand correctly.

gdalinfo on the input file prints as band information:

Band 1 Block=512x512 Type=Byte, ColorInterp=Red
Band 2 Block=512x512 Type=Byte, ColorInterp=Green
Band 3 Block=512x512 Type=Byte, ColorInterp=Blue
Band 4 Block=512x512 Type=Byte, ColorInterp=Undefined

After running gdal_retile.py, the fourth (NIR) channel is converted to an Alpha-Channel.
gdalinfo on the output file prints as band information:

Band 1 Block=1024x2 Type=Byte, ColorInterp=Red
  Overviews: 512x512, 256x256, 128x128
  Mask Flags: PER_DATASET ALPHA
  Overviews of mask band: 512x512, 256x256, 128x128
Band 2 Block=1024x2 Type=Byte, ColorInterp=Green
  Overviews: 512x512, 256x256, 128x128
  Mask Flags: PER_DATASET ALPHA
  Overviews of mask band: 512x512, 256x256, 128x128
Band 3 Block=1024x2 Type=Byte, ColorInterp=Blue
  Overviews: 512x512, 256x256, 128x128
  Mask Flags: PER_DATASET ALPHA
  Overviews of mask band: 512x512, 256x256, 128x128
Band 4 Block=1024x2 Type=Byte, ColorInterp=Alpha
  Overviews: 512x512, 256x256, 128x128

The conversion of the Infrared-band into an Alpha mask is causing me troubles. Can I prevent this behavior (of gdal_retile.py)? Or alternatively: Can I reverse the effect by changing the Alpha band back to an "Undefined" band?

The gdal_retile.py parameters I ran with (on GDAL version 1.11) are:

gdal_retile.py 
-s_srs EPSG:31464 [georeference]
-ps 1024 1024 [pixel width/height)
-tileIndex "tileIndex.shp" 
-csv "tileGeoRef.csv" 
-targetDir "...\outputfolder" 
"...\inputfile.tif"

Purpose of the operation is to cut the large GeoTIFF into small 1024×1024 images.

Best Answer

I found an answer for exactly this problem in the [gdal-dev] Mailing list: To avoid the fourth band being interpreted as ALPHA channel, the corresponding option ALPHA=NO can be specified for the GeoTIFF driver. To preserve the RGB order, apparently there is the option PHOTOMETRIC=RGB - for more read the mailing list. In my case the ALPHA=NO option was enough.

When calling the script via command-line, use the -co "OPTION-NAME=VALUE" parameter (see doc) to specify options.

My full command was:

gdal_retile.py 

-co "ALPHA=NO"

-s_srs EPSG:31464 [georeference]
-ps 1024 1024 [pixel width/height)
-tileIndex "tileIndex.shp" 
-csv "tileGeoRef.csv" 
-targetDir "...\outputfolder" 
"...\inputfile.tif"
Related Question