主要内容

nfindr

使用N-FINDR提取端成员签名

    描述

    例子

    endmembers= nfindr (inputDatanumEndmembers从高光谱数据中提取端元特征多维数据集通过使用N-finder (N-FINDR)算法。numEndmembers为使用N-FINDR算法提取的端成员签名的个数。有关N-FINDR方法的更多信息,请参见算法

    例子

    endmembers= nfindr (inputDatanumEndmembers名称,值除了前面语法中的输入参数外,还使用一个或多个名称-值对参数指定选项。使用此语法设置迭代次数和降维选项。

    请注意

    此函数需要图像处理工具箱™高光谱成像库.你可以安装图像处理工具箱高光谱成像库从附加的探险家。有关安装附加组件的详细信息,请参见获取和管理附加组件

    例子

    全部折叠

    读取高光谱数据到工作空间。

    hcube =超立方体(“paviaU.hdr”);

    使用,找到存在于高光谱数据立方体中的光谱不同端元的数目countEndmembersHFC函数。

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

    使用N-FINDR方法计算端成员。默认情况下,nfindr函数使用最大噪声分数(MNF)变换进行预处理。迭代次数的默认值是估计的端成员数量的3倍。

    endmembers = nfindr (hcube.DataCube numEndmembers);

    绘制高光谱数据的端元。

    图绘制(endmembers)包含(带数字的) ylabel (的像素值) ylim([0 9000]) title({“Endmembers光谱”,['端元数= 'num2str (numEndmembers)]});

    读取高光谱数据到工作空间。

    hcube =超立方体(“paviaU.hdr”);

    使用,找到存在于高光谱数据立方体中的光谱不同端元的数目countEndmembersHFC函数。

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

    使用N-FINDR方法计算端成员。将迭代次数的值指定为1000。选择主成分分析(PCA)作为降维方法进行预处理。

    endmembers = nfindr (hcube。DataCube numEndmembers,“NumIterations”, 1000,“ReductionMethod”主成分分析的);

    绘制高光谱数据的端元。

    图绘制(endmembers)包含(带数字的) ylabel (的像素值) ylim([0 9000]) title({“Endmembers光谱”,['端元数= 'num2str (numEndmembers)]});

    输入参数

    全部折叠

    输入高光谱数据,指定为三维数字数组或超立方体对象。如果输入是a超立方体对象,然后函数从其中读取高光谱数据DataCube财产。

    高光谱数据是一个大小不一的数字数组——- - - - - -N——- - - - - -CN分别为高光谱数据的行数和列数。C为高光谱数据中的光谱波段数。

    数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

    要提取的端元数,指定为正标量整数。该值必须在范围[1C].C为输入的高光谱数据中的光谱波段数。

    数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

    名称-值参数

    指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

    例子:“NumIterations”nfindr(立方体,7日,100年,“方法”,“没有一个”)

    迭代次数,指定为正标量整数。默认值为3.PP要提取的端成员签名的数量。算法的计算时间随着迭代次数的增加而增加。

    数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

    降维方法,指定为以下值之一:

    • “延长”—使用最大噪声分数(MNF)方法进行降维。这是默认值。

    • 主成分分析的—采用主成分分析(PCA)方法降维。

    如果指定此参数,则该函数首先使用指定的方法降低输入数据的光谱维数。然后,从简化后的数据中计算端成员签名。

    数据类型:字符|字符串

    输出参数

    全部折叠

    端成员签名,返回为size矩阵C——- - - - - -P数据类型与输入的高光谱数据类型相同。

    数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

    算法

    N-FINDR是一种寻找高光谱数据端元的迭代方法。该方法假定由端元(最纯粹的像素)形成的单形的体积大于由任何其他像素[1]组合定义的任何其他体积。所涉及的步骤如下:

    1. 利用MNF或PCA计算输入数据的主成分波段,降低光谱维数。将要提取的主成分波段的数量设置为要提取的端元的数量。端元从主成分带中提取。

    2. 随机选择n将简化后的数据中的像素光谱数作为初始端元集。

    3. 对于迭代1,将初始端元集合表示为 e 1 1 e 2 1 e p 1

      将端元视为单形的顶点,用

      V E 1 | 依据 E 1 |

      在哪里 E 1 1 1 1 e 1 1 e 2 1 e p 1

    4. 对于迭代2,选择一个新的像素光谱r,这样 r e 1 1 e 2 1 e p 1

    5. 将集合中的每个端成员替换为r计算单形的体积VE(2)

    6. 取代th集合中的端元r,如果计算的体积VE(2)大于VE(1).这将产生一组更新的端元。例如,如果= 2时,在第二次迭代结束时得到的新端成员集为 e 1 2 e 2 2 r e p 2

    7. 对于每个迭代,选择一个新的像素光谱r重复步骤5和6。每次迭代都会产生一个端成员的更新集。当迭代总数达到指定值时,迭代结束NumIterations

    参考文献

    “N-FINDR:高光谱数据中快速自主光谱端元确定的算法”。SPIE成像光谱法3753,(1999年10月):266-75。https://doi.org/10.1117/12.366289。

    介绍了R2020a