exponenta event banner

nfindr

Извлечение сигнатур конечных элементов с помощью N-FINDR

    Описание

    пример

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

    пример

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

    Примечание

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

    Примеры

    свернуть все

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

    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) = [1 1 1e1 (1) e2 (1) ep (1)].

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

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

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

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

    Ссылки

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

    См. также

    | | |

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