Trent - thank you for your idea. That was another idea that I was thinking about doing but your recipe makes it much clearer on how to do it.

Even - I tried the gdaldem method and after making the color mapping table it gave me very good results.

Great feedback and suggestions! I think I'm able to move this along now.

Thanks,
  -Steve

On 5/15/2014 3:45 PM, Hare, Trent wrote:
Steve,
    You can think of this very much *as a hack* but I had some success.
I was also testing how to colorize a DEM (or 32bit floating point image)
outside of gdaldem. You would need a script to configure the "lut" line
for each file min/max range though. It does seem to work and you can
convert to other colorized graphical formats (e.g. PNG) using
gdal_translate.

example:
(1) create a 3 band VRT of your original file.
 > ls dem.tif > mylist
 > ls dem.tif >> mylist
 > ls dem.tif >> mylist
 > gdalbuildvrt -separate -input_file_list mylist DEM_3bands.vrt

(2) now manually add or script a <LUT> section for each band (see below
for color mapping or [dest value]. Original DEM range was from -8.296 to
4.022)

<LUT>[src value 1]:[dest value 1],[src value 2]:[dest value 2],...</LUT>

example:
<LUT>-8.296:75,-7:0,-3:0,-1.5:204,2:255,3.5:255,3.9:150,4.022:255</LUT>
from: http://www.gdal.org/gdal_vrttut.html


kind of crazy and really not tested much... Shows how convenient VRTs
continue to be.

Good luck,
Trent


example VRT and tiny DEM (1 MB, odd blip on the right):
https://www.dropbox.com/s/kb8x2vlzmwtl52v/ColorMapping_DEM_toRainbow-BrownWhite_test.zip

screenshot of DEM as converted to PNG:
 > gdal_translate -ot byte -of PNG DEM_3bands.vrt DEM_3bands.png
https://www.dropbox.com/s/i1kldn7th7w5910/1MM3298IOLBYDEM08P2905_colorize.png


-------------------

The above "rainbow to brown to white" color-ramp in percent would be
mapped at:
# Red stretch pairs. The pattern is percentage:DN
0:75 10:0 40:0 55:204 70:255 85:255 99:150 100:255

# Green stretch pairs. The pattern is percentage:DN
0:0 10:0 30:151 40:204 55:204 70:102 85:0 99:75 100:255

# Blue stretch pairs. The pattern is percentage:DN
0:102 10:204 25:151 40:0 99:0 100:255

------------------

Example VRT:
<VRTDataset rasterXSize="373" rasterYSize="625">
   <GeoTransform>-5.0000000000000000e-001, 1.0000000000000000e+000,
0.0000000000000000e+000, 5.0000000000000000e-001,
0.0000000000000000e+000,-1.0000000000000000e+000</GeoTransform>
   <VRTRasterBand dataType="Float32" band="1">
     <NoDataValue>-3.40282265508890E+038</NoDataValue>
     <ColorInterp>Red</ColorInterp>
     <ComplexSource>
       <SourceFilename
relativeToVRT="1">1MM3298IOLBYDEM08P2905.tif</SourceFilename>
       <SourceBand>1</SourceBand>
       <SourceProperties RasterXSize="373" RasterYSize="625"
DataType="Float32" BlockXSize="373" BlockYSize="5" />
       <SrcRect xOff="0" yOff="0" xSize="373" ySize="625" />
       <DstRect xOff="0" yOff="0" xSize="373" ySize="625" />

<LUT>-8.296:75,-7:0,-3:0,-1.5:204,2:255,3.5:255,3.9:150,4.022:255</LUT>
     </ComplexSource>
   </VRTRasterBand>
   <VRTRasterBand dataType="Float32" band="2">
     <NoDataValue>-3.40282265508890E+038</NoDataValue>
     <ColorInterp>Green</ColorInterp>
     <ComplexSource>
       <SourceFilename
relativeToVRT="1">1MM3298IOLBYDEM08P2905.tif</SourceFilename>
       <SourceBand>1</SourceBand>
       <SourceProperties RasterXSize="373" RasterYSize="625"
DataType="Float32" BlockXSize="373" BlockYSize="5" />
       <SrcRect xOff="0" yOff="0" xSize="373" ySize="625" />
       <DstRect xOff="0" yOff="0" xSize="373" ySize="625" />

