sam

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

    Описание

    пример

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

    пример

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

    Примечание

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

    Примеры

    свернуть все

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

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

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

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

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

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

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

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

    свернуть все

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

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

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

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

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

    Подробнее о

    свернуть все

    Спектральный преобразователь угла

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

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

    Ссылки

    [1] Kruse, F.A., A.B. Lefkoff, J.W. Boardman, K.B. Heidebrecht, A.T. Shapiro, P.J. Barloon и A.F.H. Гетц. «Система спектральной обработки изображений (SIPS) - интерактивная визуализация и анализ данных спектрометра визуализации». Дистанционное зондирование окружения 44, № 2-3 (май 1993 года): 145-63. https://doi.org/10.1016/0034-4257 (93) 90013-N.

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