как правильно написать функцию NDVI

Программы и алгоритмы для обработки данных дистанционного зондирования: ERDAS, ENVI и другие.
zlo717
Интересующийся
Сообщения: 16
Зарегистрирован: 30 июл 2009, 00:39
Репутация: 0

как правильно написать функцию NDVI

Сообщение zlo717 » 22 июн 2010, 21:48

я еще совсем неопытный пользователь данной материи, но порывшись в нэте нашел вот такую функцию:
FUNCTION_NDVI cala.b1,b2
NDVI_float=(float(b1)-b2)/(float(b1)+b2)
b1=BYTSCL(NDVI_float,min= -1.0, max= 1.0)
RETURN, b1
END
пробовал вставить -ничего не получается - значит неправильная функция :(
напишите пожалуйста,как она правильно пишется, и если можно подскажите литературу или сайт , где можно глянуть примеры написания формул под индексы!!!

zlo717
Интересующийся
Сообщения: 16
Зарегистрирован: 30 июл 2009, 00:39
Репутация: 0

Re: как правильно написать функцию NDVI

Сообщение zlo717 » 22 июн 2010, 23:31

ну или какуе нибудь другие функции для определения индекса растительности

alexandr cherepanov
Гуру
Сообщения: 534
Зарегистрирован: 30 ноя 2006, 13:31
Репутация: 116
Откуда: Moscow

Re: как правильно написать функцию NDVI

Сообщение alexandr cherepanov » 23 июн 2010, 11:15

NDVI можно рассчитать через стандартные инструменты
Transform -> NDVI
Spectral -> Vegetation Analysis -> Vegetation Index Calculator

либо просто через band math выражение (float(b4)-b3)/(float(b4)+b3), где b4 - ближняя ИК зона, b3 - красная зона
необходимости в написание функции здесь нету

если же вам все таки нужна функция то ту, которую вы пытались запустить, можно записать в виде:
FUNCTION NDVI_byte, b3, b4
NDVI_float=(float(b4)-b3)/(float(b4)+b3)
NDVI_byte=BYTSCL(NDVI_float, min= -1.0, max= 1.0)
RETURN, NDVI_byte
END

Запускается через Band Math выражением
NDVI_byte(b3, b4)

Просто NDVI
FUNCTION NDVI_float, b3, b4
NDVI_float=(float(b4)-b3)/(float(b4)+b3)
RETURN, NDVI_float
END

Запускается через Band Math выражением
NDVI_float(b3, b4)
Последний раз редактировалось alexandr cherepanov 14 мар 2011, 16:56, всего редактировалось 1 раз.
Причина: Исправление формул (float(b4)-b3)/(b4+b3) на (float(b4)-b3)/(float(b4)+b3)

zlo717
Интересующийся
Сообщения: 16
Зарегистрирован: 30 июл 2009, 00:39
Репутация: 0

Re: как правильно написать функцию NDVI

Сообщение zlo717 » 23 июн 2010, 21:02

а как настроить вот это : Spectral -> Vegetation Analysis -> Vegetation Index Calculator?
выдает какие то ошибки, и никак не хочет работать

olgagolubeva
Новоприбывший
Сообщения: 12
Зарегистрирован: 14 мар 2011, 14:04
Репутация: 0

Re: как правильно написать функцию NDVI

Сообщение olgagolubeva » 14 мар 2011, 14:47

у меня аналогичная ситуация, выдает ошибку: 'Wavelenghs must be defined to calculate vegetation indeces'
снимок сделан со спутника WorldView

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: как правильно написать функцию NDVI

Сообщение Boris » 14 мар 2011, 15:24

снимок с обычного WV не может быть использован для расчета NDVI, т.к. в нем всего 1 канал, а нужно что бы их было 2 - красный и инфракрасный. Судя по нумерации каналов в примере, он создан для данных Landsat, т.к. именно в нем каналы 3 и 4 соотвествуют К и ИК.
Ошибка 'Wavelenghs must be defined to calculate vegetation indeces" означает именно то, что в ней написано - у каналов не проставлен спектральный диапазон длин волн, вернее их средняя (а может медиана, точного описания не встречал). Из-за этого стандартная функция не знает какие два канала надо взять расчетов.

Lilu_GIS
Интересующийся
Сообщения: 28
Зарегистрирован: 14 мар 2011, 14:58
Репутация: 1

Re: как правильно написать функцию NDVI

Сообщение Lilu_GIS » 14 мар 2011, 16:11

Здравствуйте, при расчете NDVI с помощью функции band math по формуле ((float(b1)-float(b2))/(b1+b2)), значения индекса получаются намного выше и ниже единицы. не подскажите с чем это может быть связано??? и как избавиться от этих значений?

Аватара пользователя
nadiopt
Гуру
Сообщения: 4744
Зарегистрирован: 29 янв 2009, 13:27
Репутация: 495
Ваше звание: хрюкало
Откуда: Санкт-Петербург
Контактная информация:

Re: как правильно написать функцию NDVI

Сообщение nadiopt » 14 мар 2011, 16:41

а чево это за b1 и b2?
формула должна быть (float(b4)-b3)/(b4+b3) у вас там флоатов явно перебор
ин гроссен фамилен нихт клювен клац клац

alexandr cherepanov
Гуру
Сообщения: 534
Зарегистрирован: 30 ноя 2006, 13:31
Репутация: 116
Откуда: Moscow

Re: как правильно написать функцию NDVI

Сообщение alexandr cherepanov » 14 мар 2011, 16:54

float много не бывает :D

В общем ошибка с этим выражением возникает при использование байтовых величин.

То есть если вы считаете индекс по сырым данным Ландсат, то сумма Красного и БИК для некоторых объектов вполне может перевалить за 255 и получается ошибка в расчете значения для этого пиксела.

Во избежание проблем вернемся к старому длинному написанию с перестраховкой :P
(float(b4)-float(b3))/(float(b4)+float(b3))
или можно более короткий вариант
(float(b4)-b3)/(float(b4)+b3)

Ветку я щас подправлю.

olgagolubeva
Новоприбывший
Сообщения: 12
Зарегистрирован: 14 мар 2011, 14:04
Репутация: 0

Re: как правильно написать функцию NDVI

Сообщение olgagolubeva » 14 мар 2011, 17:47

я вложила рисунок, и судя по Available band list в этом снимке вроде бы 4 канала!?
Что тогда нужно сделать предварительно (и каким образом), чтоб расчитать NDVI, сделанный со спутника WV
И еще вопрос: расчет индекса NDVI со спутников WorldView и QuickBird будет по одинаковому принципу
Вложения
1.jpg
1.jpg (44.16 КБ) 16860 просмотров

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: как правильно написать функцию NDVI

Сообщение Boris » 16 мар 2011, 01:41

так что за WV? и какие его каналы вам достались? числом их действительно 4, но почему же тогда у них нет спектральных характеристик?
Должны вот так выглядеть:
001.jpg
001.jpg (83.16 КБ) 16824 просмотра

olgagolubeva
Новоприбывший
Сообщения: 12
Зарегистрирован: 14 мар 2011, 14:04
Репутация: 0

Re: как правильно написать функцию NDVI

Сообщение olgagolubeva » 16 мар 2011, 08:21

Может быть, дело в том, что режим съемки со спутника WorldView происходит в панхроматическом режиме, а не в мультиспектральном?

Аватара пользователя
nadiopt
Гуру
Сообщения: 4744
Зарегистрирован: 29 янв 2009, 13:27
Репутация: 495
Ваше звание: хрюкало
Откуда: Санкт-Петербург
Контактная информация:

Re: как правильно написать функцию NDVI

Сообщение nadiopt » 16 мар 2011, 11:52

если панхром, так там один канал черно-белый, где вы четыре взяли?
читаем здесь: http://www.worldview.ru/worldview2.html
ин гроссен фамилен нихт клювен клац клац

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: как правильно написать функцию NDVI

Сообщение Boris » 16 мар 2011, 16:15

так по ссылке из вообще 8! 8)

Аватара пользователя
Aerial_mapper
Участник
Сообщения: 65
Зарегистрирован: 26 янв 2010, 12:28
Репутация: 7
Откуда: Новосибирск

Re: как правильно написать функцию NDVI

Сообщение Aerial_mapper » 16 мар 2011, 17:07

В стандартной поставке WorldView-2 действительно четыре канала. Восемь поставляется по запросу. Но на рисунке olgagolubeva не видно какие именно каналы использованы.

Ответить

Вернуться в «Обработка ДДЗ»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя