ppi

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

    Описание

    пример

    endmembers = ppi(inputData,numEndmembers) извлекает сигнатуры конечных элементов из гиперспектральных данных cube при помощи алгоритма индекса чистоты пикселей (PPI). numEndmembers количество сигнатур конечных элементов, которые будут извлечены с помощью алгоритма PPI.

    Функция проецирует гиперспектральные данные на набор случайным образом сгенерированных единичных векторов. Пиксели с крайними значениями в направлении единичного вектора считаются чистыми пикселями, и они составляют конечные элементы. Значение конечного элемента во всех спектральных полосах во входных данных содержит сигнатуру конечного элемента. Для получения дополнительной информации см. «Алгоритмы».

    пример

    endmembers = ppi(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);

    Вычислите конечные элементы с помощью метода индекса чистоты пикселей (PPI). По умолчанию в ppi функция использует преобразование максимальной шумовой дроби (MNF) для предварительной обработки. Количество шашлыков по умолчанию, используемых для проекции, 104десять поднятых к степени четырех.

    endmembers = ppi(hcube.DataCube,numEndmembers);

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

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

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

    hcube = hypercube('paviaU.hdr');

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

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

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

    endmembers = ppi(hcube.DataCube,numEndmembers,'NumVectors',100,'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.

    Пример: ppi(inputData,7,'NumVectors',100,'Method','None')

    Количество векторов случайных модулей, заданное как разделенная разделенными запятой парами 'NumVectors'и положительное скалярное целое число. Точность извлеченных конечных элементов увеличивается с количеством векторов, используемых для проекции. Однако увеличение количества векторов также увеличивает вычислительную сложность.

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

    Метод уменьшения размерности, заданный как разделенная запятыми пара 'ReductionMethod'MNF', 'PCA', или 'None'.

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

    • 'MNF' - выполнить уменьшение размерности методом максимальной шумовой фракции (МНФ).

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

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

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

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

    свернуть все

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

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

    Алгоритмы

    Метод индекса чистоты пикселей (PPI) вычисляет ортогональные проекции значений гиперспектральных данных на наборе случайным образом сгенерированных единичных векторов, известных как skewers. Затем метод вычисляет количество PPI для каждого значения данных. Количество PPI - это количество раз, когда значение данных получается как экстремальная точка при проецировании на эти шашлыки. Значения данных с большим, чем ожидалось, количеством PPI содержат конечные элементы гиперспектральных данных. PPI является неитерационным методом, и соответствующие этапы суммируются следующим образом:

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

    2. Сгенерируйте k количество шпажек такой же длины, как и входные данные.

    3. Предположим r - вектор выборки, который обозначает пиксельные спектры. Затем ортогонально проецируйте вектор выборки на каждый шашлык и найдите экстрему.

    4. Сохраните местоположение каждого экстремального значения и подсчитайте его вхождения. Количество вхождений известно как количество PPI.

    5. Найдите количество PPI для каждых пиксельных спектров в кубе входных данных.

    6. Упорядочьте пиксельные спектры в порядке убывания их счетчиков PPI и идентифицируйте первое n число пиксельных спектров в упорядоченном наборе как конечные элементы. Количество конечных элементов, которые будут выбраны, определяется входной параметр numEndmembers.

    Ссылки

    [1] J.W Boardman, F.A. Kruse and R.O. Green, «Mapping target signatures with partial unmixing of AVIRIS data»., Technical Report, California, USA A. 1995.

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