spectralIndices

Вычисление гиперспектральных индексов

Описание

пример

indices = spectralIndices(hcube) вычисляет индексы зелености: повышенный индекс растительности (EVI), модифицированный индекс коэффициента поглощения хлорофилла (MCARI) и индекс простого отношения (SR) гиперспектральных данных. Функция считывает кубик данных и значения длины волны, сохраненные в объекте гиперкуба hcube для вычисления индексов зелености.

пример

indices = spectralIndices(hcube,indexNames) вычисляет один или несколько спектральных индексов, заданных indexNames.

indices = spectralIndices(hcube,'all') вычисляет все поддерживаемые спектральные индексы.

indices = spectralIndices(___,'BlockSize',blocksize) задает размер блока для блочной обработки куба гиперспектральных данных с помощью аргумента пары "имя-значение" 'BlockSize'. Можно задать 'BlockSize' аргумент пары "имя-значение" в дополнение к входным параметрам в предыдущих синтаксисах.

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

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

Примечание

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

Примечание

Эта функция требует библиотеки Image Processing Toolbox™ гиперспектральной визуализации. Можно установить библиотеку Image Processing Toolbox Hyperspectral Imaging Library из Add-On Explorer. Дополнительные сведения об установке дополнений см. в разделе Получение и управление Дополнений.

Примеры

свернуть все

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

hcube = hypercube('indian_pines.dat');

Вычислите значение спектральных индексов для каждого пикселя в кубе данных. По умолчанию в spectralIndices функция возвращает индекс простого отношения (SR), улучшенный индекс растительности (EVI) и модифицированный индекс коэффициента поглощения хлорофилла (MCARI).

indices = spectralIndices(hcube);

Смотрите имена индексов в выход struct indices. Считайте соответствующие изображения индекса, возвращенные на выходе.

indices.IndexName
ans = 
"Simple Ratio (SR)"
ans = 
"Enhanced Vegetation Index (EVI)"
ans = 
"Modified Chlorophyll Absorption Ratio Index (MCARI)"
srImg = indices(1).IndexImage;
eviImg = indices(2).IndexImage;
mcariImg = indices(3).IndexImage;

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

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

Отображение исходных и вычисленных индексных изображений. Значение индекса SR, больше 3, означает растительность. Индекс EVI идентифицирует плотную растительность, и типичное значение индекса EVI для здоровой растительности находится между 0,2 и 0,8. Индекс MCARI означает обилие хлорофилла в области.

fig = figure('Position',[0 0 800 700]);

axes1 = axes('Parent',fig,'Position',[0 0.54 0.42 0.42]);
imagesc(rgbImg,'Parent',axes1);
axis off
title('RGB Image of Data Cube')

axes2 = axes('Parent',fig,'Position',[0.5 0.54 0.45 0.42]);
imagesc(srImg,'Parent',axes2);
axis off
title('SR Image')
colorbar

axes3 = axes('Parent',fig,'Position',[0 0.035 0.45 0.42]);
imagesc(eviImg,'Parent',axes3);
axis off
title('EVI Image')
colorbar

axes4 = axes('Parent',fig,'Position',[0.5 0.035 0.45 0.42]);
imagesc(mcariImg,'Parent',axes4);
axis off
title('MCARI Image')
colorbar

Figure contains 4 axes. Axes 1 with title RGB Image of Data Cube contains an object of type image. Axes 2 with title SR Image contains an object of type image. Axes 3 with title EVI Image contains an object of type image. Axes 4 with title MCARI Image contains an object of type image.

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

hcube = hypercube('jasperRidge2_R198.img');

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

indices = spectralIndices(hcube,'MNDWI');
mndwiImg = indices.IndexImage;

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

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

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

fig = figure('Position',[0 0 700 400]);
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.15 0.47 0.7]);
imagesc(mndwiImg,'Parent',axes2)
colorbar
axis off
title('MNDWI Image')

Figure contains 2 axes. Axes 1 with title RGB Image of Data Cube contains an object of type image. Axes 2 with title MNDWI Image contains an object of type image.

Водные области обычно имеют значения MNDWI более 0,09. Выполните пороговое сохранение изображения MNDWI для сегментации водных областей. Задайте пороговое значение.

threshold = 0.09;

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

bw = mndwiImg > threshold;

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

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

Figure contains an axes. The axes with title Water Region Overlaid on RGB Image contains an object of type image.

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

свернуть все

Входные гиперспектральные данные, заданные как hypercube объект. The DataCube свойство hypercube объект содержит кубик гиперспектральных данных.

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

Поддерживаемые спектральные индексы
indexNamesОписание
'CAI'Индекс поглощения целлюлозы
'CMR'Соотношение глинистых минералов
'EVI'Повышенный индекс растительности
'GVI'Индекс зеленой растительности
'MCARI'Индекс модифицированного коэффициента поглощения хлорофилла
'MIVI'Модифицированный треугольный индекс растительности
'MNDWI'Измененный нормированный разностный индекс воды
'MSI'Индекс напряжения влаги
'NBR'Нормализованный коэффициент горения
'NDBI'Нормализованный индекс нарастания различия
'NDMI'Нормализованный разностный индекс бурового раствора
'NDNI' Нормализованный разностный индекс азота
'NDVI'Нормализованный индекс различия растительности
'OSAVI'Оптимизированный индекс растительности, скорректированный по почве
'PRI'Индекс фотохимической отражательной способности
'SR'Простое соотношение

Пример: indexNames = 'PRI'indexNames = "PRI"indexNames = {'NDVI,'OSAVI'}indexNames = {"GVI","NDMI"}

Типы данных: char | string

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

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

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

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

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

свернуть все

Спектральные значения индексов гиперспектральных данных, возвращенные как структура с двумя полями: IndexName и IndexImage.

ОбластиОписание
IndexNameИмена спектральных индексов, вычисленных для гиперспектральных данных, возвращаются в виде строки.
IndexImageИзображение индекса возвращается как матрица. Каждое значение пикселя является значением спектрального индекса, вычисленным для всех спектральных полос. Если размер заданного на входе куба гиперспектральных данных M -by- N -by- C, размер изображения индекса M -by- N.

Размер структуры output зависит от количества спектральных индексов, вычисленных для гиперспектральных данных.

  • Если второй входной параметр indexNames не задан, выход является массивом структур размера 1 на 3. Массив структур содержит изображения индекса, соответствующие индексам EVI, MCARI и SR.

  • Если второй входной параметр indexNames задан и имеет длину 1-by - k, выход представляет собой массив структур размером 1-by - k. Можно использовать запись через точку, чтобы считать выходы, полученные для каждого спектрального индекса, заданного на входе.

  • Если второй входной параметр 'all', выход является массивом структур размером 1 на 16. Массив структур содержит изображения индекса, соответствующие всем поддерживаемым спектральным индексам.

Типы данных: struct

См. также

|

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