Идентифицируйте области растительности Используя интерактивную пороговую обработку 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 в рабочую область. Этот пример использует выборку данных от набора данных Павии, который содержит и растительность и бесплодные области.

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

Вычислите NDVI

Вычислите значение NDVI для каждого пикселя в кубе данных при помощи ndvi функция. Функциональные выходные параметры 2D изображение, в котором значение каждого пикселя является значением 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);

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

Используйте функциональный 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);

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] Дж.В. Раус, Р.Х. Хэсс, Дж.А. Шелл и Д.В. Диринг. “Контролируя Системы Растительности в Великих равнинах с ERTS”. В Продолжениях Третьего Технологического Спутника Земных ресурсов - 1 Симпозиум, 1:309–17. Зеленая зона, NASA SP-351, Вашингтон, округ Колумбия, 1973.

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

Смотрите также

| | | | |

Похожие темы

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