Идентифицируйте области растительности с помощью интерактивного порога NDVI

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

NDVI=(NIR-R)(NIR+R)

Значение NDVI пикселя является скаляром от -1 до 1. Пиксели в областях со здоровой или плотной растительностью отражают больше света NIR, что приводит к высоким значениям NDVI. Пиксели в областях с нездоровой растительностью или бесплодной землей поглощают больше света NIR, что приводит к низким или отрицательным значениям NDVI. Исходя из значения NDVI, можно определить растительность в области как плотную растительность, умеренную растительность, разреженную растительность или отсутствие растительности. Это типичная область значений значений NDVI для каждого типа области:

  • Плотная растительность - Больше чем или равно 0,6

  • Умеренная растительность - в области значений [0,4, 0,6)

  • Разреженная растительность - в области значений [0,2 0,4)

  • Без растительности - Ниже 0.2

Сегментировать желаемые области растительности можно путем выполнения порогового значения с помощью значений NDVI. В этом примере вы будете в интерактивном режиме выбирать и изменять пороговые значения, чтобы идентифицировать различные области растительности в кубе гиперспектральных данных на основе их значений NDVI.

Чтение гиперспектральных данных

Считывайте гиперспектральные данные из файла формата ENVI в рабочую область. В этом примере используется выборка данных из набора данных Pavia, которая содержит как растительные, так и бесплодные области.

hcube = hypercube('paviaU.dat','paviaU.hdr');

Вычисление NDVI

Вычислите значение NDVI для каждого пикселя в кубе данных с помощью ndvi функция. Функция выводит 2-D изображение, в котором значение каждого пикселя является значением NDVI для соответствующего пикселя в кубе гиперспектральных данных.

ndviImg = ndvi(hcube);

Идентифицируйте области растительности с помощью порога

Идентифицируйте различные области в гиперспектральных данных с помощью многоуровневого порога. Задайте матрицу меток, чтобы назначить значения меток пикселям на основе заданных пороговых значений. Можно задать пороги на основе вычисленных значений NDVI.

  • Пометьте значение 1 - Задайте пороговое значение 0,6 и найдите пиксели со значениями NDVI, большими или равными порогу. Это плотные пиксели растительности.

  • Пометьте значение 2 - Задайте нижний пороговый предел 0,4 и верхний пороговый предел 0,6. Найдите пиксели со значениями NDVI, большими или равными 0,4 и меньше 0,6. Это умеренные пиксели растительности.

  • Пометьте значение 3 - Задайте нижний пороговый предел 0,2 и верхний пороговый предел 0,4. Найдите пиксели со значениями NDVI, большими или равными 0,2 и меньше 0,4. Это разреженные пиксели растительности.

  • Пометьте значение 4 - Задайте пороговое значение 0,2 и найдите пиксели со значениями NDVI меньше, чем порог. Это не пиксели растительности.

L = zeros(size(ndviImg));
L(ndviImg >= 0.6) = 1;
L(ndviImg >= 0.4 & ndviImg < 0.6) = 2;
L(ndviImg >= 0.2 & ndviImg < 0.4) = 3;
L(ndviImg < 0.2) = 4;

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

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

Задайте палитру, чтобы отобразить каждое значение в матрице меток в другом цвете. Наложите матрицу меток на изображение RGB.

cmap = [0 1 0; 0 0 1; 1 1 0; 1 0 0];
overlayImg = labeloverlay(rgbImg,L,'Colormap',cmap);

Создайте интерактивный интерфейс для порогового значения NDVI

Чтобы создать интерактивный интерфейс, сначала создайте окно рисунка с помощью uifigure функция. Затем добавьте две панели к окну рисунка для отображения входа изображения и наложенного изображения один за другим.

h = uifigure('Name','Interactive NDVI Thresholding','Position',[200,50,1000,700]);

viewPanel1 = uipanel(h,'Position',[2 220 400 450],'Title','Input Image');
ax1 = axes(viewPanel1);
image(rgbImg,'Parent',ax1)

