8

I need to normalize the values attained from a band ratio to 0-255. I'm using QGIS. How do I do this? Any ideas?

1
  • 2
    Because it's a ratio, watch out! E.g., if it's a ratio of two 0-255 images with equalized histograms, then half the ratios will be between 0 and 1 while the other half will be between 1 and 255 (and some will be undefined): that's a huge discrepancy in ranges! Depending on your purpose, the logarithm of the ratio might be a better quantity to compute; better yet, compute log((1+band1)/(1+band2)) to avoid undefined quantities. At the very least this will produce a more readable map.
    – whuber
    Commented Jun 29, 2012 at 16:00

2 Answers 2

17

The following will stretch your data to 8-bit (0-255).

smin=0; smax=255

( x - min(x) ) * (smax - smin) / ( max(x) - min(x) ) + smin

It should be fairly easy to translate this to the raster algebra syntax in your software of choice. You will just need to know what the min and max values are in your raster. If the raster is the result of a band ratio then it is safe to assume -1 to 1 and the syntax should look something like this.

NewRaster = ( OldRaster - -1 ) * 255 / ( 1 - -1 ) + 0
2
  • 1
    +1: General answers (syntax independent) have broad application. Welcome to our site, Jeffrey!
    – whuber
    Commented Jun 29, 2012 at 18:16
  • 1
    The first smax term really should be smax - smin - in the example (0-255) it doesn't matter, but does where smin != 0
    – Simbamangu
    Commented Jun 19, 2017 at 11:48
12

You can use gdal_translate utility. Use the option -scale [src_min src_max [dst_min dst_max]] with src_min and src_max as current min/max values from your data and 0,255 as dst_min,dst_max. Without the square brackets.

If you have installed QGIS with OSGeo4W package, you may have the terminal program called 'MSYS'. Open that and just use the gdal_translate command. If not, from within QGIS choose Raster -> Conversion - > Translate. Choose your files and options. At the bottom of the window the full gdal_translate command will be displayed. Click edit and add the -scale option.

1
  • When scaling to the 0-255 range, the bare -scale option can be used, the src_min and src_max will be set from the input raster and 0 and 255 will be used as dst_min and dst_max Commented Nov 20 at 19:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.