Спектральные индексы и NDVI

Урок объясняет, как из двух спектральных каналов получают карту здоровья растительности.

NDVI (нормализованный разностный вегетационный индекс) — простой показатель «зелёности» поверхности, вычисляемый из красного и ближнего инфракрасного каналов.

Здоровый лист устроен хитро: хлорофилл жадно поглощает красный свет (для фотосинтеза), а внутренняя структура листа сильно отражает ближний инфракрасный (NIR), который глазу не виден. Значит, у живой растительности резкий контраст: красного отражается мало, NIR — много. Этот контраст и измеряет NDVI:

$$\text{NDVI} = \dfrac{\text{NIR} - \text{RED}}{\text{NIR} + \text{RED}}$$

Индекс лежит в диапазоне от −1 до +1. Густая зелень даёт 0,6–0,9, голая почва — около 0,1–0,2, вода и облака — отрицательные значения.

Считаем NDVI

samples = [
    ("густой лес",   0.50, 0.08),
    ("редкая трава", 0.30, 0.18),
    ("голая почва",  0.22, 0.20),
    ("вода",         0.05, 0.10),
]
for name, nir, red in samples:
    ndvi = (nir - red) / (nir + red)
    print(f"{name:>12}: NDVI = {ndvi:+.3f}")

Вывод:

  густой лес: NDVI = +0.724
редкая трава: NDVI = +0.250
 голая почва: NDVI = +0.048
        вода: NDVI = -0.333

Густой лес даёт высокий NDVI (0,72), редкая трава — средний, голая почва — около нуля, а вода уходит в минус. По карте NDVI агроном за минуты видит, где поле здорово, а где растения страдают от засухи или болезни — задолго до того, как это станет заметно глазу.

Как работает под капотом

Нормировка (деление на сумму) делает индекс устойчивым к освещённости: в тени облака яркость обоих каналов падает вместе, а их отношение почти сохраняется. Поэтому NDVI сравним между снимками — особенно если они сделаны в одинаковых условиях, что и обеспечивает солнечно-синхронная орбита из раздела 2. На базе той же идеи строят десятки индексов: NDWI для воды, NDBI для застройки, NBR для гарей.

Частые ошибки

NDVI часто считают «измерителем зелёного цвета» — это неверно: ключ в невидимом ближнем ИК, без него индекс не работает. Поэтому обычная RGB-камера телефона NDVI не даёт. Вторая ошибка — сравнивать NDVI снимков, сделанных в разное время суток и при разном угле Солнца, без поправок: тени и атмосфера искажают значения. Третья — забывать, что облака и их тени дают артефакты, и кадры приходится фильтровать.

Итог

  • NDVI = (NIR − RED)/(NIR + RED) — индекс «зелёности» от −1 до +1.
  • Живая растительность поглощает красный и отражает ближний ИК — отсюда контраст.
  • Нормировка делает индекс устойчивым к освещённости и сравнимым между снимками.
  • RGB-камера NDVI не даёт — нужен невидимый ближний ИК-канал.
Проверьте себя
1. Почему здоровая растительность даёт высокий NDVI?
AОна отражает много красного света
BОна поглощает красный (хлорофилл) и сильно отражает ближний ИК
CОна светится сама
DОна отражает только синий свет
2. Почему обычная RGB-камера телефона не может посчитать NDVI?
AУ неё мало пикселей
BВ формулу входит невидимый глазу ближний инфракрасный канал, которого у неё нет
CNDVI требует радара
DRGB-камеры слишком яркие
3. Зачем в NDVI делят разность каналов на их сумму?
AЧтобы увеличить значения
BЧтобы сделать индекс устойчивым к общей освещённости и сравнимым между снимками
CЧтобы убрать инфракрасный канал
DЭто случайная нормировка без смысла