ndvi

Нормированный индекс растительности

    Описание

    пример

    output = ndvi(hcube) вычисляет нормированный индекс растительности (NDVI) значение для каждого пикселя в кубе данных и возвращает изображение NDVI. Изображение NDVI отображает области растительного покрова входа гиперспектральные данные. Функция вычисляет значение NDVI с помощью красной полосы (R) и изображений полосы почти инфра красного (NIR) в кубе данных. ndvi функционируйте использует значения коэффициента отражения полосы на 800 нм и на 670 нм для красного и изображений полосы NIR соответственно.

    output = ndvi(hcube,'BlockSize',blocksize) задает размер блока для обработки блока гиперспектрального куба данных при помощи аргумента пары "имя-значение" 'BlockSize'.

    Функция делит входное изображение на отличные блоки, процессы каждый блок, и затем конкатенирует обработанный выход каждого блока, чтобы сформировать выходную матрицу. Гиперспектральные изображения являются наборами многомерных данных, которые могут быть слишком большими, чтобы поместиться в системную память в их полноте. Это может заставить систему исчерпывать память при выполнении ndvi функция. Если вы сталкиваетесь с такой проблемой, выполняете обработку блока при помощи этого синтаксиса.

    Например, ndvi(hcube,'BlockSize',[50 50]) делит входное изображение на неперекрывающиеся блоки размера 50 50 и затем вычисляет значения NDVI для пикселей в каждом блоке.

    Примечание

    Выполнять обработку блока путем определения 'BlockSize' аргумент пары "имя-значение", у вас должен быть MATLAB® R2021a или более поздний релиз.

    Примечание

    Эта функция требует Image Processing Toolbox™ Гиперспектральная Библиотека Обработки изображений. Можно установить Image Processing Toolbox Гиперспектральная Библиотека Обработки изображений из Add-On Explorer. Для получения дополнительной информации об установке дополнений, смотрите, Получают и Управляют Дополнениями.

    Примеры

    свернуть все

    Считайте гиперспектральные данные в рабочую область.

    hcube = hypercube('indian_pines.dat');

    Вычислите значение NDVI для каждого пикселя в кубе данных.

    ndviImg = ndvi(hcube);

    Оцените расширенное от контраста изображение RGB от исходного куба данных при помощи colorize функция.

    rgbImg = colorize(hcube,'Method','RGB','ContrastStretching',true);

    Отобразите оригинал и изображение NDVI.

    fig = figure('Position',[0 0 1200 600]);
    axes1 = axes('Parent',fig,'Position',[0 0.1 0.4 0.8]);
    imshow(rgbImg,'Parent',axes1)
    title('RGB Image of Data Cube')
    axes2 = axes('Parent',fig,'Position',[0.45 0.1 0.4 0.8]);
    imagesc(ndviImg,'Parent',axes2)
    colorbar
    title('NDVI Image')

    Области растительности обычно имеют значения NDVI от 0,2 и 0.8. Значения NDVI, меньше чем или равные 0,2, указывают на отсутствие растительности. Выполните пороговую обработку изображения NDVI, чтобы сегментировать области растительности. Задайте пороговое значение.

    threshold = 0.2;

    Сгенерируйте бинарное изображение со значением интенсивности 1 для пикселей со счетом, больше, чем или равный заданному порогу. Все другие пиксели имеют значение 0. Области в бинарном изображении со значением 1 соответствуйте областям растительности в кубе данных со значениями NDVI, больше, чем порог.

    bw = ndviImg > threshold;

    Наложите бинарное изображение на RGB, отображают и отображают наложенное изображение.

    overlayImg = imoverlay(rgbImg,bw,[0 1 0]);
    figure
    imagesc(overlayImg)
    title('Vegetation Region Overlaid on RGB Image')

    Вычислите растительный покров на основе общего количества пикселей в диапазоне и количестве пикселей со значением NDVI, больше, чем 0,2.

    numVeg = find(bw == 1);
    imgSize = size(hcube.DataCube,1)*size(hcube.DataCube,2);
    vegetationCover = length(numVeg)/imgSize
    vegetationCover = 0.5696
    

    Входные параметры

    свернуть все

    Введите гиперспектральные данные в виде hypercube объект. Функции читают гиперспектральный куб данных из DataCube свойство объекта и затем вычисляет значение NDVI каждого пикселя.

    Размер блоков данных в виде вектора с 2 элементами из положительных целых чисел. Элементы вектора соответствуют количеству строк и столбцов в каждом блоке, соответственно. Размер блоков данных должен быть меньше размера входного изображения. Деление гиперспектральных изображений в меньшие блоки включает вам большие наборы данных процесса, не исчерпывая память.

    • Если blocksize значение слишком мало, использование памяти функции уменьшает за счет увеличенного времени выполнения.

    • Если blocksize значение является большим или равным входному размеру изображения, время выполнения уменьшает за счет увеличенного использования памяти.

    Пример: 'BlockSize',[20 20] задает размер каждого блока данных как 20 20.

    Выходные аргументы

    свернуть все

    Выведите изображение NDVI, возвращенное как матрица размера M-by-N. M и N являются пространственными размерностями куба входных данных. Если типом данных куба входных данных является double, типом выходных данных является также double. В противном случае типом выходных данных является single.

    Функция вычисляет значение NDVI для каждого пикселя как

    NDVI=NIRRNIR+R,

    и значения находятся в области значений [-1, 1]. Значение близко к 1 указывает, что здоровая растительность, 0 указывает, что нездоровая растительность, и-1 не указывает ни на какую растительность.

    Типы данных: single | double

    Ссылки

    [1] Haboudane, D. “Гиперспектральные индексы Растительности и Новые Алгоритмы для Предсказания Зеленого LAI Навесов Обрезки: Моделирование и Валидация в Контексте Сельского хозяйства Точности”. Дистанционное зондирование Среды 90, № 3 (15 апреля 2004): 337–52. https://doi.org/10.1016/j.rse.2003.12.013.

    Введенный в R2020a