nfindr

Извлечение подписей конечных элементов с помощью N-FINDR

    Описание

    пример

    endmembers = nfindr(inputData,numEndmembers) извлекает сигнатуры конечных элементов из гиперспектральных данных cube при помощи алгоритма N-finder (N-FINDR). numEndmembers - количество сигнатур конечных элементов, которые будут извлечены с помощью алгоритма N-FINDR. Для получения дополнительной информации о методе N-FINDR, см. Алгоритмы.

    пример

    endmembers = nfindr(inputData,numEndmembers,Name,Value) задает опции, использующие один или несколько аргументы пары "имя-значение" в дополнение к входным параметрам в предыдущем синтаксисе. Используйте этот синтаксис, чтобы задать опции для количества итераций и уменьшения размерности.

    Примечание

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

    Примеры

    свернуть все

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

    hcube = hypercube('paviaU.hdr');

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

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

    Вычислите конечные элементы с помощью метода N-FINDR. По умолчанию в nfindr функция использует преобразование максимальной шумовой дроби (MNF) для предварительной обработки. Значение по умолчанию для количества итераций в 3 раза превышает количество предполагаемых конечных элементов.

    endmembers = nfindr(hcube.DataCube,numEndmembers);

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

    figure
    plot(endmembers)
    xlabel('Band Number')
    ylabel('Pixel Values')
    ylim([0 9000])
    title({'Endmembers Spectra',['Number of Endmembers = ' num2str(numEndmembers)]});

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

    hcube = hypercube('paviaU.hdr');

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

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

    Вычислите конечные элементы с помощью метода N-FINDR. Задайте значение для количества итераций как 1000. Выберите анализ основного компонента (PCA) в качестве метода уменьшения размерности для предварительной обработки.

    endmembers = nfindr(hcube.DataCube,numEndmembers,'NumIterations',1000,'ReductionMethod','PCA');

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

    figure
    plot(endmembers)
    xlabel('Band Number')
    ylabel('Pixel Values')
    ylim([0 9000])
    title({'Endmembers Spectra',['Number of Endmembers = ' num2str(numEndmembers)]});

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

    свернуть все

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

    Гиперспектральные данные являются числовым массивом размера M -by- N -by- C. M и N являются количеством строк и столбцов в гиперспектральных данных соответственно. C - количество спектральных полос в гиперспектральных данных.

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

    Количество конечных элементов для извлечения, заданное как положительное скалярное целое число. Значение должно быть в области значений [1 C]. C - количество спектральных полос во входных гиперспектральных данных.

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

    Аргументы в виде пар имя-значение

    Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

    Пример: nfindr(cube,7,'NumIterations',100,'Method','None')

    Количество итераций, заданное как положительное скалярное целое число. Значение по умолчанию 3P. P - количество извлекаемых подписей конечных элементов. Время расчета алгоритма увеличивается с увеличением количества итераций.

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

    Метод уменьшения размерности, заданный в качестве одного из следующих значений:

    • 'MNF' - Выполнить уменьшение размерности с помощью метода максимальной шумовой фракции (MNF). Это значение по умолчанию.

    • 'PCA' - Выполнить уменьшение размерности с помощью метода анализа основных компонентов (PCA).

    Если вы задаете этот аргумент, функция сначала уменьшает спектральную размерность входных данных с помощью заданного метода. Затем он вычисляет подписи конечных элементов из сокращенных данных.

    Типы данных: char | string

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

    свернуть все

    Сигнатуры конечных элементов, возвращенные как матрица размера C -by - P и типа данных, аналогичных типу данных входных гиперспектральных данных.

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

    Алгоритмы

    N-FINDR является итеративным подходом для нахождения конечных элементов гиперспектральных данных. Метод принимает, что объем симплекса, образованный конечными элементами (чистыми пикселями), больше, чем любой другой объем, заданный любой другой комбинацией пикселей [1]. Ниже перечислены этапы:

    1. Вычислите полосы основных компонентов и уменьшите спектральную размерность входных данных с помощью MNF или PCA. Количество полос основного компонента, которые будут извлечены, устанавливается равным количеству членов конца, которые будут извлечены. Конечные элементы извлекаются из полос основных компонентов.

    2. Случайным n выберите количество пиксельных спектров из уменьшенных данных в качестве начального набора конечных элементов.

    3. Для итерации 1 обозначайте начальный набор конечных элементов как {e1(1),e2(1),,ep(1)}.

      Рассмотрим конечные элементы как вершины симплекса и вычислите объем при помощи

      V(E(1))=|det(E(1))|

      где E(1)=[111e1(1)e2(1)ep(1)].

    4. Для итерации 2 Выберите новые пиксельные спектры r, такой что r{e1(1),e2(1),,ep(1)}.

    5. Замените каждый конечный элемент в наборе на r и вычислите объем V симплекса (E(2)).

    6. Замените ith конечный элемент в наборе с r, если вычисленный объем V (E(2)) больше V (E(1)). Это приводит к обновлению набора конечных элементов. Для примера, если i = 2, новый набор конечных элементов, выведенных в конце второй итерации, {e1(2),e2(2)=r,,ep(2)}.

    7. Для каждой итерации выберите новые пиксельные спектры r и повторите шаги 5 и 6. Каждая итерация приводит к обновлению набора конечных элементов. Итерация заканчивается, когда общее количество итераций достигает заданного значения NumIterations.

    Ссылки

    [1] Winter, Michael E. «N-FINDR: алгоритм для быстрого определения автономного конца спектра в гиперспектральных данных». Proc. SPIE Imaging Spectrometry V 3753, (октябрь 1999): 266-75. https://doi.org/10.1117/12.366289.

    См. также

    | | |

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