exponenta event banner

sam

Измерение спектрального подобия с помощью преобразователя спектральных углов

    Описание

    пример

    score = sam(inputData,refSpectra) измеряет спектральное сходство между спектрами каждого пикселя в гиперспектральных данных inputData и указанные эталонные спектры refSpectra с использованием алгоритма классификации анализатора спектральных углов (SAM). Этот синтаксис используется для идентификации различных областей или материалов в гиперспектральном кубе данных.

    пример

    score = sam(testSpectra,refSpectra) измеряет спектральное сходство между указанными тестовыми спектрами testSpectra и эталонные спектры refSpectra с помощью алгоритма классификации SAM. Этот синтаксис используется для сравнения спектральной сигнатуры неизвестного материала с эталонными спектрами или для вычисления спектральной изменчивости между двумя спектральными сигнатурами.

    Примечание

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

    Примеры

    свернуть все

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

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

    hcube = hypercube('jasperRidge2_R198.hdr');

    Определение количества спектрально различающихся полос в кубе данных с помощью countEndmembersHFC функция.

    numEndmembers = countEndmembersHFC(hcube)
    numEndmembers = 16
    

    Извлеките спектральные сигнатуры конечных элементов из куба данных с помощью алгоритма NFINDR.

    endmembers = nfindr(hcube,numEndmembers);

    Постройте график спектральных сигнатур конечных элементов. Результат показывает 14 спектрально различных областей в кубе данных.

    figure
    plot(endmembers)
    legend('Location','Bestoutside')

    Figure contains an axes. The axes contains 16 objects of type line.

    Вычислите спектральное угловое расстояние между каждым конечным элементом и спектром каждого пикселя в кубе данных.

    score = zeros(size(hcube.DataCube,1),size(hcube.DataCube,2),numEndmembers);
    for i = 1:numEndmembers
        score(:,:,i) = sam(hcube,endmembers(:,i));
    end

    Вычислите минимальное значение оценки из оценок расстояния, полученных для каждого спектра пикселей, относительно всех конечных элементов. Индекс каждой минимальной оценки идентифицирует спектр конечного элемента, которому спектр пикселя демонстрирует максимальное сходство. Значение индекса n в пространственном местоположении (x, y) в матрице оценки указывает, что спектральная сигнатура пикселя в пространственном местоположении (x, y) в кубе данных лучше всего соответствует спектральной сигнатуре n-го конечного элемента.

    [~,matchingIndx] = min(score,[],3);

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

    rgbImg = colorize(hcube,'Method','RGB');
    figure('Position',[0 0 1100 500])
    subplot('Position',[0 0.15 0.4 0.8])
    imagesc(rgbImg)
    axis off
    title('RGB Image of Hyperspectral Data')
    subplot('Position',[0.45 0.15 0.4 0.8])
    imagesc(matchingIndx)
    axis off
    title('Indices of Matching Endmembers')
    colorbar

    Figure contains 2 axes. Axes 1 with title RGB Image of Hyperspectral Data contains an object of type image. Axes 2 with title Indices of Matching Endmembers contains an object of type image.

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

    hcube = hypercube('indian_pines.dat');

    Найдите десять конечных элементов гиперспектральных данных.

    numEndmembers = 10;
    endmembers = nfindr(hcube,numEndmembers);

    Первый конечный элемент рассматривается как опорный спектр, а остальные конечные элементы - как тестовый спектр. Вычислите оценку SAM между эталонным и тестовым спектром.

    score = zeros(1,numEndmembers-1);
    refSpectrum = endmembers(:,1);
    for i = 2:numEndmembers
        testSpectrum = endmembers(:,i);
        score(i-1) = sam(testSpectrum,refSpectrum);
    end

    Найдите тестовый спектр, который демонстрирует максимальное сходство (минимальное расстояние) с эталонным спектром. Затем найдите тестовый спектр, который демонстрирует минимальное сходство (максимальное расстояние) с эталонным спектром.

    [minval,minidx] = min(score);
    maxMatch = endmembers(:,minidx);
    [maxval,maxidx] = max(score);
    minMatch = endmembers(:,maxidx);

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

    figure
    plot(refSpectrum)
    hold on
    plot(maxMatch,'k')
    plot(minMatch,'r')
    xlabel('Band Number')
    ylabel('Data Values')
    legend('Reference spectrum','Minimum match test spectrum','Maximum match test spectrum',...
           'Location','Southoutside')
    title('Similarity Between Spectra')
    annotation('textarrow',[0.25 0.25],[0.4 0.5],'String',['Max score: ' num2str(maxval)])
    annotation('textarrow',[0.6 0.55],[0.6 0.45],'String',['Min score: ' num2str(minval)])

    Figure contains an axes. The axes with title Similarity Between Spectra contains 3 objects of type line. These objects represent Reference spectrum, Minimum match test spectrum, Maximum match test spectrum.

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

    свернуть все

    Входные гиперспектральные данные, указанные как hypercube объект или 3-D числовой массив, содержащий куб данных. Если входным значением является hypercube , данные считываются из DataCube свойства объекта.

    Тестовые спектры, указанные как вектор С-элемента. Тестовые спектры представляют собой спектральную сигнатуру неизвестной области или материала.

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    Эталонные спектры, указанные как вектор C-элемента. Эталонные спектры представляют собой спектральную сигнатуру известной области или материала. Функция сопоставляет тестовые спектры с этими значениями.

    Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

    свернуть все

    Оценка SAM, возвращенная как скаляр или матрица. Выходные данные представляют собой

    • scalar - если указать testSpectra входной аргумент. Функция сопоставляет тестовую спектральную сигнатуру с эталонной спектральной сигнатурой и возвращает скалярное значение. И тестовый, и эталонный спектры должны быть векторами одинаковой длины.

    • matrix - если указать inputData входной аргумент. Функция сопоставляет спектральную сигнатуру каждого пикселя в кубе данных с эталонной спектральной сигнатурой и возвращает матрицу. Если куб данных имеет размер M-на-N-на-C, а эталонные спектры являются вектором длины C, то выходная матрица имеет размер M-на-N.

    Каждый элемент оценки SAM представляет собой спектральный угол в радианах в диапазоне [0, 3.142]. Меньший балл SAM указывает на сильное совпадение между тестовой сигнатурой и эталонной сигнатурой.

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

    Подробнее

    свернуть все

    Отображение спектрального угла

    Учитывая тестовые спектры t и эталонные спектры r длины C, оценка SAM α вычисляется как

    α = cos 1 (∑i=1Ctiri∑i=1Cti2∑i=1Cri2).

    Ссылки

    [1] Крузе, Ф.А., А.Б. Лефкофф, Дж.У. Бордман, К.Б. Хайдебрехт, А.Т. Шапиро, П.Дж. Барлоон и А.Ф.Х. Гетц. «Система обработки спектральных изображений (SIPS) - интерактивная визуализация и анализ данных спектрометра визуализации». Дистанционное зондирование окружающей среды 44, № 2-3 (май 1993 года): 145-63. https://doi.org/10.1016/0034-4257 (93) 90013-N.

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