基于C语言实现NDVI处理
现以一组遥感监测数据为例,结合 NDVI 计算公式,通过 C 语言编程工具实现其图像化的数据分析和处理,其核心步骤如下:
在对应遥感监测网站下载相关的遥感数据进行初步处理,将处理后的数据以文件形式存在对应文件夹下;
使用 c 语言编程对文件中的数据进行处理。打开文件 infilename,读取通道数据,分别读取红光波段数据集和近红外波段数据集,代码如下:
hid_t file_id,dataset_id1,dataset_id2;
// 打开输入的 HDF 文件 infilename
file_id = H5Fopen(infilename,H5F_ACC_RDONLY,H5P_DEFAULT);
// 打开红光波段数据集 SDSname1
dataset_id 1= H5Dopen(file_id,SDSname1,H5P_DEFAULT);
// 读取红光通道数据到 data1
H5D r e a d ( d a t a s e t _ i d1, H5T _ N A T I V E _USHORT,memspace,dataspace,H5P_DEFAULT,data1);
// 打开近红外波段数据集 SDSname2
dataset_id 2= H5Dopen(file_id,SDSname2,H5P_DEFAULT);
// 读取近红外通道数据到 data2
H5D r e a d ( d a t a s e t _ i d2, H5T _ N A T I V E _USHORT,memspace,dataspace,H5P_DEFAULT,data2);
// 关闭数据集和文件
H5Dclose(dataset_id1);
H5Dclose(dataset_id2);
H5Fclose(file_id);
完成对海陆模板数据的读取,代码如下:
FILE *fp;
// 打开二进制格式的海陆模板文件 landseamask
fp=fopen(landseamask,"rb");
// 读取数据到 tmpland
fread(tmpland, LAND_SEA_LON*LAND_SEA_
LAT*sizeof(unsigned char),1,fp);
依据读取到的数据以及 NDVI 计算公式,逐点循环计算并进行水体的判识,代码如下:
for(int i = 0 ; i< Height ; i++)
{
for(int j= 0 ; j< Width ; j++)
{
If(tmpland[i*Width+j] != 1) // 对水体进行判识,fillwater 为水体填充值
NDVIdata[i*Width+j] = fillwater;
else
NDVIdata[i*Width+j] =(data2[i*Width+j]-data1[i*Width+j])/(data2[i*Width+j]+data1[i*Width+j
]);
}
}