viewPanel2 = uipanel(h,'Position',[400 220 400 450],'Title','Types of Vegetation Regions in Input Image');
ax2 = axes(viewPanel2);
image(overlayImg,'Parent',ax2)

Аннотируйте окно рисунка цветом для каждой метки и связанной с ней плотностью растительности. Значение палитры для плотной растительности зелёное, умеренная растительность синяя, редкая растительность жёлтая, растительность красная.

annotation(h,'rectangle',[0.82 0.82 0.03 0.03],'Color',[0 1 0],'FaceColor',[0 1 0]);
annotation(h,'rectangle',[0.82 0.77 0.03 0.03],'Color',[0 0 1],'FaceColor',[0 0 1]);
annotation(h,'rectangle',[0.82 0.72 0.03 0.03],'Color',[1 1 0],'FaceColor',[1 1 0]);
annotation(h,'rectangle',[0.82 0.67 0.03 0.03],'Color',[1 0 0],'FaceColor',[1 0 0]);
annotation(h,'textbox',[0.85 0.80 0.9 0.05],'EdgeColor','None','String','Dense Vegetation');
annotation(h,'textbox',[0.85 0.75 0.9 0.05],'EdgeColor','None','String','Moderate Vegetation');
annotation(h,'textbox',[0.85 0.70 0.9 0.05],'EdgeColor','None','String','Sparse Vegetation');
annotation(h,'textbox',[0.85 0.65 0.9 0.05],'EdgeColor','None','String','No Vegetation');

Создайте ползунки для интерактивного изменения порогов. Использование uislider функция для добавления ползунка для регулировки минимального порогового значения и ползунка для регулировки максимального порогового значения.

slidePanel1 = uipanel(h,'Position',[400,120,400,70],'Title','Minimum Threshold Value');
minsld = uislider(slidePanel1,'Position',[30,40,350,3],'Value',-1,'Limits',[-1 1],'MajorTicks',-1:0.4:1);
slidePanel2 = uipanel(h,'Position',[400,30,400,70],'Title','Maximum Threshold Value');
maxsld = uislider(slidePanel2,'Position',[30,35,350,3],'Value',1,'Limits',[-1 1],'MajorTicks',-1:0.4:1);

Figure Interactive NDVI Thresholding contains 2 axes and other objects of type uipanel. Axes 1 contains an object of type image. Axes 2 contains an object of type image.

Интерактивное изменение порога

Используйте функцию ndviThreshold для изменения минимального и максимального пороговых пределов. Когда вы перемещаете ползунок и отпускаете кнопку мыши, ValueChangedFcn коллбэк обновляет значение ползунка и устанавливает значение ползунка в качестве нового порога. Вы должны вызвать ndviThreshold функция отдельно для минимального порогового ползунка и максимального порогового ползунка. Измените пороговые пределы путем настройки ползунков. Это позволяет вам проверить типы областей растительности в пределах заданных пороговых пределов.

minsld.ValueChangedFcn = @(es,ed) ndviThreshold(minsld,maxsld,ndviImg,rgbImg,ax2,cmap);
maxsld.ValueChangedFcn = @(es,ed) ndviThreshold(minsld,maxsld,ndviImg,rgbImg,ax2,cmap);

The ndviThreshold функция генерирует новую матрицу меток с помощью обновленных пороговых значений и динамически обновляет наложенное изображение в окне рисунка.

Создайте функцию обратного вызова

Создайте функцию обратного вызова, чтобы в интерактивном режиме изменить пороговые пределы и динамически обновлять результаты.

function ndviThreshold(minsld,maxsld,ndviImg,rgbImg,ax2,cmap)
L = zeros(size(ndviImg));
minth = round(minsld.Value,2);
maxth = round(maxsld.Value,2);

if minth > maxth
    error('Minimum threshold value must be less than the maximum threshold value')
end  

