jmsam

Измерьте спектральное сходство с использованием метода Jeffries Matusita-Spectral Angle Mapper

    Описание

    пример

    score = jmsam(inputData,refSpectrum) измеряет спектральное сходство между спектром каждого пикселя в гиперспектральных данных inputData и заданный эталонный спектр refSpectrum при использовании метода Jeffries Matusita-Spectral Angle Mapper (JMSAM). Этот синтаксис используется для идентификации различных областей или материалов в кубе гиперспектральных данных. Дополнительные сведения о методе JMSAM см. в разделе Дополнительные сведения.

    пример

    score = jmsam(testSpectrum,refSpectrum) измеряет спектральное сходство между заданным тестовым спектром testSpectrum и опорный спектр refSpectrum с использованием метода JMSAM. Используйте этот синтаксис для сравнения спектральной сигнатуры неизвестного материала с ссылкой спектром или для вычисления спектральной изменчивости между двумя спектральными сигнатурами.

    Примечание

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

    Примеры

    свернуть все

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

    hcube = hypercube('paviaU.dat');

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

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

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

    figure
    plot(endmembers)
    xlabel('Bands')
    ylabel('Reflectance')
    legend('Location','Bestoutside')

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

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

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

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

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

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

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

    figure('Position',[0 0 800 400])
    subplot('Position',[0 0.1 0.4 0.8])
    imagesc(rgbImg)
    axis off
    title('RGB Image of Hyperspectral Data')
    subplot('Position',[0.45 0.1 0.45 0.8])
    imagesc(matchingIdx)
    axis off
    title('Indices of Matching Endmembers')
    colorbar

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

    hcube = hypercube('indian_pines.dat');

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

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

    Рассмотрим первый конечный элемент как ссылка спектр, а остальные конечные элементы как тестовые спектры.

    refSpectrum = endmembers(:,1);
    testSpectra = endmembers(:,2:end);

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

    figure
    plot(refSpectrum,'LineWidth',2)
    hold on
    plot(testSpectra)
    hold off
    label = cell(1,numEndmembers-1);
    label{1} = 'Reference';
    for itr = 1:numEndmembers-1
        label{itr+1} = ['endmember-' num2str(itr)];
    end
    xlabel('Bands')
    ylabel('Reflectances')
    legend(label)
    xlim([1 size(hcube.DataCube,3)]);

    Вычислите счет JM-SAM между ссылкой и тестовым спектрами.

    score = zeros(1,numEndmembers-1);
    for itr = 1:numEndmembers-1
        score(itr) = jmsam(testSpectra(:,itr),refSpectrum);
    end

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

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

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

    figure
    plot(refSpectrum,'LineWidth',2)
    hold on
    plot(maxMatch,'k')
    plot(minMatch,'r')
    xlabel('Band Number')
    ylabel('Data Values')
    xlim([1 size(hcube.DataCube,3)]);
    legend('Reference spectrum','Maximum match test spectrum','Minimum match test spectrum')
    title('Similarity Between Spectra')
    text(5,1000,['Max score: ' num2str(maxval)],'Color','r')
    text(140,3000,['Min score: ' num2str(minval)],'Color','k')

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

    свернуть все

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

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

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

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

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

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

    свернуть все

    JMSAM счета, возвращается как скаляр или матрица. Выходные выходы:

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

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

    Меньший счет JMSAM указывает на сильное соответствие между тестовой подписью и ссылкой подписью.

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

    Подробнее о

    свернуть все

    Jeffries Matusita-Spectral Angle Mapper (JMSAM)

    Метод JMSAM вычисляет спектральное сходство на основе расстояний Jeffris Matusita (JM) и SAM между двумя спектрами. Позвольте r и t быть ссылкой и тестовым спектрами соответственно.

    Сначала вычислите расстояние JM,

    JMdistance=2(1eB)

    где B - расстояние Бхаттачарьи,

    B=18(μtμr)T[σt+σr2]1(μtμr)+12ln[|σt+σr2||σt||σr|]

    μr и μt являются средними значениями эталонного и тестового спектров соответственно. σr и σt являются ковариацией значениями ссылки и тестового спектров соответственно.

    Затем вычислите значение SAM α с помощью тестовых спектров t и эталонного r спектров длины C,

    α=cos1(i=1Ctirii=1Cti2i=1Cri2).

    Наконец, вычислите счет JMSAM как:

    JMSAM=JMdistance×tan(α)

    Ссылки

    [1] Падма, С., и С. Санджееви. Смешанная мера на основе Джеффриса Матуситы для улучшения спектрального соответствия при гиперспектральном анализе изображений. Международный журнал прикладных наблюдений Земли и геоинформации 32 (октябрь 2014): 138-51. https://doi.org/10.1016/j.jag.2014.04.001.

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