exponenta event banner

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' аргумент пары имя-значение, необходимо иметь R2021a MATLAB или более позднюю версию.

Примечание

Для выполнения этой функции требуется библиотека гиперспектральных изображений Toolbox™ обработки изображений. Можно установить библиотеку гиперспектральных изображений панели инструментов обработки изображений из проводника надстроек. Дополнительные сведения об установке надстроек см. в разделе Получение надстроек и управление ими.

Примеры

свернуть все

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

hcube = hypercube('indian_pines.dat');

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

indices = spectralIndices(hcube);

Проверьте имена индексов в структуре вывода 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 объект. 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.

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

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

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

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

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

См. также

|

Представлен в R2020b