if minth >= 0.6
    % Label 1 for Dense Vegetation
    L(ndviImg >= minth & ndviImg <= maxth) = 1;
    overlayImg = labeloverlay(rgbImg,L,'Colormap',cmap);
elseif minth >= 0.4 && minth < 0.6
    % Label 1 for Dense Vegetation
    % Label 2 for Moderate Vegetation
    if maxth >= 0.6
        L(ndviImg >= minth & ndviImg < 0.6) = 2;
        L(ndviImg >= 0.6 & ndviImg <= maxth) = 1;
    else
        L(ndviImg >= minth & ndviImg < maxth) = 2;
    end
    overlayImg = labeloverlay(rgbImg,L,'Colormap',cmap);
elseif minth >= 0.2 && minth <0.4
    % Label 1 for Dense Vegetation
    % Label 2 for Moderate Vegetation
    % Label 3 for Sparse vegetation
    if maxth < 0.4
        L(ndviImg >= minth & ndviImg <= maxth) = 3;
    elseif maxth >=0.4 && maxth < 0.6
        L(ndviImg >= minth & ndviImg < 0.4) = 3;
        L(ndviImg >= 0.4 & ndviImg <= maxth) = 2;
    elseif maxth >= 0.6
        L(ndviImg >= minth & ndviImg < 0.4) = 3;
        L(ndviImg >= 0.4 & ndviImg < 0.6) = 2;
        L(ndviImg >= 0.6 & ndviImg <= maxth) = 1;
    end
    overlayImg = labeloverlay(rgbImg,L,'Colormap',cmap);
elseif minth < 0.2
    % Label 1 for Dense Vegetation
    % Label 2 for Moderate Vegetation
    % Label 3 for Sparse vegetation
    % Label 4 for No Vegetation
    L(ndviImg >= minth & ndviImg < 0.2) = 4;
    
    if maxth >= 0.6
        L(ndviImg >= 0.6 & ndviImg <= maxth) = 1;
        L(ndviImg >= 0.4 & ndviImg < 0.6) = 2;
        L(ndviImg >= 0.2 & ndviImg < 0.4) = 3;
    elseif maxth >=0.4 && maxth < 0.6
        L(ndviImg >= 0.4 & ndviImg <= maxth) = 2;
        L(ndviImg >= 0.2 & ndviImg < 0.4) = 3;
    elseif maxth >=0.2 && maxth < 0.4
        L(ndviImg >= maxth & ndviImg < 0.4) = 3;
    end
    overlayImg = labeloverlay(rgbImg,L,'Colormap',cmap);
elseif minth == maxth
    if maxth < 0.2
        L(ndviImg == minth) = 4;
    elseif maxth >=0.4 && maxth < 0.6
        L(ndviImg == maxth) = 2;
    elseif maxth >=0.2 && maxth < 0.4
        L(ndviImg == maxth) = 3;
    elseif maxth >= 0.6
        L(ndviImg == maxth) = 1;
    end
    overlayImg = labeloverlay(rgbImg,L,'Colormap',cmap);
end
% Display the overlay image.
image(overlayImg,'parent',ax2);
% Store updated labelled image
minsld.UserData = L;
maxsld.UserData = L;
end

Ссылки

[1] J.W. Rouse, R.H. Hass, J.A. Schell и D.W. Deering. Мониторинг систем растительности на Великих равнинах с ERTS. В трудах третьего спутника технологии Земных ресурсов - 1 симпозиум, 1: 309-17. Гринбельт, SP-351 НАСА, Вашингтон, округ Колумбия, 1973.

[2] Haboudane, D «. Гиперспектральные индексы растительности и новые алгоритмы предсказания зеленого LAI полог сельскохозяйственных культур: моделирование и валидация в контексте точного сельского хозяйства». Дистанционное зондирование окружения 90, № 3 (15 апреля 2004 года): 337-52. https://doi.org/10.1016/j.rse.2003.12.013.

См. также

| | | | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте