exponenta event banner

sidsam

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

    Описание

    пример

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

    пример

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

    Примечание

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

    Примеры

    свернуть все

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

    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 свойства объекта.

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

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

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

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

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

    свернуть все

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

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

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

    Меньшая оценка SID-SAM указывает на сильное соответствие между тестовой сигнатурой и эталонной сигнатурой.

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

    Подробнее

    свернуть все

    SID-SAM

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

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

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

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

    где,

    qi=ri∑i=1Cri.

    pi=ti∑i=1Cti.

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

    SIDSAM = SID × tan (α)

    Ссылки

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

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