<LUT>-8.296:0,-7:0,-5:151,-3:204,-1.5:204,2:102,3.5:0,3.9:75,4.022:255</LUT>
     </ComplexSource>
   </VRTRasterBand>
   <VRTRasterBand dataType="Float32" band="3">
     <NoDataValue>-3.40282265508890E+038</NoDataValue>
     <ColorInterp>Blue</ColorInterp>
     <ComplexSource>
       <SourceFilename
relativeToVRT="1">1MM3298IOLBYDEM08P2905.tif</SourceFilename>
       <SourceBand>1</SourceBand>
       <SourceProperties RasterXSize="373" RasterYSize="625"
DataType="Float32" BlockXSize="373" BlockYSize="5" />
       <SrcRect xOff="0" yOff="0" xSize="373" ySize="625" />
       <DstRect xOff="0" yOff="0" xSize="373" ySize="625" />
       <LUT>-8.296:102,-6.5:204,-4.5:151,-3:0,3.9:0,4.022:255</LUT>
     </ComplexSource>
   </VRTRasterBand>
</VRTDataset>




On Thu, May 15, 2014 at 12:08 PM, Stephen Woodbridge
<[email protected] <mailto:[email protected]>> wrote:

    On 5/15/2014 1:56 PM, Even Rouault wrote:

        Le jeudi 15 mai 2014 16:25:12, Stephen Woodbridge a écrit :

            Hi all,

            I'm trying to create a VRT file for a GTiff that is Int32 or
            Float32 to
            add a ColorTable but I seem to be missing a key piece of
            information.
            How are the pixel values mapped to the color table entries?
            via the
            histogram?

            My GTiff has noData=-32767 and good values the range from
            say -5 to 100.
            So do I create a color table that is based on the 256
            buckets in the
            histogram?


        No way you can use a GDAL color table to map negative values...
        Perhaps you should use gdaldem color-relief to generate a RGB
        output. Note
        that gdaldem color-relief is compatible with VRT output : it
        uses the LUT
        mechanism to do so.


    OK, I will look at gdaldem, but not wanting to give up on this yet,
    is there a way to change the NoData pixels from -32767 to say -20
    then scale 1.0 and offset the value by 10.

    This would make NoData=0

    old   => new
      -5        5
       0       10
       1       11
    100      110

    then I would have all positive values and the range would be manageable?

    The scale and offset are already supported in VRT, but I'm not sure
    if it is possible to remap -32767 values to a new value.

    Thanks for your response.

    -Steve



            So for example I get:

            Band 1 Block=256x256 Type=Float32, ColorInterp=Gray
                 Min=-32767.000 Max=33.980   Computed Min/Max=-54.985,34.320
                 Minimum=-32767.000, Maximum=33.980, Mean=-15887.345,
            StdDev=16386.592
                 256 buckets from -32831.1 to 98.0444:
                 1545169 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
            0 0 0 0 0 0 0
            0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
            0 0 0 0 0 0
            0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
            0 0 0 0 0 0
            0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
            0 0 0 0 0 0
            0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
            0 0 0 0 0 0
            0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
            0 0 0 0 0 0
            0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
            0 0 0 0 0 0
            0 0 0 0 0 0 27375 1924356
                 NoData Value=-32767
                 Metadata:
                   STATISTICS_MAXIMUM=33.__979999542236
                   STATISTICS_MEAN=-15887.__344614501
                   STATISTICS_MINIMUM=-32767
                   STATISTICS_STDDEV=16386.__59208246


            It seems that the NoData value is included in the stats
            which really
            skews the numbers compressing all my values into two
            buckets! How can I
            avoid that? I want to ignore the NoData values and spread my
            good values
            into the remaining buckets. How can I do this?


        You can't. There's a ticket I think about the fact we should
        ignore nodata
        value in stats.


            Thanks,
                 -Steve

            _________________________________________________
            gdal-dev mailing list
            [email protected] <mailto:[email protected]>
            http://lists.osgeo.org/__mailman/listinfo/gdal-dev
            <http://lists.osgeo.org/mailman/listinfo/gdal-dev>



    _________________________________________________
    gdal-dev mailing list
    [email protected] <mailto:[email protected]>
    http://lists.osgeo.org/__mailman/listinfo/gdal-dev
    <http://lists.osgeo.org/mailman/listinfo/gdal-dev>



_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to