What is a spectral index?
A spectral index combines the values of two or more bands into one number per pixel. The bands are chosen so that the index is high for one kind of surface and low for others. The result is a raster that shows vegetation, water, built-up land or burned ground at a glance.
Indices work because of spectral signatures. Healthy vegetation reflects strongly in the near-infrared and absorbs red, water absorbs infrared, and bare or built surfaces are fairly flat across the spectrum. An index puts those differences into a single value.
Why a normalised difference?
Most indices have the form of a normalised difference:
index = (A - B) / (A + B)
Here A is the band where the target reflects strongly and B is a band where it does not. The result runs from minus 1 to plus 1. Dividing by the sum has a useful effect. If a hillside in shadow is darker in every band by the same factor, the factor cancels. Two pixels of the same vegetation, one in sun and one in partial shade, get closer index values than raw band values.
The cancelling works only for a multiplier. An additive error, such as haze or an offset left in the data, does not cancel. This is why indices should be calculated from surface reflectance, and why the scale factor and offset need checking first.
The common indices
| Index | Formula | Highlights | Reflected (A, nm) | Absorbed or low (B, nm) | Reading the values |
|---|---|---|---|---|---|
| NDVI | (NIR − Red)/ (NIR + Red) | Green vegetation | NIR, 842 nm: the leaf structure scatters it | Red, 665 nm: chlorophyll absorbs it | Below 0: water or cloud. 0 to 0.1: bare. 0.1 to 0.3: sparse. 0.3 to 0.6: moderate. Above 0.6: dense |
| NDWI | (Green − NIR)/ (Green + NIR) | Open water | Green, 560 nm: water reflects a little | NIR, 842 nm: water absorbs it | Above 0: water. Below 0: land |
| MNDWI | (Green − SWIR1)/ (Green + SWIR1) | Open water, with less confusion from built-up land | Green, 560 nm: water reflects a little | SWIR1, 1610 nm: water absorbs it almost completely | Above 0: water. Below 0: land |
| NDBI | (SWIR1 − NIR)/ (SWIR1 + NIR) | Built-up and bare surfaces | SWIR1, 1610 nm: built-up and dry bare surfaces reflect more of it | NIR, 842 nm: lower on built-up land, high on vegetation | Above 0: built-up or bare. Below 0: vegetation or water |
| NDMI | (NIR − SWIR1)/ (NIR + SWIR1) | Moisture in vegetation | NIR, 842 nm: the leaf structure scatters it | SWIR1, 1610 nm: water in the leaves absorbs it | Above 0.4: moist canopy. 0 to 0.4: moderate. Below 0: dry |
| NBR | (NIR − SWIR2)/ (NIR + SWIR2) | Burned areas and vegetation health | NIR, 842 nm: a healthy canopy reflects it | SWIR2, 2190 nm: low over a moist canopy, higher after burning | Above 0.4: healthy. Near 0: bare or sparse. Below 0: burned |
Read the last three columns together with the formula: band A is the one before the minus sign, band B the one after it. The index is high where band A is bright and band B is dark.
The number with "nm" is the wavelength of the light in that band. nm stands for nanometre, one billionth of a metre. Blue, green and red light fall roughly between 400 and 700 nm, near-infrared (NIR) starts just beyond red at about 700 to 1,000 nm, and shortwave infrared (SWIR) covers about 1,400 to 3,000 nm. Each band covers a range of wavelengths, so the figure given is the centre of the band for Sentinel-2 and is approximate. Landsat bands are close but not identical.
The value ranges are rough guides, not fixed rules. They change with the sensor, the season, the soil and the scene, and a threshold of 0 is only a starting point for the water and built-up indices. Check any cut-off against the imagery. Some surfaces fool the indices: built-up land can come out positive in NDWI, and bare soil also comes out positive in NDBI. NBR is meant for land, so mask water first. Burn severity uses the change, dNBR = NBR before − NBR after. A commonly used USGS scale runs from about 0.1 to 0.27 for low severity, 0.27 to 0.66 for moderate severity and above 0.66 for high severity, with values between about −0.1 and 0.1 treated as unburned.
The bands differ by sensor.
| Band | Sentinel-2 | Landsat 8 and 9 | LISS-IV |
|---|---|---|---|
| Blue | B2 | B2 | not available |
| Green | B3 | B3 | B2 |
| Red | B4 | B4 | B3 |
| NIR | B8 | B5 | B4 |
| SWIR1 | B11 | B6 | not available |
| SWIR2 | B12 | B7 | not available |
The number of the near-infrared band is the most common source of error. It is B8 on Sentinel-2, B5 on Landsat 8 and B4 on LISS-IV. Check the band table before you type a formula.
LISS-IV, the high-resolution camera on the Indian satellites Resourcesat-2 and 2A, has only three multispectral bands: green, red and near-infrared, at about 5.8 m. It has no blue and no shortwave infrared band. NDVI and the green and NIR version of NDWI work on it. MNDWI, NDBI, NDMI and NBR need a SWIR band, so they cannot be calculated from LISS-IV alone. LISS-III on the same satellites does have a SWIR band, but at a coarser pixel size.
The name NDWI is used for two different indices. McFeeters defined it with green and near-infrared, as in the table above. Gao defined a moisture index with near-infrared and shortwave infrared, which is listed here as NDMI. Papers use both names, so always check the formula in the source.
Reading the values
NDVI values give a rough guide to the surface. The ranges change with the sensor, the season and the scene, so treat them as a starting point and look at the imagery.
| NDVI | Typical surface |
|---|---|
| Below 0 | Water, snow or cloud |
| 0 to 0.1 | Bare rock, sand and many built surfaces |
| 0.1 to 0.3 | Sparse vegetation, dry grass and some crops |
| 0.3 to 0.6 | Moderate vegetation |
| Above 0.6 | Dense, healthy vegetation |
For the water indices, positive values suggest water. For NDBI, positive values suggest built-up or bare land. A threshold such as zero is only a start, and you should check it against the image.
Why variants exist
Soil in the pixel
In sparse vegetation, the bare soil between plants affects NDVI. The Soil Adjusted Vegetation Index adds a correction factor L:
SAVI = ((NIR - Red) / (NIR + Red + L)) × (1 + L)
A common value of L is 0.5. SAVI suits dry areas with sparse cover.
Atmosphere and dense canopies
NDVI also saturates in dense vegetation, so a very green forest and a moderately green one can have almost the same value. The Enhanced Vegetation Index uses the blue band to reduce atmospheric effects and responds better over dense canopy:
EVI = 2.5 × (NIR − Red) / (NIR + 6 × Red − 7.5 × Blue + 1)
EVI is written for reflectance between 0 and 1, so convert the values first.
Water, built-up land and burns
MNDWI replaces the near-infrared in NDWI with a shortwave infrared band. Built-up surfaces reflect near-infrared well, and with NDWI they can be mistaken for water. Replacing the band reduces that confusion.
NDBI is positive when shortwave infrared reflectance is higher than near-infrared, which is typical of built surfaces and some bare soil. Its values are small and it separates built land from bare soil poorly.
NBR is used for fire. Burned ground drops in near-infrared and rises in shortwave infrared. The difference between NBR before and after a fire, called dNBR, is used as a measure of burn severity.
Example: four places in Bengaluru
The table gives index values from the Sentinel-2 scene of 15 March 2025, at the four sites used in the note on spectral signatures. Each is the mean of a 3 by 3 pixel window.
| Site | NDVI | NDWI | MNDWI | NDBI | NBR |
|---|---|---|---|---|---|
| Cubbon Park, tree cover | 0.80 | −0.71 | −0.54 | −0.28 | 0.56 |
| Ulsoor Lake, open water | −0.11 | 0.36 | 0.74 | −0.51 | 0.55 |
| Railway station area, built-up | 0.17 | −0.21 | −0.26 | 0.06 | 0.00 |
| Airport, runway and apron | 0.21 | −0.28 | −0.23 | −0.05 | 0.11 |
The values show how each index behaves.
- NDVI is high only for the tree cover. The built-up site and the airport, at 0.17 and 0.21, are close to each other and to sparse vegetation.
- MNDWI is strongly positive only for the lake, at 0.74.
- NDBI is positive only at the railway station, and only just. A difference of about 0.1 between built-up and airport land is small.
- NBR is about 0.55 for both the lake and the trees. It is built to detect fire, and it cannot separate water from vegetation. Using an index for a question it was not designed for gives answers that look reasonable and are wrong.
Over the whole 24 by 16 kilometre window of the QGIS series, the mean NDVI is about 0.28, and about 18 percent of the cells have an NDVI of 0.5 or more.
A workflow you can trust
- Choose the index for the question, and write down its formula and the band numbers for your sensor.
- Use surface reflectance. Apply the scale factor, and an offset only if your files have one. A dark target such as a clear lake in the shortwave infrared should read close to zero.
- Mask clouds, cloud shadow and, where needed, water.
- Calculate the index and check the range. Values outside minus 1 to plus 1 point to a mistake.
- Display it with a sensible colour ramp and compare it with the true colour image.
- If you classify it, choose thresholds from the histogram and from the image.
- When you compare dates, use the same season and the same sensor.
In QGIS the same calculation is one expression in the Raster Calculator. With the Sentinel-2 files used in this series, whose values need only division by 10,000, NDVI is:
("S2_B08@1" - "S2_B04@1") / ("S2_B08@1" + "S2_B04@1")
The division by 10,000 cancels in a normalised difference, so it matters only for indices with constants in them, such as EVI and SAVI. If a cell has zero in both bands, the result is empty, which is the right outcome.
Common mistakes
- Using the wrong near-infrared band number for the sensor.
- Mixing up the two indices called NDWI.
- Calculating from digital numbers that carry an offset.
- Comparing values from different seasons or sensors.
- Applying one threshold to every scene.
- Using an index for a question it was not built for.
- Forgetting to mask cloud, shadow and water.
Glossary
| Term | Meaning |
|---|---|
| Spectral index | A formula that combines bands into one value per pixel |
| Normalised difference | The difference of two bands divided by their sum |
| NDVI | An index of green vegetation |
| MNDWI | A water index using green and shortwave infrared |
| Saturation | The loss of response at high values, as NDVI shows over dense canopy |
| dNBR | The change in NBR between two dates, used for burn severity |
Practise it
The tutorial Band combinations and spectral indices calculates NDVI, NDWI, MNDWI, NDBI and NBR in the Raster Calculator. The tutorial Raster analysis reclassifies NDVI, and the capstone uses NDVI to find change.
Test yourself
1. Why do normalised differences help in uneven lighting?
A factor that darkens every band equally, such as shadow, cancels when you divide by the sum, so index values stay closer than the raw bands.
2. Which band is near-infrared on Sentinel-2 and on Landsat 8?
B8 on Sentinel-2 and B5 on Landsat 8.
3. Why does MNDWI often work better than NDWI in a city?
NDWI uses the near-infrared, where built surfaces reflect well, so some can look like water. MNDWI uses the shortwave infrared, which separates them better.

