nfindr

Извлеките endmember подписи с помощью N-FINDR

    Описание

    пример

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

    пример

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

    Примечание

    Эта функция требует Image Processing Toolbox™ Гиперспектральная Библиотека Обработки изображений. Можно установить Image Processing Toolbox Гиперспектральная Библиотека Обработки изображений из Add-On Explorer. Для получения дополнительной информации об установке дополнений, смотрите, Получают и Управляют Дополнениями.

    Примеры

    свернуть все

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

    hcube = hypercube('paviaU.hdr');

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

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

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

    endmembers = nfindr(hcube.DataCube,numEndmembers);

    Постройте endmembers гиперспектральных данных.

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

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

    hcube = hypercube('paviaU.hdr');

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

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

    Вычислите endmembers использование метода N-FINDR. Задайте значение для количества итераций как 1 000. Выберите анализ главных компонентов (PCA) как метод сокращения размерности для предварительной обработки.

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

    Постройте endmembers гиперспектральных данных.

    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

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

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

    Аргументы name-value

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

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

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

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

    Метод сокращения размерности в виде одного из этих значений:

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

    • 'PCA' — Выполнять сокращение размерности при помощи метода анализа главных компонентов (PCA).

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

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

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

    свернуть все

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

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

    Алгоритмы

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

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

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

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

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

      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. Замените каждый endmember в наборе с r и вычислите объем симплексного V (E(2)).

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

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

    Ссылки

    [1] Зима, Майкл Э. “N-FINDR: Алгоритм для Быстрого Автономного Спектрального Определения члена конца в Гиперспектральных Данных”. Proc. SPIE Обработка изображений спектрометрии V 3753, (октябрь 1999): 266–75. https://doi.org/10.1117/12.366289.

    Смотрите также

    | | |

    Введенный в R2020a