sidsam

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

    Описание

    пример

    score = sidsam(inputData,refSpectrum) измеряет спектральное сходство между спектром каждого пикселя в гиперспектральных данных inputData и заданный эталонный спектр refSpectrum при использовании спектрального информационного гибридного метода divergence-spectral angle mapper (SID-SAM). Этот синтаксис используется для идентификации различных областей или материалов в кубе гиперспектральных данных. Дополнительные сведения о методе SID-SAM см. в разделе Дополнительные сведения.

    пример

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

    Примечание

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

    Примеры

    свернуть все

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

    hcube = hypercube('jasperRidge2_R198.hdr');

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

    numEndmembers = countEndmembersHFC(hcube,'PFA',10^-7);

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

    endmembers = nfindr(hcube,numEndmembers);

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

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

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

    score = zeros(size(hcube.DataCube,1),size(hcube.DataCube,2),numEndmembers);
    for i = 1:numEndmembers
        score(:,:,i) = sidsam(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('jasperRidge2_R198.hdr');

    Найдите первые 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,'Location','Bestoutside');

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

    score = zeros(1,numEndmembers-1);
    for itr = 1:numEndmembers-1
        testSpectrum = testSpectra(:,itr);
        score(itr) = sidsam(testSpectrum,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')
    legend('Reference spectrum','Maximum match test spectrum','Minimum match test spectrum',...
           'Location','Southoutside')
    title('Similarity Between Spectra')
    text(20,1000,['Max score: ' num2str(maxval)],'Color','r')
    text(145,1800,['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

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

    свернуть все

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

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

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

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

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

    Подробнее о

    свернуть все

    SID-SAM

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

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

    Вычислите значение SID с помощью распределений вероятностей опорного и тестового спектров:

    SID=i=1Cpilog(piqi)+i=1Cqilog(qipi).

    где,

    qi=rii=1Cri.

    pi=tii=1Cti.

    Затем вычислите гибридный счет SID-SAM как

    SIDSAM=SID×tan(α)

    Ссылки

    [1] Чанг, Чин-И. Новая гиперспектральная мера дискриминации для спектральной характеристики. Оптическая техника 43, № 8 (1 августа 2004): 1777. https://doi.org/10.1117/1.1766301.

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