主要内容

归一化植被指数

归一化植被差指数

    描述

    例子

    输出=归一化植被指数(hcube计算数据立方体中每个像素的归一化植被指数(NDVI)值,并返回NDVI图像。NDVI图像显示输入的高光谱数据的植被覆盖区域。该函数使用数据立方体中的红色(R)波段和近红外(NIR)波段图像计算NDVI值。的归一化植被指数函数分别对红色和近红外波段图像使用670 nm和800 nm波段反射率值。

    输出=归一化植被指数(hcube“BlockSize”,blocksize通过使用名称-值对参数指定用于高光谱数据立方体的块处理的块大小“BlockSize”

    该函数将输入图像划分为不同的块,对每个块进行处理,然后将每个块处理后的输出连接起来,形成输出矩阵。高光谱图像是多维数据集,可能太大,无法完全装进系统内存中。方法时,可能导致系统内存不足归一化植被指数函数。如果遇到这样的问题,请使用此语法执行块处理。

    例如,归一化植被指数(hcube BlockSize, [50 50])将输入图像分成大小为50 × 50的不重叠块,然后计算每个块中像素的NDVI值。

    请注意

    来执行块处理“BlockSize”名称-值对参数,你必须有MATLAB®R2021a或更高版本。

    请注意

    此函数需要图像处理工具箱™高光谱成像库.您可以安装图像处理工具箱高光谱成像库从Add-On Explorer。有关安装外接程序的详细信息,请参见获取和管理外接组件

    例子

    全部折叠

    将高光谱数据读入工作空间。

    超立方体(“indian_pines.dat”);

    计算数据立方体中每个像素的NDVI值。

    ndviImg = ndvi(hcube);

    方法从原始数据多维数据集中估计对比度拉伸的RGB图像彩色化函数。

    rgbImg = colorize(hcube,“方法”“RGB”“ContrastStretching”,真正的);

    显示原始和NDVI图像。

    图=图(“位置”,[0 0 1200 600]);Axes1 =轴(“父”无花果,“位置”,[0 0.1 0.4 0.8]);imshow (rgbImg“父”axes1)标题(数据立方体的RGB图像) axes2 =轴(“父”无花果,“位置”,[0.45 0.1 0.4 0.8]);显示亮度图像(ndviImg“父”,axes2) colorbar title(“归一化植被指数图像”

    植被区域的NDVI值一般在0.2和0.8之间。NDVI值小于或等于0.2表示无植被。对NDVI图像进行阈值处理,对植被区域进行分割。指定阈值。

    阈值= 0.2;

    生成带有强度值的二值图像1对于分数大于或等于指定阈值的像素。所有其他像素的值都是0。二值图像中值为的区域1对应数据立方中NDVI值大于阈值的植被区域。

    bw = ndviImg >阈值;

    将二值图像叠加到RGB图像上并显示叠加图像。

    overlayImg = imoverlay(rgbImg,bw,[0 1 0]);image (overlayImg)“植被区域覆盖在RGB图像上”

    根据一个光谱波段的总像元数和NDVI值大于0.2的像元数计算植被覆盖度。

    numVeg = find(bw == 1);imgSize = size(hcube.DataCube,1)*size(hcube.DataCube,2);vegetationCover = length(num蔬菜)/imgSize
    vegetationCover = 0.5696

    这个例子告诉你如何:

    • 利用二维光谱数据作为超立方体来实现超光谱函数。

    • 利用分离植被光谱和非植被光谱归一化植被指数函数。

    加载二维光谱数据

    将包含20个印第安松树数据集端元的二维光谱数据加载到工作空间中。

    负载(“indian_pines_endmembers_20.mat”

    将印第安松树数据集的每个波段的波长值加载到工作空间中。

    负载(“indian_pines_wavelength.mat”

    准备用于高光谱函数的测试数据

    将二维光谱数据重塑为三维体积数据重塑函数。

    [numSpectra,spectralDim] = size(端点成员);dataCube =重塑(端元,[numSpectra 1 spectralDim]);

    创建3d超立方体对象,通过指定3-D卷数据来获得单个维度dataCube波长信息波长超立方体函数。

    hCube =超立方体(数据立方,波长);

    计算NDVI以分离植被和非植被光谱

    计算超立方体对象中每个频谱的NDVI值。

    ndviVal = ndvi(hCube);

    植被光谱的NDVI值通常大于零,而非植被光谱的NDVI值通常小于零。对植被光谱和非植被光谱进行阈值分割。

    index = ndviVal > 0;

    绘制植被和非植被端元图。

    Subplot (2,1,1) plot(endmembers(index,:)')“植被endmembers”)包含(“乐队”) ylabel (“反射价值观”)轴Subplot (2,1,2) plot(endmembers(~index,:)')“Non-Vegetation endmembers”)包含(“乐队”) ylabel (“反射价值观”)轴

    图中包含2个轴对象。标题为Vegetation端成员的Axes对象1包含17个类型为line的对象。标题为Non-Vegetation端成员的Axes对象2包含3个类型为line的对象。

    输入参数

    全部折叠

    输入高光谱数据,指定为超立方体对象。函数从中读取高光谱数据立方体DataCube属性,然后计算每个像素的NDVI值。

    数据块的大小,指定为2元素的正整数向量。向量的元素分别对应于每个块中的行数和列数。数据块的大小必须小于输入图像的大小。将高光谱图像划分为更小的块使您可以处理大型数据集,而不会耗尽内存。

    • 如果blocksize值太小,函数的内存使用会减少,但代价是执行时间增加。

    • 如果blocksize值较大或等于输入图像大小,则执行时间减少,代价是增加内存使用。

    例子:“BlockSize”,[20]20指定每个数据块的大小为20x20。

    输出参数

    全部折叠

    输出NDVI图像,返回大小矩阵——- - - - - -N而且N为输入数据多维数据集的空间维度。如果输入数据立方体的数据类型为,则输出数据类型为.否则,输出数据类型为

    该函数计算每个像素的NDVI值为

    N D V N R R N R + R

    取值范围为[- 1,1]。接近1的值表示健康的植被,0表示不健康的植被,-1表示没有植被。

    数据类型:|

    参考文献

    [1] Haboudane, D.“高光谱植被指数和预测作物冠层绿色LAI的新算法:精准农业背景下的建模和验证。”环境遥感90年,没有。3(2004年4月15日):337-52。https://doi.org/10.1016/j.rse.2003.12.013。

    版本历史

    R2020a中引入